IFsiNamedStreams
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ファイルシステムイメージ内のファイルに関連付けられた名前付きストリームを列挙するには、このインターフェイスを使用します。
解説(Remarks)
このインターフェイスにアクセスするには、標準ファイルまたは 'Real-Time' ファイルを表すファイルアイテムオブジェクトの IFsiFileItem2::get_FsiNamedStreams メソッドを呼び出します。
このインターフェイスは、通常のファイルまたは 'Real-Time' ファイルを表すファイルアイテムオブジェクトに対してのみ提供されます。名前付きストリームに、さらに別の名前付きストリームを関連付けることはできません。
名前付きストリームのサポートを有効にするには、UDF を有効にし、UDF リビジョン 2.00 以降に設定する必要があります。
このインターフェイスは、Windows Server 2003 with Service Pack 1 (SP1)、Windows XP with Service Pack 2 (SP2)、および Windows Vista では、Windows Feature Pack for Storage を通じてサポートされます。この更新パッケージが提供するすべての機能は、Windows 7 および Windows Server 2008 R2 ではネイティブにサポートされます。
メソッド 4
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
ファイルシステムイメージ内のファイルに関連付けられた名前付きストリームの IEnumVARIANT リストを取得します。
| NewEnum | IEnumVARIANT** | out | ファイルに関連付けられた名前付きストリームを列挙するために使用する IEnumVariant インターフェイスへのポインターへのポインター。列挙の要素は VT_BSTR 型のバリアントです。名前付きストリームへのパスを取得するには、bstrVal メンバーを使用します。 |
戻り値
要求された要素数 (celt) が正常に返された場合、または返された要素数 (pceltFetched) が要求された要素数より少ない場合、S_OK が返されます。celt パラメーターおよび pceltFetched パラメーターは IEnumVariant で定義されています。
実装によっては、これ以外の成功コードが返される場合もあります。操作が失敗した場合は次のエラーコードが一般的に返されますが、返される可能性があるのはこれらの値だけではありません。
| リターンコード/値 | 説明 |
|---|---|
|
ポインターが有効ではありません。 |
|
必要なメモリの割り当てに失敗しました。 |
解説(Remarks)
この列挙は、呼び出し時点でファイルに関連付けられている名前付きストリームのスナップショットであり、その後に追加または削除された名前付きストリームは反映されません。
単一の名前付きストリームを取得するには、IFsiNamedStreams::get_Item メソッドを使用します。
このメソッドは、Windows Server 2003 with Service Pack 1 (SP1)、Windows XP with Service Pack 2 (SP2)、および Windows Vista では、Windows Feature Pack for Storage を通じてサポートされます。この更新パッケージが提供するすべての機能は、Windows 7 および Windows Server 2008 R2 ではネイティブにサポートされます。
ファイルシステムイメージ内のファイルに関連付けられた単一の名前付きストリームを取得します。
| index | INT | in | コレクション内での名前付きストリームの位置を示す値です。 インデックス番号は 0 から始まります。つまり、最初の要素はコレクションの位置 0 にあります。 |
| item | IFsiFileItem2** | out | index で指定された位置にある名前付きストリームを表す IFsiFileItem2 オブジェクトへのポインターへのポインター。指定されたインデックスがコレクションの範囲内にない場合、このパラメーターには NULL が設定されます。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては、これ以外の成功コードが返される場合もあります。操作が失敗した場合は次のエラーコードが一般的に返されますが、返される可能性があるのはこれらの値だけではありません。
| リターンコード/値 | 説明 |
|---|---|
|
ポインターが有効ではありません。 |
|
パラメーター '%1!ls!' に指定された値が無効です。 |
解説(Remarks)
インデックス番号が負の値または範囲外の場合、このメソッドは IMAPI_E_INVALID_PARAM を返します。
ファイルに関連付けられたすべての名前付きストリームに対する IEnumVARIANT 列挙子を取得するには、IFsiNamedStreams::get__NewEnum メソッドを使用します。
このメソッドは、Windows Server 2003 with Service Pack 1 (SP1)、Windows XP with Service Pack 2 (SP2)、および Windows Vista では、Windows Feature Pack for Storage を通じてサポートされます。この更新パッケージが提供するすべての機能は、Windows 7 および Windows Server 2008 R2 ではネイティブにサポートされます。
ファイルシステムイメージ内のファイルに関連付けられた名前付きストリームの数を返します。
| count | INT* | out | コレクション内の名前付きストリームの総数を示す値へのポインター。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては、これ以外の成功コードが返される場合もあります。操作が失敗した場合は次のエラーコードが一般的に返されますが、返される可能性があるのはこれらの値だけではありません。
| リターンコード/値 | 説明 |
|---|---|
|
ポインターが有効ではありません。 |
解説(Remarks)
このメソッドは、Windows Server 2003 with Service Pack 1 (SP1)、Windows XP with Service Pack 2 (SP2)、および Windows Vista では、Windows Feature Pack for Storage を通じてサポートされます。この更新パッケージが提供するすべての機能は、Windows 7 および Windows Server 2008 R2 ではネイティブにサポートされます。
ファイルシステムイメージ内のファイルに関連付けられた名前付きストリームのコレクションに対して、バリアント型ではない列挙子を作成します。
| NewEnum | IEnumFsiItems** | out | ファイルに関連付けられた名前付きストリームのコレクションを表す IEnumFsiItems オブジェクトへのポインターへのポインター。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては、これ以外の成功コードが返される場合もあります。操作が失敗した場合は次のエラーコードが一般的に返されますが、返される可能性があるのはこれらの値だけではありません。
| リターンコード/値 | 説明 |
|---|---|
|
ポインターが有効ではありません。 |
|
必要なメモリの割り当てに失敗しました。 |
解説(Remarks)
このメソッドは、Windows Server 2003 with Service Pack 1 (SP1)、Windows XP with 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_IFsiNamedStreams "{ED79BA56-5294-4250-8D46-F9AECEE23459}" #usecom global IFsiNamedStreams IID_IFsiNamedStreams "{}" #comfunc global IFsiNamedStreams_get__NewEnum 7 sptr #comfunc global IFsiNamedStreams_get_Item 8 int,sptr #comfunc global IFsiNamedStreams_get_Count 9 var #comfunc global IFsiNamedStreams_get_EnumNamedStreams 10 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IFsiNamedStreams "{ED79BA56-5294-4250-8D46-F9AECEE23459}" #usecom global IFsiNamedStreams IID_IFsiNamedStreams "{}" #comfunc global IFsiNamedStreams_get__NewEnum 7 sptr #comfunc global IFsiNamedStreams_get_Item 8 int,sptr #comfunc global IFsiNamedStreams_get_Count 9 sptr #comfunc global IFsiNamedStreams_get_EnumNamedStreams 10 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。