IFsiDirectoryItem2
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
すべてのサブディレクトリ、ファイル、および関連する名前付きストリームを含むディレクトリツリーをファイルシステムイメージに追加するには、このインターフェースを使用します。
解説(Remarks)
すべてのサブディレクトリ、ファイル、および関連する名前付きストリームは、ディレクトリアイテムがファイルシステムイメージに追加された後にのみ追加できます。
ファイルシステムイメージの作成時に名前付きストリームのサポートを有効にするには、UDF を有効にし、UDF リビジョン 2.00 以降に設定する必要があります。
このインターフェースは、Windows Server 2003 Service Pack 1 (SP1)、Windows XP Service Pack 2 (SP2)、および Windows Vista では Windows Feature Pack for Storage を介してサポートされます。この更新パッケージが提供するすべての機能は、Windows 7 および Windows Server 2008 R2 ではネイティブにサポートされます。
メソッド 1
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
ディレクトリツリーの内容を、すべてのファイルに関連付けられた名前付きストリームとともにファイルシステムイメージに追加します。
| sourceDirectory | LPWSTR | in | 作成するディレクトリツリーの相対パスを格納した文字列。パスには、ファイルシステムの命名規則に従った有効な文字のみを含める必要があります。 このパラメーターに NULL を指定することはできません。 注意 ルートディレクトリアイテムからこのメソッドを呼び出す場合は、フルパスを指定する必要があります。
|
| includeBaseDirectory | VARIANT_BOOL | in | sourceDirectory のディレクトリをファイルシステムイメージ内のサブディレクトリとして含める場合は VARIANT_TRUE を設定します。それ以外の場合は VARIANT_FALSE を設定します。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は、次のエラーコードが一般的に返されますが、返される可能性のあるエラー値はこれらだけではありません。
| リターンコード/値 | 説明 |
|---|---|
|
現在のファイルシステムリビジョンではこの機能はサポートされていないため、この機能なしで作成されます。 |
|
パラメーター '%1!ls!' に指定された値が無効です。 |
|
ls!' はファイルシステムの一部ではありません。この操作を完了するには追加する必要があります。 |
|
'%1!ls!' のデータストリームの作成中にエラーが発生しました。 |
|
ファイル '%1!ls!' に指定されたストリームからデータを読み取れません。 |
|
参照されている IFileSystemImage オブジェクトが読み取り専用モードです。 |
|
'%1!ls!' という名前は既に存在します。 |
|
'%1!ls!' を追加すると、結果として得られるイメージのサイズが現在構成されている上限を超えてしまいます。 |
|
ファイル '%1!ls!' に指定されたデータストリームに不整合があります。%2!I64d! バイトを想定していましたが、%3!I64d! が見つかりました |
|
必要なメモリの割り当てに失敗しました。 |
解説(Remarks)
新しいサブディレクトリの親ディレクトリが、ファイルシステムイメージ内に既に存在している必要があります。
指定した sourceDirectory 内のサブディレクトリ構造は、ファイルシステムイメージ内に暗黙的にミラーリングされます。 ファイルまたはディレクトリの衝突が発生した場合は、指定したソースディレクトリの内容が優先されます。
ファイルシステムイメージは、ソースディレクトリから取得した該当のディレクトリおよびファイルで上書きされます。 処理中に例外が発生した場合、ファイルシステムイメージは以前の状態に戻ります。
結果のイメージ作成用に有効化されたファイルシステムの一覧に UDF が含まれていないファイルシステムオブジェクトに対して、または UDF リビジョンが 2.00 未満の場合にこのメソッドを呼び出すと、成功コード IMAPI_S_IMAGE_FEATURE_NOT_SUPPORTED が返されます。これは、名前付きストリームは追加されたものの、ファイルシステムオブジェクトで UDF リビジョン 2.00 以上が有効になっていない限り、結果のファイルシステムイメージには現れないことを示します。
代替データストリーム (ADS) を利用する場合、ファイルシステムイメージにはストリーム数 1000 という制限がある点に注意してください。この数を超えるとデータが失われます。
このメソッドは、Windows Server 2003 Service Pack 1 (SP1)、Windows XP Service Pack 2 (SP2)、および Windows Vista では Windows Feature Pack for Storage を介してサポートされます。この更新パッケージが提供するすべての機能は、Windows 7 および Windows Server 2008 R2 ではネイティブにサポートされます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IFsiDirectoryItem2 "{F7FB4B9B-6D96-4D7B-9115-201B144811EF}"
#usecom global IFsiDirectoryItem2 IID_IFsiDirectoryItem2 "{}"
#comfunc global IFsiDirectoryItem2_AddTreeWithNamedStreams 29 wstr,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。