IMDServiceProvider3
COM公式ドキュメント
IMDServiceProvider3 インターフェースは、デバイス列挙の設定を行うメソッドを提供することで、IMDServiceProvider2 インターフェースを拡張します。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SetDeviceEnumPreference メソッドは、デバイス列挙の設定を行います。(IMDServiceProvider3.SetDeviceEnumPreference)
| dwEnumPref | DWORD | in | 列挙の設定を指定する、次のビット値の 1 つ以上をビットごとの OR で組み合わせた値を格納します。設定された各ビットは対応する拡張動作を有効にし、そのビットが設定されていない場合は拡張動作が無効になり、既定の下位互換性のある列挙動作が指定されます。dwEnumPref に指定できる値を次の表に示します。
|
戻り値
このメソッドは HRESULT を返します。返される値には、次の表の値が含まれますが、これらに限定されません。
| リターン コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| dwEnumPref パラメーターに、サポートされていないビット値が含まれています。 | |
| 列挙操作の後にメソッドが呼び出されました。このメソッドは列挙操作の前に呼び出す必要があります。 |
解説(Remarks)
この API により、クライアントは Windows Media Device Manager の既定のデバイス列挙動作をオーバーライドできます。
クライアント アプリケーションは、Windows Media Device Manager に対して IWMDeviceManager インターフェースをクエリしてデバイス マネージャー オブジェクトを作成した直後に、このメソッドを呼び出す必要があります。この呼び出しは、明示的であるか他の操作の結果として暗黙的であるかを問わず、列挙が行われる前に実行する必要があります。
設定フラグは、いったん設定すると、(Windows Media Device Manager オブジェクトの有効期間だけでなく) アプリケーションの有効期間中は変更できません。設定フラグを変更しようとするとエラーになります。同じフラグ設定でこの API を再度呼び出してもエラーは返されず、列挙にも影響しません。
DO_NOT_VIRTUALIZE_STORAGES_AS_DEVICES フラグは、有効にするためにはサービス プロバイダーが従う必要があります。このフラグを設定していても、一部のデバイスがストレージごとのデバイスとして列挙される場合があります。
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が無いため "{}"(他メソッド/アクティベーションで取得)。