Win32 API 日本語リファレンス
ホームStorage.Imapi › IFsiDirectoryItem

IFsiDirectoryItem

COMIDispatch (デュアル)
IDispatch を実装(デュアルインターフェース)。HSP では comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。
IID2c941fdc-975b-59be-a960-9a2a262853a5継承元IFsiItem呼び出し名前(IDispatch) または vtbl自前メソッド開始 vtbl19

公式ドキュメント

このインターフェイスを使用して、ファイルシステムイメージへの項目の追加や、項目の削除を行います。

解説(Remarks)

各ディレクトリ項目には、そのディレクトリ内の子項目の列挙可能なコレクションが含まれます。

ファイルおよびディレクトリの追加と削除は、そのディレクトリ項目がファイルシステムイメージに追加された後にのみ行えます。

スクリプトでは FsiDirectoryItem オブジェクトになります。

メソッド 10

vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。

vtbl 19 HRESULT get__NewEnum(IEnumVARIANT** NewEnum)

ファイルシステムイメージ内のディレクトリに含まれる子項目の一覧を取得します。(IFsiDirectoryItem.get__NewEnum)

NewEnumIEnumVARIANT**outディレクトリに含まれる子項目を列挙するために使用する IEnumVariant インターフェイスです。列挙の各項目は、型が VT_BSTR のバリアントです。子項目へのパスを取得するには、bstrVal メンバーを使用します。

戻り値

要求された数の要素 (celt) が正常に返された場合、または返された項目数 (pceltFetched) が要求された要素数より少ない場合に S_OK が返されます。celt パラメーターと pceltFetched パラメーターは IEnumVariant によって定義されます。

実装によっては、その他の成功コードが返される場合もあります。次のエラーコードは操作の失敗時によく返されるものですが、返される可能性のあるエラー値はこれらに限られません。

戻り値 説明
E_POINTER
ポインターが無効です。

値: 0x80004003

E_OUTOFMEMORY
必要なメモリを割り当てられませんでした。

値: 0x8007000E

解説(Remarks)

この列挙は、呼び出し時点でディレクトリに含まれていた子項目のスナップショットであり、その後に追加または削除された子項目は反映されません。

単一の項目を取得するには、IFsiDirectoryItem::get_Item プロパティを参照してください。

vtbl 20 HRESULT get_Item(LPWSTR path, IFsiItem** item)

指定したディレクトリ項目またはファイル項目をファイルシステムイメージから取得します。

pathLPWSTRin取得する項目へのパスを含む文字列です。
itemIFsiItem**out要求したディレクトリ項目またはファイル項目の IFsiItem インターフェイスです。

戻り値

成功した場合は S_OK が返されますが、実装によってはその他の成功コードが返される場合もあります。次のエラーコードは操作の失敗時によく返されるものですが、返される可能性のあるエラー値はこれらに限られません。

戻り値 説明
IMAPI_E_INVALID_PATH
パス '%1!s!' の形式が不正であるか、無効な文字が含まれています。

値: 0xC0AAB110

E_POINTER
ポインターが無効です。

値: 0x80004003

IMAPI_E_INVALID_PARAM
パラメーター %1!ls! に指定された値が無効です。

値: 0xC0AAB101

IMAPI_E_ITEM_NOT_FOUND
FileSystemImage の階層内に項目 %1!ls! が見つかりません。

値: 0xC0AAB118

E_OUTOFMEMORY
必要なメモリを割り当てられませんでした。

値: 0x8007000E

解説(Remarks)

項目がファイル項目かディレクトリ項目かを判別するには、インターフェイス識別子として __uuidof(IFsiDirectoryItem) を渡して IFsiItem::QueryInterface メソッドを呼び出します。呼び出しが成功した場合はディレクトリ項目であり、それ以外の場合はファイル項目です。

すべての子項目を列挙するには、IFsiDirectoryItem::get__NewEnum メソッドを呼び出します。

vtbl 21 HRESULT get_Count(INT* Count)

