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

IMDSPDevice

COM
IID1dcb3a12-33ed-11d3-8470-00c04f79dbc0継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IMDSPDevice インターフェースは、メディアデバイスとのインスタンス単位の関連付けを提供します。

メソッド 11

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

vtbl 3 HRESULT GetName(LPWSTR pwszName, DWORD nMaxChars)

GetName メソッドは、デバイスの名前を取得します。

pwszNameLPWSTRoutデバイス名の文字列を受け取る 16 ビット Unicode 文字の配列へのポインター。
nMaxCharsDWORDin文字列にコピーする最大文字数。

戻り値

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

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

解説(Remarks)

LPWSTR 文字列型は 16 ビット Unicode 文字列であり、バイトサイズの文字は受け付けません。バイトサイズの文字列 (LPCSTR) を LPWSTR 文字列に変換するには、Microsoft Windows のドキュメントで説明されている MultiByteToWideChar 関数を使用してください。

デバイス名の末尾に空白を含めることはできません。

このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 4 HRESULT GetManufacturer(LPWSTR pwszName, DWORD nMaxChars)

GetManufacturer メソッドは、デバイスの製造元名を取得します。(IMDSPDevice.GetManufacturer)

pwszNameLPWSTRout製造元名の文字列を受け取る、呼び出し側が割り当てたワイド文字配列へのポインター。
nMaxCharsDWORDin終端文字を含め、文字列にコピーする最大文字数。

戻り値

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

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

解説(Remarks)

LPWSTR 文字列型は 16 ビット Unicode 文字列であり、バイトサイズの文字は受け付けません。バイトサイズの文字列 (LPCSTR) を LPWSTR 文字列に変換するには、Microsoft® Windows® Platform Software Development Kit のドキュメントで説明されている MultiByteToWideChar 関数を使用してください。

このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 5 HRESULT GetVersion(DWORD* pdwVersion)

GetVersion メソッドは、デバイスのバージョン番号を取得します。

pdwVersionDWORD*outデバイスのバージョン番号を受け取る DWORD へのポインター。

戻り値

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

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

解説(Remarks)

このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 6 HRESULT GetType(DWORD* pdwType)

GetType メソッドは、デバイスの種類に関する情報を取得します。

pdwTypeDWORD*out

デバイスの種類を示す属性を受け取る DWORD へのポインター。受け取る種類を次の表に示します。

デバイスの種類 説明
WMDM_DEVICE_TYPE_PLAYBACK メディアデバイスはオーディオ再生をサポートします。
WMDM_DEVICE_TYPE_RECORD メディアデバイスはオーディオ録音をサポートします。
WMDM_DEVICE_TYPE_DECODE メディアデバイスはオーディオ形式のデコードをサポートします。
WMDM_DEVICE_TYPE_ENCODE メディアデバイスはオーディオ形式のエンコードをサポートします。
WMDM_DEVICE_TYPE_STORAGE メディアデバイスはメディアファイル用のオンボードストレージを備えています。
WMDM_DEVICE_TYPE_SDMI メディアデバイスは SDMI に準拠しています。
WMDM_DEVICE_TYPE_NONSDMI メディアデバイスは SDMI に準拠していません。
WMDM_DEVICE_TYPE_VIRTUAL メディアデバイスは物理デバイスではありません。
WMDM_DEVICE_TYPE_NONREENTRANT メディアデバイスは、サービスプロバイダーのサービスへのアクセスを同期する必要があります。
WMDM_DEVICE_TYPE_FILELISTRESYNC メディアデバイスはファイルリストの再同期を許可します。
WMDM_DEVICE_TYPE_VIEW_PREF_METADATAVIEW メディアデバイスは、ストレージの列挙時にメタデータビューを優先します。

戻り値

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

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

解説(Remarks)

このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 7 HRESULT GetSerialNumber(WMDMID* pSerialNumber, BYTE* abMac)

GetSerialNumber メソッドは、デバイスを一意に識別するシリアル番号を取得します。

