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

IWMDeviceManager3

COM
IIDaf185c41-100d-46ed-be2e-9ce8c44594ef継承元IWMDeviceManager2自前メソッド開始 vtbl9

公式ドキュメント

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

メソッド 1

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

vtbl 9 HRESULT SetDeviceEnumPreference(DWORD dwEnumPref)

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

dwEnumPrefDWORDin

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

説明
DO_NOT_VIRTUALIZE_STORAGES_AS_DEVICES 既定では、複数の記憶媒体 (たとえば複数のフラッシュ メモリ カード) を含むデバイスの場合、それぞれのストレージが個別の擬似デバイスとして列挙されます。ただし、このフラグを設定すると、ストレージはデバイスとして表示されず、デバイスのみがデバイスとして表示されます。詳細については「解説」を参照してください。
ALLOW_OUTOFBAND_NOTIFICATION このフラグを設定すると、サービス プロバイダーは、アプリケーションが実装した IWMDMNotification インターフェースを呼び出す既定の方法に加えて、ウィンドウ メッセージを使用するなどの追加の方法でデバイスの到着と削除を通知できます。

戻り値

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

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

解説(Remarks)

このメソッドは、Windows Media Device Manager の既定のデバイス列挙動作をクライアントが上書きする手段を提供します。既定の動作を上書きするには、クライアント アプリケーションは、Media Device Manager から IWMDMDeviceManager3 インターフェースをクエリしてデバイス マネージャー オブジェクトを作成した直後に、このメソッドを呼び出す必要があります。この呼び出しは、明示的か、他の操作の結果として暗黙的かを問わず、いかなる列挙が行われるよりも前に実行しなければなりません。

設定フラグをいったん設定すると、アプリケーションの存続期間中 (Windows Media Device Manager オブジェクトの存続期間中だけではありません) 変更できません。設定フラグを変更しようとするとエラーになります。同じフラグ設定でこのメソッドを再度呼び出した場合はエラーになりませんが、列挙に対して何の効果もありません。

サービス プロバイダーは DO_NOT_VIRTUALIZE_STORAGES_AS_DEVICES フラグを尊重しない場合があります。複数のストレージが同じデバイスによってホストされているかどうかを判断するより確実な方法は、IWMDMDevice2::GetCanonicalName を呼び出すことです。同じデバイスのストレージは、最後の "$" 文字より後ろの末尾の数字を除いて、同一の値を返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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が無いため "{}"(他メソッド/アクティベーションで取得)。