Win32 API 日本語リファレンス
ホームMedia.DeviceManager › IWMDMStorageControl2

IWMDMStorageControl2

COM
IID972c2e88-bd6c-4125-8e09-84f837e637b6継承元IWMDMStorageControl自前メソッド開始 vtbl8

公式ドキュメント

IWMDMStorageControl2 インターフェイスは IWMDMStorageControl を拡張し、ストレージにコンテンツを挿入する際に、コピー先ファイルの名前を設定できるようにします。

メソッド 1

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 8 HRESULT Insert2(DWORD fuMode, LPWSTR pwszFileSource, LPWSTR pwszFileDest, IWMDMOperation* pOperation, IWMDMProgress* pProgress, IUnknown* pUnknown, IWMDMStorage** ppNewObject)

Insert2 メソッドは、コンテンツをストレージ内またはストレージの隣に配置します。このメソッドは IWMDMStorageControl::Insert を拡張し、アプリケーションが新しいコピー先の名前を指定したり、カスタム COM オブジェクトへのポインターを渡したりできるようにします。

fuModeDWORDin

Insert2 操作で使用する処理モード。次の表に、fuMode パラメーターで指定できる処理モードを示します。最初の 2 つのモードのうち 1 つ、STORAGECONTROL モードのうち 1 つ、CONTENT モードのうち 1 つを、それぞれ厳密に指定する必要があります。WMDM_MODE_BLOCKWMDM_MODE_THREAD の両方を指定した場合は、ブロック モードが使用されます。

組み合わせ モード 説明
次のいずれか 1 つ: WMDM_MODE_BLOCK ブロック モード処理で操作を実行します。操作が完了するまで呼び出しは戻りません。
- WMDM_MODE_THREAD スレッド モード処理で操作を実行します。呼び出しは直ちに戻り、操作はバックグラウンド スレッドで実行されます。
省略可能 WMDM_MODE_QUERY 挿入操作が成功するかどうかを判定するテストを行いますが、実際の挿入は実行されません。
次のいずれか 1 つ: WMDM_STORAGECONTROL_INSERTBEFORE オブジェクトは対象オブジェクトの前に挿入されます。
- WMDM_STORAGECONTROL_INSERTAFTER オブジェクトは対象オブジェクトの後に挿入されます。
- WMDM_STORAGECONTROL_INSERTINTO オブジェクトは現在のオブジェクトの中に挿入されます。これは現在のオブジェクトがフォルダーの場合にのみ機能します。
省略可能 WMDM_FILE_CREATE_OVERWRITE オブジェクトは対象オブジェクトを置き換えます。
次のいずれか 1 つ: WMDM_CONTENT_FILE 挿入するコンテンツはファイルです。
- WMDM_CONTENT_FOLDER 挿入するコンテンツはフォルダーです。フォルダーの中身は転送されません。
省略可能 WMDM_CONTENT_OPERATIONINTERFACE 挿入するコンテンツは操作インターフェイスです。コンテンツのデータは、アプリケーションが実装した IWMDMOperation インターフェイスに書き込む必要があります。
省略可能 WMDM_MODE_PROGRESS 進行状況の通知を pProgress パラメーター経由で送信します。
次のいずれか 1 つ (省略可能): WMDM_MODE_TRANSFER_PROTECTED 保護された転送モードで挿入します。
- WMDM_MODE_TRANSFER_UNPROTECTED 保護されていない転送モードで挿入します。
pwszFileSourceLPWSTRinoptionalデバイスに送信するオブジェクトの完全な名前とパスを示す、ワイド文字の null 終端文字列へのポインター。fuModeWMDM_CONTENT_OPERATIONINTERFACE を指定した場合、このパラメーターは NULL でなければなりません。
pwszFileDestLPWSTRinoptionalデバイス上のファイル名 (省略可能)。指定せず、アプリケーションが pOperationIWMDMOperation ポインターを渡した場合、Windows Media Device Manager は IWMDMOperation::GetObjectName を呼び出してコピー先の名前を要求します。指定せず、アプリケーションが pOperation も使用しない場合は、元のファイル名と拡張子が (パスを除いて) 使用されます。
pOperationIWMDMOperation*inoptionalメディア デバイスへのコンテンツ転送を制御する IWMDMOperation インターフェイスへのポインター (省略可能)。指定する場合、fuModeWMDM_CONTENT_OPERATIONINTERFACE フラグを含める必要があります。fuModeWMDM_CONTENT_FILE または WMDM_CONTENT_FOLDER を指定した場合、このパラメーターは NULL でなければなりません。
pProgressIWMDMProgress*inoptional処理の進行状況をアプリケーションに報告する IWMDMProgress インターフェイスへのポインター (省略可能)。指定する場合、fuModeWMDM_MODE_PROGRESS を含める必要があります。
pUnknownIUnknown*inoptionalセキュア コンテンツ プロバイダーに渡す任意のカスタム COM オブジェクトの IUnknown ポインター (省略可能)。アプリケーションがセキュア コンテンツ プロバイダーに関する十分な情報を持っている場合、これによりカスタム情報をセキュア コンテンツ プロバイダーに渡すことができます。
ppNewObjectIWMDMStorage**inoutoptional新しいコンテンツを格納する IWMDMStorage インターフェイスへのポインター。呼び出し元は、使用が終わったらこのインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイス メソッドは、次の種類のエラー コードを返す可能性があります。

返される可能性のあるエラー コードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

デバイスが IWMDMStorageControl3::Insert3 をサポートしている場合は、そちらを使用することが推奨されます。

WMDM_MODE_THREAD フラグを指定した場合は、IWMDMProgress2::End2 または IWMDMProgress3::End3 のいずれかを呼び出して完了状態を取得してください。これらのメソッドは操作が完了したことを保証し、成功または失敗の情報を含む HRESULT も返します。

アプリケーションが WMDM_MODE_THREAD を使用し、null 以外の pProgress パラメーターを渡す場合、Windows Media Device Manager がこのオブジェクトに進行状況の通知を送信するため、挿入操作が完了するまで pProgress が属するオブジェクトを破棄しないようにする必要があります。このオブジェクトは、End 通知を受け取った後にのみ破棄できます。これを怠るとアクセス違反が発生します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。