pSerialNumberWMDMID*outデバイスのシリアル番号を受け取る WMDMID 構造体へのポインター。このパラメーターは、出力メッセージ認証コードに含まれます。
abMacBYTE*inoutこのメソッドのパラメーターデータに対するメッセージ認証コードを格納する 8 バイトの配列。(WMDM_MAC_LENGTH は 8 として定義されています。)

戻り値

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

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

解説(Remarks)

すべてのメディアデバイスがシリアル番号をサポートしているわけではありません。デバイスがシリアル番号をサポートしているかどうかを判断するため、このメソッドを呼び出す際は必ず戻り値を確認してください。メディアデバイスがシリアル番号をサポートしている場合、そのメディアデバイスのシリアル番号は一意であることが保証されます。

このメソッドは省略可能です。保護されたコンテンツを転送する際、Windows Media Device Manager は IMDSPStorageGlobals::GetSerialNumber を使用します。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 8 HRESULT GetPowerSource(DWORD* pdwPowerSource, DWORD* pdwPercentRemaining)

GetPowerSource メソッドは、デバイスがバッテリー、外部電源、またはその両方で動作可能かどうか、および現在どの種類の電源で動作しているかを報告します。

pdwPowerSourceDWORD*out

デバイスの現在の電源を示す値を受け取る DWORD へのポインター。値は次のフラグのいずれかです。

フラグ 説明
WMDM_POWER_CAP_BATTERY メディアデバイスはバッテリーで動作できます。
WMDM_POWER_CAP_EXTERNAL メディアデバイスは外部電源で動作できます。
WMDM_POWER_IS_BATTERY メディアデバイスは現在バッテリーで動作しています。
WMDM_POWER_IS_EXTERNAL メディアデバイスは現在外部電源で動作しています。
WMDM_POWER_PERCENT_AVAILABLE 残りの電力の割合が pdwPercentRemaining に返されました。
pdwPercentRemainingDWORD*outデバイスがバッテリーで動作している場合、pdwPercentRemaining にはバッテリー残量の割合を格納する DWORD へのポインターを指定します。

戻り値

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

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

解説(Remarks)

電源の対応状況と現在の電源を報告するのは物理デバイスのみです。デバイスのソフトウェア実装では、電源に関する機能も現在の電源も報告されません。

このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 9 HRESULT GetStatus(DWORD* pdwStatus)

GetStatus メソッドは、デバイスが提供できるすべてのデバイス状態情報を取得します。

pdwStatusDWORD*out

デバイスの現在の状態を受け取る DWORD へのポインター。これらの状態値を次の表に示します。

状態 説明
WMDM_STATUS_READY Windows Media Device Manager とそのサブコンポーネントは準備完了状態です。
WMDM_STATUS_BUSY 操作が進行中です。どの操作であるかを判断するには、他の状態値を確認してください。
WMDM_STATUS_DEVICE_NOTPRESENT デバイスがコンピューターに接続されていません。
WMDM_STATUS_STORAGE_NOTPRESENT メディアが存在しません。複数のメディアをサポートするデバイスの場合、この値は IWMDMStorageGlobals インターフェースからのみ報告されます。
WMDM_STATUS_STORAGE_INITIALIZING デバイスは現在、デバイス上のメディアのフォーマット処理を実行中です。
WMDM_STATUS_STORAGE_BROKEN メディアが動作していません。複数のメディアをサポートするデバイスの場合、この値は IWMDMStorageGlobals インターフェースからのみ報告されます。
WMDM_STATUS_STORAGE_NOTSUPPORTED メディアがデバイスでサポートされていません。複数のメディアをサポートするデバイスの場合、この値は IWMDMStorageGlobals インターフェースからのみ返されます。
WMDM_STATUS_STORAGE_UNFORMATTED メディアがフォーマットされていません。複数のメディアをサポートするデバイスの場合、この値は IWMDMStorageGlobals インターフェースからのみ返されます。
WMDM_STATUS_STORAGECONTROL_INSERTING IWMDMStorageControl::Insert メソッドが現在実行中です。
WMDM_STATUS_STORAGECONTROL_DELETING IWMDMStorageControl::Delete メソッドが現在実行中です。
WMDM_STATUS_STORAGECONTROL_MOVING IWMDMStorageControl::Move メソッドが現在実行中です。
WMDM_STATUS_STORAGECONTROL_READING IWMDMStorageControl::Read メソッドが現在実行中です。

