IMDSPDevice
COM公式ドキュメント
IMDSPDevice インターフェースは、メディアデバイスとのインスタンス単位の関連付けを提供します。
メソッド 11
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetName メソッドは、デバイスの名前を取得します。
| pwszName | LPWSTR | out | デバイス名の文字列を受け取る 16 ビット Unicode 文字の配列へのポインター。 |
| nMaxChars | DWORD | in | 文字列にコピーする最大文字数。 |
戻り値
本メソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
LPWSTR 文字列型は 16 ビット Unicode 文字列であり、バイトサイズの文字は受け付けません。バイトサイズの文字列 (LPCSTR) を LPWSTR 文字列に変換するには、Microsoft Windows のドキュメントで説明されている MultiByteToWideChar 関数を使用してください。
デバイス名の末尾に空白を含めることはできません。
このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。
GetManufacturer メソッドは、デバイスの製造元名を取得します。(IMDSPDevice.GetManufacturer)
| pwszName | LPWSTR | out | 製造元名の文字列を受け取る、呼び出し側が割り当てたワイド文字配列へのポインター。 |
| nMaxChars | DWORD | in | 終端文字を含め、文字列にコピーする最大文字数。 |
戻り値
本メソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
LPWSTR 文字列型は 16 ビット Unicode 文字列であり、バイトサイズの文字は受け付けません。バイトサイズの文字列 (LPCSTR) を LPWSTR 文字列に変換するには、Microsoft® Windows® Platform Software Development Kit のドキュメントで説明されている MultiByteToWideChar 関数を使用してください。
このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。
GetVersion メソッドは、デバイスのバージョン番号を取得します。
| pdwVersion | DWORD* | out | デバイスのバージョン番号を受け取る DWORD へのポインター。 |
戻り値
本メソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。
GetType メソッドは、デバイスの種類に関する情報を取得します。
| pdwType | DWORD* | out | デバイスの種類を示す属性を受け取る DWORD へのポインター。受け取る種類を次の表に示します。
|
戻り値
本メソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。
GetSerialNumber メソッドは、デバイスを一意に識別するシリアル番号を取得します。
| pSerialNumber | WMDMID* | out | デバイスのシリアル番号を受け取る WMDMID 構造体へのポインター。このパラメーターは、出力メッセージ認証コードに含まれます。 |
| abMac | BYTE* | inout | このメソッドのパラメーターデータに対するメッセージ認証コードを格納する 8 バイトの配列。(WMDM_MAC_LENGTH は 8 として定義されています。) |
戻り値
本メソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
すべてのメディアデバイスがシリアル番号をサポートしているわけではありません。デバイスがシリアル番号をサポートしているかどうかを判断するため、このメソッドを呼び出す際は必ず戻り値を確認してください。メディアデバイスがシリアル番号をサポートしている場合、そのメディアデバイスのシリアル番号は一意であることが保証されます。
このメソッドは省略可能です。保護されたコンテンツを転送する際、Windows Media Device Manager は IMDSPStorageGlobals::GetSerialNumber を使用します。詳細については、Mandatory and Optional Interfaces を参照してください。
GetPowerSource メソッドは、デバイスがバッテリー、外部電源、またはその両方で動作可能かどうか、および現在どの種類の電源で動作しているかを報告します。
| pdwPowerSource | DWORD* | out | デバイスの現在の電源を示す値を受け取る DWORD へのポインター。値は次のフラグのいずれかです。
| ||||||||||||
| pdwPercentRemaining | DWORD* | out | デバイスがバッテリーで動作している場合、pdwPercentRemaining にはバッテリー残量の割合を格納する DWORD へのポインターを指定します。 |
戻り値
本メソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
電源の対応状況と現在の電源を報告するのは物理デバイスのみです。デバイスのソフトウェア実装では、電源に関する機能も現在の電源も報告されません。
このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。
GetStatus メソッドは、デバイスが提供できるすべてのデバイス状態情報を取得します。
| pdwStatus | DWORD* | out | デバイスの現在の状態を受け取る DWORD へのポインター。これらの状態値を次の表に示します。
|
戻り値
本メソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
この呼び出しからは、1 つ以上の状態値が返される場合があります。メディアデバイスのすべてのインターフェースのすべての状態値が、この呼び出しを通じて報告されます。たとえば、メディアデバイスへのファイル書き込みなどのストレージ操作が進行中の場合、このメソッドを呼び出すとその操作のビジー状態が報告されます。進行中の操作がある場合、状態値 WMDM_STATUS_BUSY が必ず含まれます。
このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。
GetDeviceIcon メソッドは、このデバイスを表すために使用する必要があるとデバイスのサービスプロバイダーが示すアイコンを表す HICON を返します。
| hIcon | DWORD* | out | デバイスのアイコンを受け取る Icon オブジェクトへのハンドル。使用する前に、呼び出し側はこの値を HICON* にキャストする必要があります。アプリケーションはアイコンの使用を終えたら、DestroyIcon を呼び出してリソースを解放してください。DestroyIcon は標準的な Win32 関数です。 |
戻り値
本メソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
上記の値に加えて、HRESULT エラーコードが Win32 エラーになる場合があります。
このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。
EnumStorage メソッドは、デバイス上の最上位ストレージを表す列挙子オブジェクトの IMDSPEnumStorage インターフェースへのポインターを取得します。デバイスの最上位ストレージとは、記憶メディアのルートディレクトリを指します。
| ppEnumStorage | IMDSPEnumStorage** | out | IMDSPEnumStorage オブジェクトへのポインター。 |
戻り値
本メソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。
GetFormatSupport メソッドは、デバイスがサポートするすべての形式を取得します。形式情報には、コーデック、ファイル形式、およびデジタル著作権管理方式が含まれます。
| pFormatEx | WAVEFORMATEX** | out | デバイスがサポートするコーデックとビットレートに関する情報を格納した _WAVEFORMATEX 構造体の配列へのポインター。 |
| pnFormatCount | DWORD* | out | pFormatEx 配列の要素数へのポインター。 |
| pppwszMimeType | LPWSTR** | out | デバイスがサポートするファイル形式とデジタル著作権管理方式を記述する配列へのポインター。 |
| pnMimeTypeCount | DWORD* | out | pppwszMimeType 配列の要素数へのポインター。 |
戻り値
本メソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
pFormatEx パラメーターと pppwszMimeType パラメーターのメモリはこのメソッドによって割り当てられるため、呼び出し側が標準的な Win32 関数である CoTaskMemFree を使用して解放する必要があります。
このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。
SendOpaqueCommand メソッドは、Windows Media Device Manager を介してコマンドを送信します。Windows Media Device Manager はそのコマンドに対して何も処理を行わず、デバイスへそのまま渡します。
| pCommand | OPAQUECOMMAND* | inout | コマンドの実行に必要な情報を格納した OPAQUECOMMAND 構造体へのポインター。 |
戻り値
本メソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
このメソッドは、Windows Media Device Manager に影響を与えず、変更されずにそのまま渡されるデバイスコマンドで使用します。デバイスに対してコマンドを呼び出すより効率的な方法は、IMDSPDevice3::DeviceIoControl を呼び出すことです。
このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMDSPDevice "{1DCB3A12-33ED-11D3-8470-00C04F79DBC0}" #usecom global IMDSPDevice IID_IMDSPDevice "{}" #comfunc global IMDSPDevice_GetName 3 var,int #comfunc global IMDSPDevice_GetManufacturer 4 var,int #comfunc global IMDSPDevice_GetVersion 5 var #comfunc global IMDSPDevice_GetType 6 var #comfunc global IMDSPDevice_GetSerialNumber 7 var,var #comfunc global IMDSPDevice_GetPowerSource 8 var,var #comfunc global IMDSPDevice_GetStatus 9 var #comfunc global IMDSPDevice_GetDeviceIcon 10 var #comfunc global IMDSPDevice_EnumStorage 11 sptr #comfunc global IMDSPDevice_GetFormatSupport 12 var,var,var,var #comfunc global IMDSPDevice_SendOpaqueCommand 13 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMDSPDevice "{1DCB3A12-33ED-11D3-8470-00C04F79DBC0}" #usecom global IMDSPDevice IID_IMDSPDevice "{}" #comfunc global IMDSPDevice_GetName 3 sptr,int #comfunc global IMDSPDevice_GetManufacturer 4 sptr,int #comfunc global IMDSPDevice_GetVersion 5 sptr #comfunc global IMDSPDevice_GetType 6 sptr #comfunc global IMDSPDevice_GetSerialNumber 7 sptr,sptr #comfunc global IMDSPDevice_GetPowerSource 8 sptr,sptr #comfunc global IMDSPDevice_GetStatus 9 sptr #comfunc global IMDSPDevice_GetDeviceIcon 10 sptr #comfunc global IMDSPDevice_EnumStorage 11 sptr #comfunc global IMDSPDevice_GetFormatSupport 12 sptr,sptr,sptr,sptr #comfunc global IMDSPDevice_SendOpaqueCommand 13 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。