IOfflineFilesItem
COM公式ドキュメント
オフラインファイルのキャッシュ内の 1 つの項目を表します。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
項目の種類 (サーバー、共有、ディレクトリ、またはファイル) を識別する種類コードを返します。
| pItemType | OFFLINEFILES_ITEM_TYPE* | out | 項目の種類を示す OFFLINEFILES_ITEM_TYPE 列挙値を受け取ります。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合はエラー値を返します。
解説(Remarks)
項目の種類を判別するもう 1 つの方法は、次のいずれかの種類固有のインターフェイスを項目に対してクエリすることです。
IOfflineFilesDirectoryItem IOfflineFilesFileItem IOfflineFilesServerItem IOfflineFilesShareItem QueryInterface の呼び出しが成功した場合、その項目は要求した種類です。項目は上記のうち 1 つの種類にのみ該当します。
オフラインファイルのキャッシュ内の項目について、完全修飾 UNC パス文字列を取得します。
| ppszPath | LPWSTR* | out | 項目の完全修飾 UNC パスを受け取ります。呼び出し元は CoTaskMemFree 関数を使用してパスバッファーを解放する責任があります。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合はエラー値を返します。
項目の親に対する IOfflineFilesItem インターフェイスを取得します。
| ppItem | IOfflineFilesItem** | out | 親項目の IOfflineFilesItem インターフェイスのアドレスを受け取ります。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合はエラー値を返します。
項目がサーバー項目である場合、このメソッドは HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) を返します。サーバー項目はオフラインファイルのキャッシュ名前空間の最上位に位置し、親項目を持ちません。サーバー項目の親はキャッシュそのものです。これは、IOfflineFilesItem のインスタンスがサーバー項目のコンテナーでもあるという形で表現されています。
オフラインファイルのキャッシュから再読み取りを行い、オブジェクト内にキャッシュされているデータを更新します。
| dwQueryFlags | DWORD | in | 未定 (TBD)。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合はエラー値を返します。
ファイルがキャッシュ内に存在しない場合は HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) を返します。これは、ファイルオブジェクトが作成された後にファイルがキャッシュから削除された場合に発生します。
解説(Remarks)
ファイルオブジェクトが最初に作成されるとき、その内部データはオフラインファイルのキャッシュからの情報で初期化されます。オブジェクトがメモリ上に保持されている間に、キャッシュ内の実際の状態がいつでも変化する可能性があります。Refresh を呼び出すと、オフラインファイルのキャッシュから取得した最新の情報でオブジェクトが更新されます。
項目がオフラインファイルのキャッシュから削除されているかどうかを判別します。
| pbMarkedForDeletion | BOOL* | out | 項目が削除されている場合は TRUE、それ以外の場合は FALSE を受け取ります。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合はエラー値を返します。
解説(Remarks)
リモートファイルシステムおよび CSC ドライバーによるデータ構造の内部 (メモリ上) キャッシュのため、項目を削除してもその項目がキャッシュから直ちに取り除かれるとは限りません。項目はまず削除対象としてマークされ、すべてのハンドルが閉じられた後にキャッシュから取り除かれます。この動作は共有項目で特に顕著です。
クライアントは通常、このような項目をキャッシュ内に存在しないものとして扱う必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOfflineFilesItem "{4A753DA6-E044-4F12-A718-5D14D079A906}" #usecom global IOfflineFilesItem IID_IOfflineFilesItem "{}" #comfunc global IOfflineFilesItem_GetItemType 3 var #comfunc global IOfflineFilesItem_GetPath 4 var #comfunc global IOfflineFilesItem_GetParentItem 5 sptr #comfunc global IOfflineFilesItem_Refresh 6 int #comfunc global IOfflineFilesItem_IsMarkedForDeletion 7 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IOfflineFilesItem "{4A753DA6-E044-4F12-A718-5D14D079A906}" #usecom global IOfflineFilesItem IID_IOfflineFilesItem "{}" #comfunc global IOfflineFilesItem_GetItemType 3 sptr #comfunc global IOfflineFilesItem_GetPath 4 sptr #comfunc global IOfflineFilesItem_GetParentItem 5 sptr #comfunc global IOfflineFilesItem_Refresh 6 int #comfunc global IOfflineFilesItem_IsMarkedForDeletion 7 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。