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

IMDServiceProvider3

COM
IID4ed13ef3-a971-4d19-9f51-0e1826b2da57継承元IMDServiceProvider2自前メソッド開始 vtbl6

公式ドキュメント

IMDServiceProvider3 インターフェースは、デバイス列挙の設定を行うメソッドを提供することで、IMDServiceProvider2 インターフェースを拡張します。

メソッド 1

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

vtbl 6 HRESULT SetDeviceEnumPreference(DWORD dwEnumPref)

SetDeviceEnumPreference メソッドは、デバイス列挙の設定を行います。(IMDServiceProvider3.SetDeviceEnumPreference)

dwEnumPrefDWORDin

列挙の設定を指定する、次のビット値の 1 つ以上をビットごとの OR で組み合わせた値を格納します。設定された各ビットは対応する拡張動作を有効にし、そのビットが設定されていない場合は拡張動作が無効になり、既定の下位互換性のある列挙動作が指定されます。dwEnumPref に指定できる値を次の表に示します。

説明
DO_NOT_VIRTUALIZE_STORAGES_AS_DEVICES 既定では、複数のストレージ メディアを含むデバイスの場合、それぞれのストレージが個別の疑似デバイスとして列挙されます。しかし、このビットを設定すると、ストレージはデバイスとして表示されず、デバイスのみがデバイスとして表示されます。
ALLOW_OUTOFBAND_NOTIFICATION 既定では、IWMDMNotification コールバック機構によって、デバイスの接続および取り外しのイベントがアプリケーションに通知されます。このビットを設定すると、サービス プロバイダーは、ウィンドウ メッセージの使用など、別の機構でアプリケーションに通知できるようになります。この動作は Windows Media Device Manager の通知に追加されるものです。このフラグは Windows Media Device Manager の通知を抑制するものではありません。

戻り値

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

リターン コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
dwEnumPref パラメーターに、サポートされていないビット値が含まれています。
WMDM_E_CALL_OUT_OF_SEQUENCE
列挙操作の後にメソッドが呼び出されました。このメソッドは列挙操作の前に呼び出す必要があります。

解説(Remarks)

この API により、クライアントは Windows Media Device Manager の既定のデバイス列挙動作をオーバーライドできます。

クライアント アプリケーションは、Windows Media Device Manager に対して IWMDeviceManager インターフェースをクエリしてデバイス マネージャー オブジェクトを作成した直後に、このメソッドを呼び出す必要があります。この呼び出しは、明示的であるか他の操作の結果として暗黙的であるかを問わず、列挙が行われる前に実行する必要があります。

設定フラグは、いったん設定すると、(Windows Media Device Manager オブジェクトの有効期間だけでなく) アプリケーションの有効期間中は変更できません。設定フラグを変更しようとするとエラーになります。同じフラグ設定でこの API を再度呼び出してもエラーは返されず、列挙にも影響しません。

DO_NOT_VIRTUALIZE_STORAGES_AS_DEVICES フラグは、有効にするためにはサービス プロバイダーが従う必要があります。このフラグを設定していても、一部のデバイスがストレージごとのデバイスとして列挙される場合があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMDServiceProvider3 "{4ED13EF3-A971-4D19-9F51-0E1826B2DA57}"
#usecom global IMDServiceProvider3 IID_IMDServiceProvider3 "{}"
#comfunc global IMDServiceProvider3_SetDeviceEnumPreference  6 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。