戻り値

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

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

解説(Remarks)

この呼び出しからは、1 つ以上の状態値が返される場合があります。メディアデバイスのすべてのインターフェースのすべての状態値が、この呼び出しを通じて報告されます。たとえば、メディアデバイスへのファイル書き込みなどのストレージ操作が進行中の場合、このメソッドを呼び出すとその操作のビジー状態が報告されます。進行中の操作がある場合、状態値 WMDM_STATUS_BUSY が必ず含まれます。

このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 10 HRESULT GetDeviceIcon(DWORD* hIcon)

GetDeviceIcon メソッドは、このデバイスを表すために使用する必要があるとデバイスのサービスプロバイダーが示すアイコンを表す HICON を返します。

hIconDWORD*outデバイスのアイコンを受け取る Icon オブジェクトへのハンドル。使用する前に、呼び出し側はこの値を HICON* にキャストする必要があります。アプリケーションはアイコンの使用を終えたら、DestroyIcon を呼び出してリソースを解放してください。DestroyIcon は標準的な Win32 関数です。

戻り値

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

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

解説(Remarks)

上記の値に加えて、HRESULT エラーコードが Win32 エラーになる場合があります。

このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 11 HRESULT EnumStorage(IMDSPEnumStorage** ppEnumStorage)

EnumStorage メソッドは、デバイス上の最上位ストレージを表す列挙子オブジェクトの IMDSPEnumStorage インターフェースへのポインターを取得します。デバイスの最上位ストレージとは、記憶メディアのルートディレクトリを指します。

ppEnumStorageIMDSPEnumStorage**outIMDSPEnumStorage オブジェクトへのポインター。

戻り値

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

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

解説(Remarks)

このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 12 HRESULT GetFormatSupport(WAVEFORMATEX** pFormatEx, DWORD* pnFormatCount, LPWSTR** pppwszMimeType, DWORD* pnMimeTypeCount)

GetFormatSupport メソッドは、デバイスがサポートするすべての形式を取得します。形式情報には、コーデック、ファイル形式、およびデジタル著作権管理方式が含まれます。

pFormatExWAVEFORMATEX**outデバイスがサポートするコーデックとビットレートに関する情報を格納した _WAVEFORMATEX 構造体の配列へのポインター。
pnFormatCountDWORD*outpFormatEx 配列の要素数へのポインター。
pppwszMimeTypeLPWSTR**outデバイスがサポートするファイル形式とデジタル著作権管理方式を記述する配列へのポインター。
pnMimeTypeCountDWORD*outpppwszMimeType 配列の要素数へのポインター。

戻り値

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

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

解説(Remarks)

pFormatEx パラメーターと pppwszMimeType パラメーターのメモリはこのメソッドによって割り当てられるため、呼び出し側が標準的な Win32 関数である CoTaskMemFree を使用して解放する必要があります。

このメソッドは必ず実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはなりません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 13 HRESULT SendOpaqueCommand(OPAQUECOMMAND* pCommand)

SendOpaqueCommand メソッドは、Windows Media Device Manager を介してコマンドを送信します。Windows Media Device Manager はそのコマンドに対して何も処理を行わず、デバイスへそのまま渡します。

pCommandOPAQUECOMMAND*inoutコマンドの実行に必要な情報を格納した OPAQUECOMMAND 構造体へのポインター。

戻り値

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

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

解説(Remarks)

このメソッドは、Windows Media Device Manager に影響を与えず、変更されずにそのまま渡されるデバイスコマンドで使用します。デバイスに対してコマンドを呼び出すより効率的な方法は、IMDSPDevice3::DeviceIoControl を呼び出すことです。

このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。

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