IEnhancedStorageSilo
COM公式ドキュメント
IEnhancedStorageSilo インターフェイスは IEEE 1667 サイロへのアクセス ポイントであり、サイロ レベルでの情報取得や操作の実行に使用します。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
サイロ オブジェクトに関連付けられた記述情報を返します。
| pSiloInfo | SILO_INFO* | out | サイロに関連付けられた記述情報を格納する SILO_INFO オブジェクトへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| サイロ情報が正常に取得されました。 |
サイロ オブジェクトで利用可能なすべてのアクションの列挙を返します。
| pppIEnhancedStorageSiloActions | IEnhancedStorageSiloAction*** | out | サイロ オブジェクトで利用可能なアクションを表す IEnhancedStorageAction インターフェイス オブジェクトへのポインターの配列。この配列は、サイロで少なくとも 1 つのアクションが利用可能な場合に API 内部で割り当てられます。 |
| pcEnhancedStorageSiloActions | DWORD* | out | 返された IEnhancedStorageAction ポインターの数。この値は pppIEnhancedStorageSilos が表す配列の要素数を示します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 1 つ以上の ACT が見つかりました。 | |
| pppIEnhancedStorageSiloActions または pcEnhancedStorageSiloActions が NULL です。 |
解説(Remarks)
IEnhancedStorageAction インターフェイス ポインターを格納するメモリは Enhanced Storage API によって割り当てられます。返されたポインターを CoTaskMemFree に渡して解放する必要があります。
サイロ オブジェクトに raw サイロ コマンドを送信します。このメソッドは、ドライバーによって表現されていないサイロと通信するために使用します。
| Command | BYTE | in | 発行するサイロ コマンド。この値の 8 ビットが、デバイスへ送信される CDB の位置 3 のバイト、すなわち SecurityProtocolSpecific フィールドの 2 番目のバイトに配置されます。 |
| pbCommandBuffer | BYTE* | in | コマンドの送信データ フェーズでデバイスに送信されるコマンド ペイロード。 |
| cbCommandBuffer | DWORD | in | pbCommandBuffer バッファーに含まれるバイト数。 |
| pbResponseBuffer | BYTE* | out | コマンドの受信データ フェーズでデバイスからホストに返される応答ペイロード。 |
| pcbResponseBuffer | DWORD* | inout | メソッドの呼び出し時には、pbResponseBuffer のサイズ (バイト単位) を格納します。メソッドの終了時には、返された pbResponse バッファーに含まれるバイト数を格納します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| サイロ コマンドが正常に完了しました。 | |
| pbCommandBuffer、pbResponseBuffer、または pcbResponseBuffer パラメーターが NULL です。 | |
|
pbResponseBuffer のサイズが応答データを格納するには不足しています。 |
解説(Remarks)
このメソッドは現在、IEEE 1667 の証明書サイロおよびパスワード サイロではサポートされていません。代わりに Enhanced Storage Portable Device Commands を使用することを推奨します。
正しいパラメーターをコマンドに渡すこと、および返される結果を格納するために必要なバッファーを割り当てることは、呼び出し元の責任です。
対応する Enhanced Storage サイロ ドライバーにコマンドを発行するために使用する IPortableDevice ポインターを取得します。
| ppIPortableDevice | IPortableDevice** | out | IPortableDevice オブジェクトへのポインターを受け取るポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| IPortableDevice へのポインターが正常に取得されました。 | |
| ppIPortableDevice が NULL です。 |
サイロ デバイス ノードへのパスを取得します。返される文字列は、CreateFile や SetupDiOpenDeviceInterface などの Windows システム API に渡すのに適した形式です。
| ppwszSiloDevicePath | LPWSTR* | out | サイロ デバイス ノードへのパスを表す文字列へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| デバイス パス文字列が正常に取得されました。 | |
| ppwszSiloDevicePath が NULL です。 |
解説(Remarks)
デバイス パス文字列を格納するメモリは Enhanced Storage API によって割り当てられます。返されたポインターを CoTaskMemFree に渡して解放する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IEnhancedStorageSilo "{5AEF78C6-2242-4703-BF49-44B29357A359}" #usecom global IEnhancedStorageSilo IID_IEnhancedStorageSilo "{CB25220C-76C7-4FEE-842B-F3383CD022BC}" #comfunc global IEnhancedStorageSilo_GetInfo 3 var #comfunc global IEnhancedStorageSilo_GetActions 4 sptr,var #comfunc global IEnhancedStorageSilo_SendCommand 5 int,var,int,var,var #comfunc global IEnhancedStorageSilo_GetPortableDevice 6 sptr #comfunc global IEnhancedStorageSilo_GetDevicePath 7 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IEnhancedStorageSilo "{5AEF78C6-2242-4703-BF49-44B29357A359}" #usecom global IEnhancedStorageSilo IID_IEnhancedStorageSilo "{CB25220C-76C7-4FEE-842B-F3383CD022BC}" #comfunc global IEnhancedStorageSilo_GetInfo 3 sptr #comfunc global IEnhancedStorageSilo_GetActions 4 sptr,sptr #comfunc global IEnhancedStorageSilo_SendCommand 5 int,sptr,int,sptr,sptr #comfunc global IEnhancedStorageSilo_GetPortableDevice 6 sptr #comfunc global IEnhancedStorageSilo_GetDevicePath 7 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。