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

IMDSPDevice2

COM
IID420d16ad-c97d-4e00-82aa-00e9f4335ddd継承元IMDSPDevice自前メソッド開始 vtbl14

公式ドキュメント

IMDSPDevice2 インターフェイスは IMDSPDevice を拡張し、拡張フォーマットの取得、プラグ アンド プレイ (PnP) デバイス名の取得、プロパティ ページの使用の有効化、および名前から記憶域メディアへのポインターを取得する機能を提供します。

メソッド 4

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

vtbl 14 HRESULT GetStorage(LPWSTR pszStorageName, IMDSPStorage** ppStorage)

GetStorage メソッドは、すべてのストレージを列挙して探すのではなく、名前を指定して直接ストレージにアクセスできるようにします。

pszStorageNameLPWSTRin検索するストレージの名前を含む、null 終端文字列へのポインター。
ppStorageIMDSPStorage**outpszStorageName パラメーターで指定されたストレージ オブジェクトへのポインター。

戻り値

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

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

解説(Remarks)

GetStorage メソッドはワイルドカード文字をサポートしません。また再帰的ではなく、デバイスのルートにあるストレージのみを検索します。

このメソッドを実装しない場合は、E_NOTIMPL を返してください (WMDM_E_NOT_SUPPORTED や、このメソッドが実装されていないことを示すその他のコードを返さないでください)。これにより、Windows Media Device Manager は、pszStorageName として渡されたストレージ名に一致するものをすべてのストレージを列挙して検索することで、この機能を自ら代替しようとします。

サービス プロバイダーは、名前に基づいてストレージ オブジェクトを効率的に返せるよう、このメソッドを実装することを強く推奨します。

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

vtbl 15 HRESULT GetFormatSupport2(DWORD dwFlags, WAVEFORMATEX** ppAudioFormatEx, DWORD* pnAudioFormatCount, VIDEOINFOHEADER** ppVideoFormatEx, DWORD* pnVideoFormatCount, WMFILECAPABILITIES** ppFileType, DWORD* pnFileTypeCount)

GetFormatSupport2 メソッドは、オーディオ コーデックやビデオ コーデック、MIME ファイル形式を含む、デバイスがサポートするフォーマットを取得します。

dwFlagsDWORDin

オーディオ形式、ビデオ形式、および MIME タイプを示す DWORD。このフラグは、アプリケーションがサービス プロバイダーに設定を要求する内容を指定します。呼び出し元は、次の 3 つの値のうち 1 つ以上を設定できます。

説明
WMDM_GET_FORMAT_SUPPORT_AUDIO サービス プロバイダーはオーディオ パラメーターを設定する必要があります。
WMDM_GET_FORMAT_SUPPORT_VIDEO サービス プロバイダーはビデオ パラメーターを設定する必要があります。
WMDM_GET_FORMAT_SUPPORT_FILE サービス プロバイダーはファイル パラメーターを設定する必要があります。
ppAudioFormatExWAVEFORMATEX**outデバイスがサポートするオーディオ コーデックとビット レートに関する情報を含む _WAVEFORMATEX 構造体の配列へのポインター。
pnAudioFormatCountDWORD*outオーディオ形式の数を格納する整数へのポインター。
ppVideoFormatExVIDEOINFOHEADER**outデバイスがサポートするビデオ コーデックと形式に関する情報を含む _VIDEOINFOHEADER 構造体の配列へのポインター。
pnVideoFormatCountDWORD*outビデオ形式の数を格納する整数へのポインター。
ppFileTypeWMFILECAPABILITIES**outデバイスがサポートするファイルの種類に関する情報を含む WMFILECAPABILITIES 構造体の配列へのポインター。
pnFileTypeCountDWORD*outファイル形式の数を格納する整数へのポインター。

戻り値

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

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

解説(Remarks)

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

vtbl 16 HRESULT GetSpecifyPropertyPages(ISpecifyPropertyPages** ppSpecifyPropPages, IUnknown*** pppUnknowns, DWORD* pcUnks)

GetSpecifyPropertyPages メソッドは、ポータブル デバイスの非標準的な機能を説明するプロパティ ページを取得します。

ppSpecifyPropPagesISpecifyPropertyPages**outWin32 の ISpecifyPropertyPages インターフェイス ポインターへのポインター。
pppUnknownsIUnknown***outIUnknown インターフェイス ポインターの配列。これらのインターフェイスはプロパティ ページに渡され、プロパティ ページとサービス プロバイダーの間で情報をやり取りするために使用できます。
pcUnksDWORD*outpppUnknowns 配列のサイズ。

戻り値

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

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

解説(Remarks)

pppUnknowns 配列のメモリはこのメソッドで割り当てる必要があり、呼び出し元が標準的な Win32 関数である CoTaskMemFree を使用して解放する必要があります。

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

vtbl 17 HRESULT GetCanonicalName(LPWSTR pwszPnPName, DWORD nMaxChars)

GetCanonicalPName メソッドは、デバイスの正規名を取得します。

pwszPnPNameLPWSTRout正規名を格納するワイド文字の null 終端バッファー。このバッファーの割り当てと解放は呼び出し元が行います。
nMaxCharsDWORDin終端文字を含めて、pwszCanonicalName に格納できる最大文字数を示す整数。

戻り値

このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれますが、これらに限定されません。

解説(Remarks)

このメソッドは、デバイスの正規名を返します。サービス プロバイダーは、デバイスのデバイス パス名を正規名として返す必要があります。デバイス パス名は、IMDServiceProvider2 インターフェイスの CreateDevice メソッドでサービス プロバイダーに渡されます。

これは省略可能です。詳細については、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_IMDSPDevice2 "{420D16AD-C97D-4E00-82AA-00E9F4335DDD}"
#usecom global IMDSPDevice2 IID_IMDSPDevice2 "{}"
#comfunc global IMDSPDevice2_GetStorage               14 wstr,sptr
#comfunc global IMDSPDevice2_GetFormatSupport2        15 int,var,var,var,var,var,var
#comfunc global IMDSPDevice2_GetSpecifyPropertyPages  16 sptr,sptr,var
#comfunc global IMDSPDevice2_GetCanonicalName         17 var,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。