列挙に含まれる子項目の数です。

CountINT*outファイルシステムイメージ内のディレクトリに含まれる、ディレクトリ項目およびファイル項目の数です。

戻り値

成功した場合は S_OK が返されますが、実装によってはその他の成功コードが返される場合もあります。次のエラーコードは操作の失敗時によく返されるものですが、返される可能性のあるエラー値はこれらに限られません。

戻り値 説明
E_POINTER
ポインターが無効です。

値: 0x80004003

vtbl 22 HRESULT get_EnumFsiItems(IEnumFsiItems** NewEnum)

ファイルシステムイメージ内のディレクトリに含まれる子項目の一覧を取得します。(IFsiDirectoryItem.get_EnumFsiItems)

NewEnumIEnumFsiItems**outディレクトリに含まれる子ディレクトリ項目およびファイル項目のコレクションを保持する IEnumFsiItems インターフェイスです。

戻り値

成功した場合は S_OK が返されますが、実装によってはその他の成功コードが返される場合もあります。次のエラーコードは操作の失敗時によく返されるものですが、返される可能性のあるエラー値はこれらに限られません。

戻り値 説明
E_POINTER
ポインターが無効です。

値: 0x80004003

E_OUTOFMEMORY
必要なメモリを割り当てられませんでした。

値: 0x8007000E

解説(Remarks)

このプロパティは IFsiDirectoryItem::get__NewEnum プロパティと同じ結果を返し、C/C++ アプリケーションでの使用を想定しています。

vtbl 23 HRESULT AddDirectory(LPWSTR path)

ファイルシステムイメージにディレクトリを追加します。

pathLPWSTRin

作成するディレクトリの相対パスを含む文字列です。

ルートディレクトリ項目からこのメソッドを呼び出す場合は、完全なパスを指定します。

戻り値

成功した場合は S_OK が返されますが、実装によってはその他の成功コードが返される場合もあります。次のエラーコードは操作の失敗時によく返されるものですが、返される可能性のあるエラー値はこれらに限られません。

戻り値 説明
IMAPI_E_INVALID_PATH
パス '%1!s!' の形式が不正であるか、無効な文字が含まれています。

値: 0xC0AAB110

IMAPI_E_INVALID_PARAM
パラメーター %1!ls! に指定された値が無効です。

値: 0xC0AAB101

IMAPI_E_NOT_IN_FILE_SYSTEM
ls!' はファイルシステムの一部ではありません。この操作を完了するには追加する必要があります。

値: 0xC0AAB10B

IMAPI_E_READONLY
FileSystemImage オブジェクトが読み取り専用モードです。

値: 0xC0AAB102

解説(Remarks)

新しいサブディレクトリの親ディレクトリが、ファイルシステムイメージ内に既に存在している必要があります。

vtbl 24 HRESULT AddFile(LPWSTR path, IStream* fileData)

ファイルシステムイメージにファイルを追加します。

pathLPWSTRin

新しいファイルを格納するディレクトリの相対パスを含む文字列です。

ルートディレクトリ項目からこのメソッドを呼び出す場合は、完全なパスを指定します。

fileDataIStream*inメディアに書き込むファイル (データストリーム) の IStream インターフェイスです。

戻り値

成功した場合は S_OK が返されますが、実装によってはその他の成功コードが返される場合もあります。次のエラーコードは操作の失敗時によく返されるものですが、返される可能性のあるエラー値はこれらに限られません。

戻り値 説明
IMAPI_E_INVALID_PATH
パス '%1!s!' の形式が不正であるか、無効な文字が含まれています。

値: 0xC0AAB110

E_POINTER
ポインターが無効です。

値: 0x80004003

IMAPI_E_INVALID_PARAM
パラメーター %1!ls! に指定された値が無効です。

値: 0xC0AAB101

IMAPI_E_NOT_IN_FILE_SYSTEM
ls!' はファイルシステムの一部ではありません。この操作を完了するには追加する必要があります。

