MSDN のドキュメントによると、SetupDiGetClassDevsにデバイス インスタンス IDを渡して、特定のデバイスのデバイス情報セットを取得できます。
特定のデバイスのみを返すには、DIFCF_DEVICEINTERFACE フラグを設定し、Enumerator パラメーターを使用してデバイスのデバイス インスタンス ID を指定します。
WM_DEVICECHANGE
メッセージDBT_DEVICEARRIVAL
イベントからシンボリック名を解析してデバイス インスタンス ID を取得し、結果の ID をSetupDiGetDeviceInstanceIdから返された ID と比較して検証しました。OS 提供のデバイス インスタンス ID を渡しても機能しません (つまり、SetupDiGetClassDevs 呼び出しが で失敗しますERROR_INVALID_PARAMETER
)。
新しく到着したデバイスの構造を取得するための現在の回避策SP_DEVINFO_DATA
は、同じクラスのすべてのデバイスを列挙し、SetupDiGetDeviceInstanceId の結果をシンボリック名と比較することです。ただし、ドキュメントによると、なぜこれが必要なのかわかりません...
この方法で SetupDiGetClassDevs を動作させた人はいますか? DBT_DEVICEARRIVAL イベントのデータを使用してデバイスの詳細情報を取得するためのより良い方法はありますか?