IFsiFileItem2
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
このインターフェイスは、ファイルに関連付けられた名前付きストリームの追加、削除、列挙に使用します。また、ファイルの 'Real-Time' 属性へのアクセスも提供します。
解説(Remarks)
名前付きストリームのサポートに必要な最小のリビジョンは UDF 2.0 ですが、名前付きストリームとリアルタイム ファイル属性の両方を使用するには、ユーザーが UDF 2.01 以上を有効にする必要があります。
このようなファイルを含む記憶メディアの受け取り側は、読み取り待ち時間を短縮し最悪時の読み取り速度を向上させる特別な MMC コマンドを使用して、それらを読み取る必要があります。
このインターフェイスは、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 では標準でサポートされます。
メソッド 6
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
ファイル システム イメージ内のファイルに関連付けられた名前付きストリームのコレクションを取得します。
| streams | IFsiNamedStreams** | out | ファイルに関連付けられた名前付きストリームのコレクションを表す IFsiNamedStreams オブジェクトへのポインター。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラー コードが一般的に返されますが、返される可能性のある値はこれらに限られません。
| 戻り値/値 | 説明 |
|---|---|
|
ポインターが無効です。 |
|
プロパティ '%1!ls!' にはアクセスできません。 |
|
必要なメモリの割り当てに失敗しました。 |
解説(Remarks)
名前付きストリーム自体を表すファイル アイテムに対してこのメソッドを呼び出した場合、名前付きストリームがさらに名前付きストリームを含むことはできないため、IMAPI_E_PROPERTY_NOT_ACCESSIBLE エラー コードが返されます。
名前付きストリームをサポートするには、ユーザーが 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 では標準でサポートされます。
アイテムが名前付きストリームかどうかを判定します。
| pVal | VARIANT_BOOL* | out | アイテムが名前付きストリームかどうかを示す値へのポインター。名前付きストリームである場合は VARIANT_TRUE、そうでない場合は VARIANT_FALSE になります。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラー コードが一般的に返されますが、返される可能性のある値はこれらに限られません。
| 戻り値 | 説明 |
|---|---|
|
ポインターが無効です。
値: 0x80004003 |
解説(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 では標準でサポートされます。
ファイル システム イメージ内の特定のファイルに名前付きストリームを関連付けます。
| name | LPWSTR | in | 名前付きストリームの名前を表す文字列。パスを含めてはならず、ファイル システムの命名規則で有効な文字のみを含める必要があります。 |
| streamData | IStream* | in | 生成されるファイル システム イメージへの書き込みに使用される、名前付きストリームの IStream インターフェイス。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラー コードが一般的に返されますが、返される可能性のある値はこれらに限られません。
| 戻り値/値 | 説明 |
|---|---|
|
この機能は現在のファイル システム リビジョンではサポートされていないため、この機能なしで作成されます。 |
|
ポインターが無効です。 |
|
パラメーター '%1!ls!' に指定された値が無効です。 |
|
ls!' はファイル システムの一部ではありません。この操作を完了するには追加する必要があります。 |
|
参照されている IFileSystemImage オブジェクトは読み取り専用モードです。 |
|
ファイル システムの内部エラーが発生しました。 |
|
'%1!ls!' という名前は既に存在します。 |
|
ファイル '%1!ls!' 用に指定されたストリームからデータを読み取れません。 |
|
'%1!ls!' を追加すると、結果のイメージのサイズが現在構成されている上限を超えます。 |
|
ファイル '%1!ls!' 用に指定されたデータ ストリームに不整合があります。%2!I64d! バイトが必要ですが、%3!I64d! でした |
|
必要なメモリの割り当てに失敗しました。 |
解説(Remarks)
名前付きストリームを追加する対象のファイルは、あらかじめファイル システム イメージ内に存在している必要があります。既に名前付きストリームとして存在する name を指定してこのメソッドを呼び出した場合はエラーが返され、既存の名前付きストリームは置き換えられません。
生成されるイメージで作成対象として有効になっているファイル システムの一覧に UDF が含まれていないファイル システム オブジェクト、または UDF リビジョンが 2.00 未満のファイル システム オブジェクトに対してこのメソッドを呼び出した場合、成功コード IMAPI_S_IMAGE_FEATURE_NOT_SUPPORTED が返されます。この成功コードは、名前付きストリームは追加されたものの、ファイル システム オブジェクトで UDF リビジョン 2.00 以上が有効になっていない限り、生成されるファイル システム イメージには現れないことを示します。
現在のところ、インポートされたファイル システム イメージに対してこのメソッドを呼び出すと、イメージの読み取り専用状態にかかわらず IMAPI_E_READONLY が返されます。
このメソッドは、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 では標準でサポートされます。
ファイルに対する名前付きストリームの関連付けを削除します。
| name | LPWSTR | in | 削除する名前付きストリームの関連付けの名前を指定する文字列。パスを含めてはならず、ファイル システムの命名規則で有効な文字のみを含める必要があります。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラー コードが一般的に返されますが、返される可能性のある値はこれらに限られません。
| 戻り値/値 | 説明 |
|---|---|
|
この機能は現在のファイル システム リビジョンではサポートされていないため、この機能なしで作成されます。 |
|
ポインターが無効です。 |
|
パラメーター '%1!ls!' に指定された値が無効です。 |
|
ls!' はファイル システムの一部ではありません。この操作を完了するには追加する必要があります。 |
|
参照されている IFileSystemImage オブジェクトは読み取り専用モードです。 |
|
ファイル システムの内部エラーが発生しました。 |
|
'%1!ls!' という名前は既に存在します。 |
|
ファイル '%1!ls!' 用に指定されたストリームからデータを読み取れません。 |
|
'%1!ls!' を追加すると、結果のイメージのサイズが現在構成されている上限を超えます。 |
|
ファイル '%1!ls!' 用に指定されたデータ ストリームに不整合があります。%2!I64d! バイトが必要ですが、%3!I64d! でした |
|
必要なメモリの割り当てに失敗しました。 |
解説(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 では標準でサポートされます。
ファイル システム イメージ内のファイル アイテムが 'Real-Time' ファイルか標準のファイルかを示すプロパティ値を取得します。
| pVal | VARIANT_BOOL* | out | ファイル システム イメージ内でファイルの Real-Time 属性が設定されているかどうかを示す値へのポインター。VARIANT_TRUE は属性が設定されていることを示し、それ以外の場合は VARIANT_FALSE になります。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラー コードが一般的に返されますが、返される可能性のある値はこれらに限られません。
| 戻り値/値 | 説明 |
|---|---|
|
ポインターが無効です。 |
|
プロパティ '%1!ls!' にはアクセスできません。 |
解説(Remarks)
名前付きストリームを表すファイル アイテムに対してこのメソッドを呼び出した場合、名前付きストリームは Real-Time 属性を持たないため、 エラー コード IMAPI_E_PROPERTY_NOT_ACCESSIBLE が返されます。
Real-Time ファイルをサポートするには、ユーザーが UDF を有効にし、UDF リビジョンを 2.01 以上に設定する必要があります。
このメソッドは、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 では標準でサポートされます。
ファイル システム内のファイルの 'Real-Time' 属性を設定します。この属性は、書き込みまたは読み取りの際にコンテンツが最小データ転送速度を必要とするかどうか (たとえば音声データや映像データなど) を指定します。
| newVal | VARIANT_BOOL | in | ファイル システム イメージ内のファイルの Real-Time 属性を設定するには VARIANT_TRUE を、それ以外の場合は VARIANT_FALSE を指定します。既定値は VARIANT_FALSE です。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラー コードが一般的に返されますが、返される可能性のある値はこれらに限られません。
| 戻り値/値 | 説明 |
|---|---|
|
この機能は現在のファイル システム リビジョンではサポートされていません。そのため、ファイルは Real-Time としてマークされますが、ファイル システム オブジェクトで UDF リビジョン 2.01 以上が有効になっていない限り、生成されるファイル システム イメージにはそのようには現れません。 |
|
プロパティ '%1!ls!' にはアクセスできません。 |
|
パラメーター '%1!ls!' に指定された値が無効です。 |
解説(Remarks)
IFsiDirectoryItem::AddTree メソッドおよび IFsiDirectoryItem2::AddTreeWithNamedStreams メソッドは、ファイル システム イメージへのファイル追加時に Real-Time 属性を設定しません。ファイルを Real-Time ファイルとしてマークするには、ファイル システム イメージに追加した後で列挙し、個別に Real-Time 属性を設定する必要があります。
名前付きストリームを表すファイル アイテムに対してこのメソッドを呼び出した場合、名前付きストリームは Real-Time 属性を持たないため、 エラー コード IMAPI_E_PROPERTY_NOT_ACCESSIBLE が返されます。
このメソッドは、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_IFsiFileItem2 "{199D0C19-11E1-40EB-8EC2-C8C822A07792}" #usecom global IFsiFileItem2 IID_IFsiFileItem2 "{}" #comfunc global IFsiFileItem2_get_FsiNamedStreams 24 sptr #comfunc global IFsiFileItem2_get_IsNamedStream 25 var #comfunc global IFsiFileItem2_AddStream 26 wstr,sptr #comfunc global IFsiFileItem2_RemoveStream 27 wstr #comfunc global IFsiFileItem2_get_IsRealTime 28 var #comfunc global IFsiFileItem2_put_IsRealTime 29 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IFsiFileItem2 "{199D0C19-11E1-40EB-8EC2-C8C822A07792}" #usecom global IFsiFileItem2 IID_IFsiFileItem2 "{}" #comfunc global IFsiFileItem2_get_FsiNamedStreams 24 sptr #comfunc global IFsiFileItem2_get_IsNamedStream 25 sptr #comfunc global IFsiFileItem2_AddStream 26 wstr,sptr #comfunc global IFsiFileItem2_RemoveStream 27 wstr #comfunc global IFsiFileItem2_get_IsRealTime 28 sptr #comfunc global IFsiFileItem2_put_IsRealTime 29 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。