値: 0xC0AAB10B

IMAPI_E_READONLY
FileSystemImage オブジェクトが読み取り専用モードです。

値: 0xC0AAB102

解説(Remarks)

新しいファイルを格納するディレクトリが、ファイルシステムイメージ内に既に存在している必要があります。

vtbl 25 HRESULT AddTree(LPWSTR sourceDirectory, VARIANT_BOOL includeBaseDirectory)

ディレクトリツリーの内容をファイルシステムイメージに追加します。

sourceDirectoryLPWSTRin

作成するディレクトリツリーの相対パスを含む文字列です。

ルートディレクトリ項目からこのメソッドを呼び出す場合は、完全なパスを指定します。

includeBaseDirectoryVARIANT_BOOLinsourceDirectory のディレクトリ自体をファイルシステムイメージ内のサブディレクトリとして含める場合は VARIANT_TRUE を設定します。それ以外の場合は VARIANT_FALSE を設定します。

戻り値

成功した場合は S_OK が返されますが、実装によってはその他の成功コードが返される場合もあります。次のエラーコードは操作の失敗時によく返されるものですが、返される可能性のあるエラー値はこれらに限られません。

戻り値 説明
E_OUTOFMEMORY
必要なメモリを割り当てられませんでした。

値: 0x8007000E

E_POINTER
ポインターが無効です。

値: 0x80004003

IMAPI_E_DIRECTORY_READ_FAILURE
アクセス許可のため、ディレクトリツリー内のファイルを列挙できませんでした。

値: 0xC0AAB12BL

IMAPI_E_DATA_STREAM_CREATE_FAILURE
ディレクトリツリー内の 1 つ以上のファイルに、アクセス許可のためアクセスできません。

値: 0xC0AAB12A

IMAPI_E_DATA_STREAM_READ_FAILURE
ファイル '%1!ls!' 用に指定されたストリームからデータを読み取れません。

値: 0xC0AAB129

IMAPI_E_INVALID_PARAM
パラメーター %1!ls! に指定された値が無効です。

値: 0xC0AAB101

IMAPI_E_NOT_IN_FILE_SYSTEM
ls!' はファイルシステムの一部ではありません。この操作を完了するには追加する必要があります。

値: 0xC0AAB10B

IMAPI_E_READONLY
FileSystemImage オブジェクトが読み取り専用モードです。

値: 0xC0AAB102

IMAPI_E_IMAGE_SIZE_LIMIT
このファイルまたはディレクトリを追加すると、生成されるイメージのサイズが現在設定されている上限を超えます。

値: 0xC0AAB120

IMAPI_E_INVALID_PATH
パス '%1!s!' の形式が不正であるか、無効な文字が含まれています。

値: 0xC0AAB110

IMAPI_E_DUP_NAME
ls!' という名前は既に存在します。

値: 0xC0AAB112

IMAPI_E_NO_UNIQUE_NAME
'%1!ls!' の追加に失敗しました: %2!ls! ファイルシステム固有の一意な名前を作成できません。

値: 0xC0AAB113

IMAPI_E_ISO9660_LEVELS
ISO9660 ではディレクトリの階層は 8 レベルまでに制限されています。

値: 0xC0AAB131

IMAPI_E_TOO_MANY_DIRS
このファイルシステムイメージには、%1!ls! ファイルシステムに対してディレクトリが多すぎます。

値: 0xC0AAB130

IMAPI_E_DIR_NOT_FOUND
FileSystemImage の階層内にディレクトリ '%1!s!' が見つかりません。

値: 0xC0AAB11A

メモ GetFileAttributesEx 関数および FindFirstFile 関数が返す値が、ここで返される場合もあります。

解説(Remarks)

新しいサブディレクトリの親ディレクトリが、ファイルシステムイメージ内に既に存在している必要があります。

指定したソースディレクトリ内のサブディレクトリ構造は、ファイルシステムイメージにそのまま反映されます。

