IWMDeviceManager3
COM公式ドキュメント
IWMDeviceManager3 インターフェースは、デバイス列挙の設定を行うメソッドを提供することで、IWMDeviceManager2 インターフェースを拡張します。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SetDeviceEnumPreference メソッドは、デバイス列挙の設定を行います。(IWMDeviceManager3.SetDeviceEnumPreference)
| dwEnumPref | DWORD | in | 列挙の設定を指定する、次のビット値のうち 1 つ以上のビットごとの OR の組み合わせを指定します。各ビットを設定すると対応する拡張動作が有効になり、そのビットがない場合は拡張動作が無効になり、既定の下位互換性のある列挙動作が指定されます。fuPrefs に指定できる値を次の表に示します。
|
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| fuPrefs パラメーターにサポートされていないビット値が指定されています。 | |
| メソッドが列挙操作の後に呼び出されました。このメソッドは列挙操作の前に呼び出す必要があります。 |
解説(Remarks)
このメソッドは、Windows Media Device Manager の既定のデバイス列挙動作をクライアントが上書きする手段を提供します。既定の動作を上書きするには、クライアント アプリケーションは、Media Device Manager から IWMDMDeviceManager3 インターフェースをクエリしてデバイス マネージャー オブジェクトを作成した直後に、このメソッドを呼び出す必要があります。この呼び出しは、明示的か、他の操作の結果として暗黙的かを問わず、いかなる列挙が行われるよりも前に実行しなければなりません。
設定フラグをいったん設定すると、アプリケーションの存続期間中 (Windows Media Device Manager オブジェクトの存続期間中だけではありません) 変更できません。設定フラグを変更しようとするとエラーになります。同じフラグ設定でこのメソッドを再度呼び出した場合はエラーになりませんが、列挙に対して何の効果もありません。
サービス プロバイダーは DO_NOT_VIRTUALIZE_STORAGES_AS_DEVICES フラグを尊重しない場合があります。複数のストレージが同じデバイスによってホストされているかどうかを判断するより確実な方法は、IWMDMDevice2::GetCanonicalName を呼び出すことです。同じデバイスのストレージは、最後の "$" 文字より後ろの末尾の数字を除いて、同一の値を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMDeviceManager3 "{AF185C41-100D-46ED-BE2E-9CE8C44594EF}"
#usecom global IWMDeviceManager3 IID_IWMDeviceManager3 "{}"
#comfunc global IWMDeviceManager3_SetDeviceEnumPreference 9 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。