IFileSystemImage2
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
EFI/UEFI サポートに必要な複数のブートエントリやブートイメージを書き込むには、このインターフェイスを使用します。たとえば、Windows XP と Windows Vista の両方のブートストラップを備えたブートメディアなどです。
解説(Remarks)
ブートエントリは、このインターフェイスによって 1 ディスクあたり 32 個までに制限されます。 ブートイメージは、ブータブルディスクを作成するために IMAPIv2FS を呼び出す外部アプリケーションから IMAPIv2FS に提供する必要があります。
Section Entry Extension は、現時点では IMAPIv2FS でサポートされていません。
メソッド 2
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
ファイルシステムイメージの生成に使用されるブートオプション配列を取得します。
| pVal | SAFEARRAY** | out | ファイルシステムイメージの生成に使用されるブートイメージの IBootOptions インターフェイスのリストを格納するブートオプション配列へのポインター。リストの各要素は VT_DISPATCH 型の VARIANT です。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。次のエラーコードは操作失敗時に一般的に返されるものですが、返される可能性のあるエラー値はこれらに限られません。
| 戻り値 | 説明 |
|---|---|
|
ポインターが有効ではありません。
値: 0x80004003 |
|
|
ブートオブジェクトは初期ディスクイメージにのみ含めることができます。
値: 0xC0AAB149 |
|
|
ブートオブジェクトをイメージに追加できませんでした。
値: 0xC0AAB148 |
解説(Remarks)
SAFEARRAY は 1 次元配列になります。ブートイメージが指定されていない場合は、サイズ 0 の配列が返されます。
ファイルシステムイメージの生成に使用されるブートオプション配列を設定します。IFileSystemImage::put_BootImageOptions とは異なり、このメソッドはブートオプション配列の各要素の完全なコピーを作成せず、代わりに各要素への参照を使用します。
| newVal | SAFEARRAY* | in | ファイルシステムイメージの生成に使用されるブートイメージの IBootOptions インターフェイスのリスト。リストの各要素は VT_DISPATCH 型の VARIANT です。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。次のエラーコードは操作失敗時に一般的に返されるものですが、返される可能性のあるエラー値はこれらに限られません。
| 戻り値 | 説明 |
|---|---|
|
そのようなインターフェイスはサポートされていません。
値: 0x80004002 |
|
|
ブートオブジェクトは初期ディスクイメージにのみ含めることができます。
値: 0xC0AAB149 |
|
|
ブートオブジェクトをイメージに追加できませんでした。
値: 0xC0AAB148 |
解説(Remarks)
SAFEARRAY は 1 次元配列である必要があります。サイズ 0 の配列も指定できますが、その場合は通常のブート不可能なディスクになります。
ディスク上のブートイメージの順序は、SAFEARRAY で指定された順序と一致します。ブートイメージの指定には put_BootImageOptionsArray と put_BootImageOptions の両方が使用され、後者の関数は作成されたディスクイメージが有効になる前に呼び出されます。
get_BootImageOptionsArray および get_BootImageOptions 関数は、put_BootImageOptionsArray または put_BootImageOptions の最後の呼び出しの結果を取得します。これらの関数の使用は同期する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IFileSystemImage2 "{D7644B2C-1537-4767-B62F-F1387B02DDFD}" #usecom global IFileSystemImage2 IID_IFileSystemImage2 "{}" #comfunc global IFileSystemImage2_get_BootImageOptionsArray 57 var #comfunc global IFileSystemImage2_put_BootImageOptionsArray 58 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IFileSystemImage2 "{D7644B2C-1537-4767-B62F-F1387B02DDFD}" #usecom global IFileSystemImage2 IID_IFileSystemImage2 "{}" #comfunc global IFileSystemImage2_get_BootImageOptionsArray 57 sptr #comfunc global IFileSystemImage2_put_BootImageOptionsArray 58 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。