ファイルまたはディレクトリの名前が衝突した場合は、指定したソースディレクトリの内容が優先されます。ファイルシステムイメージは、ソースディレクトリの該当するディレクトリおよびファイルで上書きされます。

処理中に例外が発生した場合、ファイルシステムイメージは以前の状態に戻ります。

vtbl 26 HRESULT Add(IFsiItem* item)

IFsiItem オブジェクトが表すファイルまたはディレクトリをファイルシステムイメージに追加します。

itemIFsiItem*inファイルシステムイメージに追加する IFsiFileItem または IFsiDirectoryItemIFsiItem インターフェイスです。

戻り値

成功した場合は S_OK が返されますが、実装によってはその他の成功コードが返される場合もあります。次のエラーコードは操作の失敗時によく返されるものですが、返される可能性のあるエラー値はこれらに限られません。

戻り値 説明
E_POINTER
ポインターが無効です。

値: 0x80004003

IMAPI_E_INVALID_PATH
パス '%1!s!' の形式が不正であるか、無効な文字が含まれています。

値: 0xC0AAB110

IMAPI_E_DATA_STREAM_READ_FAILURE
ファイル '%1!ls!' 用に指定されたストリームからデータを読み取れません。

値: 0xC0AAB129

IMAPI_E_DUP_NAME
ls!' という名前は既に存在します。

値: 0xC0AAB112

IMAPI_E_NO_UNIQUE_NAME
'%1!ls!' の追加に失敗しました: %2!ls! ファイルシステム固有の一意な名前を作成できません。

値: 0xC0AAB113

IMAPI_E_IMAGE_SIZE_LIMIT
'%1!ls!' を追加すると、生成されるイメージのサイズが現在設定されている上限を超えます。

値: 0xC0AAB120

IMAPI_E_ISO9660_LEVELS
ISO9660 ではディレクトリの階層は 8 レベルまでに制限されています。

値: 0xC0AAB131

IMAPI_E_TOO_MANY_DIRS
このファイルシステムイメージには、%1!ls! ファイルシステムに対してディレクトリが多すぎます。

値: 0xC0AAB130

IMAPI_E_DIR_NOT_FOUND
FileSystemImage の階層内にディレクトリ '%1!s!' が見つかりません。

値: 0xC0AAB11A

IMAPI_E_NOT_IN_FILE_SYSTEM
このファイルまたはディレクトリはファイルシステムの一部ではありません。この操作を完了するには追加する必要があります。

値: 0xC0AAB10B

IMAPI_E_READONLY
FileSystemImage オブジェクトが読み取り専用モードです。

値: 0xC0AAB102

IMAPI_E_IMAGE_SIZE_LIMIT
このファイルまたはディレクトリを追加すると、生成されるイメージのサイズが現在設定されている上限を超えます。

値: 0xC0AAB120

E_OUTOFMEMORY
必要なメモリを割り当てられませんでした。

値: 0x8007000E

メモ IUnknown::QueryInterface メソッドが返す値が、ここで返される場合もあります。

解説(Remarks)

ディレクトリ項目またはファイル項目を作成するには、それぞれ IFileSystemImage::CreateDirectoryItem メソッドまたは IFileSystemImage::CreateFileItem メソッドを呼び出します。

項目がファイルシステムイメージに追加されると、IFsiFileItem::get_Data プロパティは読み取り専用になります。

vtbl 27 HRESULT Remove(LPWSTR path)

指定した項目をファイルシステムイメージから削除します。

pathLPWSTRin

削除する項目の相対パスを含む文字列です。 パスは現在のディレクトリ項目からの相対パスです。

ルートディレクトリ項目からこのメソッドを呼び出す場合は、完全なパスを指定します。

戻り値

成功した場合は S_OK が返されますが、実装によってはその他の成功コードが返される場合もあります。次のエラーコードは操作の失敗時によく返されるものですが、返される可能性のあるエラー値はこれらに限られません。

戻り値 説明
IMAPI_E_INVALID_PATH
パス '%1!s!' の形式が不正であるか、無効な文字が含まれています。

