IWMDMStorageControl2
COM公式ドキュメント
IWMDMStorageControl2 インターフェイスは IWMDMStorageControl を拡張し、ストレージにコンテンツを挿入する際に、コピー先ファイルの名前を設定できるようにします。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Insert2 メソッドは、コンテンツをストレージ内またはストレージの隣に配置します。このメソッドは IWMDMStorageControl::Insert を拡張し、アプリケーションが新しいコピー先の名前を指定したり、カスタム COM オブジェクトへのポインターを渡したりできるようにします。
| fuMode | DWORD | in | Insert2 操作で使用する処理モード。次の表に、fuMode パラメーターで指定できる処理モードを示します。最初の 2 つのモードのうち 1 つ、STORAGECONTROL モードのうち 1 つ、CONTENT モードのうち 1 つを、それぞれ厳密に指定する必要があります。WMDM_MODE_BLOCK と WMDM_MODE_THREAD の両方を指定した場合は、ブロック モードが使用されます。
| ||||||||||||||||||||||||||||||||||||||||||
| pwszFileSource | LPWSTR | inoptional | デバイスに送信するオブジェクトの完全な名前とパスを示す、ワイド文字の null 終端文字列へのポインター。fuMode に WMDM_CONTENT_OPERATIONINTERFACE を指定した場合、このパラメーターは NULL でなければなりません。 | ||||||||||||||||||||||||||||||||||||||||||
| pwszFileDest | LPWSTR | inoptional | デバイス上のファイル名 (省略可能)。指定せず、アプリケーションが pOperation に IWMDMOperation ポインターを渡した場合、Windows Media Device Manager は IWMDMOperation::GetObjectName を呼び出してコピー先の名前を要求します。指定せず、アプリケーションが pOperation も使用しない場合は、元のファイル名と拡張子が (パスを除いて) 使用されます。 | ||||||||||||||||||||||||||||||||||||||||||
| pOperation | IWMDMOperation* | inoptional | メディア デバイスへのコンテンツ転送を制御する IWMDMOperation インターフェイスへのポインター (省略可能)。指定する場合、fuMode に WMDM_CONTENT_OPERATIONINTERFACE フラグを含める必要があります。fuMode に WMDM_CONTENT_FILE または WMDM_CONTENT_FOLDER を指定した場合、このパラメーターは NULL でなければなりません。 | ||||||||||||||||||||||||||||||||||||||||||
| pProgress | IWMDMProgress* | inoptional | 処理の進行状況をアプリケーションに報告する IWMDMProgress インターフェイスへのポインター (省略可能)。指定する場合、fuMode に WMDM_MODE_PROGRESS を含める必要があります。 | ||||||||||||||||||||||||||||||||||||||||||
| pUnknown | IUnknown* | inoptional | セキュア コンテンツ プロバイダーに渡す任意のカスタム COM オブジェクトの IUnknown ポインター (省略可能)。アプリケーションがセキュア コンテンツ プロバイダーに関する十分な情報を持っている場合、これによりカスタム情報をセキュア コンテンツ プロバイダーに渡すことができます。 | ||||||||||||||||||||||||||||||||||||||||||
| ppNewObject | IWMDMStorage** | inoutoptional | 新しいコンテンツを格納する IWMDMStorage インターフェイスへのポインター。呼び出し元は、使用が終わったらこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイス メソッドは、次の種類のエラー コードを返す可能性があります。
- 標準の COM エラー コード
- HRESULT 値に変換された Windows エラー コード
- Windows Media Device Manager のエラー コード
解説(Remarks)
デバイスが IWMDMStorageControl3::Insert3 をサポートしている場合は、そちらを使用することが推奨されます。
WMDM_MODE_THREAD フラグを指定した場合は、IWMDMProgress2::End2 または IWMDMProgress3::End3 のいずれかを呼び出して完了状態を取得してください。これらのメソッドは操作が完了したことを保証し、成功または失敗の情報を含む HRESULT も返します。
アプリケーションが WMDM_MODE_THREAD を使用し、null 以外の pProgress パラメーターを渡す場合、Windows Media Device Manager がこのオブジェクトに進行状況の通知を送信するため、挿入操作が完了するまで pProgress が属するオブジェクトを破棄しないようにする必要があります。このオブジェクトは、End 通知を受け取った後にのみ破棄できます。これを怠るとアクセス違反が発生します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMDMStorageControl2 "{972C2E88-BD6C-4125-8E09-84F837E637B6}"
#usecom global IWMDMStorageControl2 IID_IWMDMStorageControl2 "{}"
#comfunc global IWMDMStorageControl2_Insert2 8 int,wstr,wstr,sptr,sptr,sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。