値: 0xC0AAB110

E_OUTOFMEMORY
必要なメモリを割り当てられませんでした。

値: 0x8007000E

IMAPI_E_INVALID_PARAM
パラメーター %1!ls! に指定された値が無効です。

値: 0xC0AAB101

IMAPI_E_NOT_IN_FILE_SYSTEM
ls!' はファイルシステムの一部ではありません。この操作を完了するには追加する必要があります。

値: 0xC0AAB10B

IMAPI_E_READONLY
FileSystemImage オブジェクトが読み取り専用モードです。

値: 0xC0AAB102

IMAPI_E_DIR_NOT_EMPTY
ディレクトリ %1!s! は空ではありません。

値: 0xC0AAB10A

IMAPI_E_FSI_INTERNAL_ERROR
内部エラーが発生しました: %1!ls!

値: 0xC0AAB100

解説(Remarks)

このメソッドは、ファイルシステムイメージ内に存在するディレクトリ項目に対してのみ呼び出せます。

vtbl 28 HRESULT RemoveTree(LPWSTR path)

指定したディレクトリツリーをファイルシステムイメージから削除します。

pathLPWSTRin削除するディレクトリの名前を含む文字列です。 パスは現在のディレクトリ項目からの相対パスです。

戻り値

成功した場合は S_OK が返されますが、実装によってはその他の成功コードが返される場合もあります。次のエラーコードは操作の失敗時によく返されるものですが、返される可能性のあるエラー値はこれらに限られません。

戻り値 説明
E_POINTER
path パラメーターが有効なポインターではありません。
IMAPI_E_INVALID_PARAM
パラメーター %1!ls! に指定された値が無効です。

値: 0xC0AAB101

IMAPI_E_INVALID_PATH
パス '%1!s!' の形式が不正であるか、無効な文字が含まれています。

値: 0xC0AAB110

IMAPI_E_NOT_IN_FILE_SYSTEM
ls!' はファイルシステムの一部ではありません。この操作を完了するには追加する必要があります。

値: 0xC0AAB10B

IMAPI_E_READONLY
FileSystemImage オブジェクトが読み取り専用モードです。

値: 0xC0AAB102

IMAPI_E_DIR_NOT_FOUND
指定されたディレクトリが存在しません。
IMAPI_E_DIR_NOT_EMPTY
ディレクトリ %1!s! は空ではありません。

値: 0xC0AAB10A

IMAPI_E_FSI_INTERNAL_ERROR
内部エラーが発生しました: %1!ls!

値: 0xC0AAB100

IMAPI_E_NOT_DIR
指定されたパス %1!ls! はディレクトリを指していません。

値: 0xC0AAB109

解説(Remarks)

ディレクトリ項目がファイルシステムイメージ内に存在している必要があります。

ルートディレクトリ項目に対してこのメソッドを呼び出し、パスに単一のパス区切り文字 (\) を指定すると、ファイルシステムイメージ全体を削除できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IFsiDirectoryItem "{2C941FDC-975B-59BE-A960-9A2A262853A5}"
#usecom global IFsiDirectoryItem IID_IFsiDirectoryItem "{}"
#comfunc global IFsiDirectoryItem_get__NewEnum      19 sptr
#comfunc global IFsiDirectoryItem_get_Item          20 wstr,sptr
#comfunc global IFsiDirectoryItem_get_Count         21 var
#comfunc global IFsiDirectoryItem_get_EnumFsiItems  22 sptr
#comfunc global IFsiDirectoryItem_AddDirectory      23 wstr
#comfunc global IFsiDirectoryItem_AddFile           24 wstr,sptr
#comfunc global IFsiDirectoryItem_AddTree           25 wstr,int
#comfunc global IFsiDirectoryItem_Add               26 sptr
#comfunc global IFsiDirectoryItem_Remove            27 wstr
#comfunc global IFsiDirectoryItem_RemoveTree        28 wstr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。