は、MSDNのドキュメントによれば、SetupDiGetClassDevsは、特定のデバイスのためdevice information setを得るためdevice instance IDを渡すことができますSetupDiGetClassDevsは文書化されているようにデバイスインスタンスIDで動作しますか?
のみ特定のデバイスを戻すために、 DIFCF_DEVICEINTERFACEフラグセットと を供給する 列挙パラメータを使用デバイスのデバイスインスタンスID。
私はWM_DEVICECHANGE
メッセージDBT_DEVICEARRIVAL
イベントからのシンボリック名を解析することにより、デバイスインスタンスIDを取得し、私はSetupDiGetDeviceInstanceIdから返されたものと比較することによって結果のIDを確認しました。 OS提供のデバイスインスタンスIDを渡しても機能しません(つまり、SetupDiGetClassDevs呼び出しがERROR_INVALID_PARAMETER
で失敗します)。
新しく到着したデバイスのSP_DEVINFO_DATA
構造をフェッチするための現在の回避策は、同じクラスのすべてのデバイスを列挙し、SetupDiGetDeviceInstanceIdの結果をシンボリック名と比較することです。しかし、なぜこれがドキュメントに基づいて必要なのか分かりません...
このようにしてSetupDiGetClassDevsを稼働させた人はいますか? DBT_DEVICEARRIVALイベントのデータを使用してデバイスの詳細情報を取得する方法はありますか?
DIGCF_DEVICEINTERFACE | DIGCF_ALLCLASSESは私の欠けていた部分でした。 MSDNのドキュメントから、DIGCF_DEVICEINTERFACEのみが必要であると理解しましたが、それはエラー87(不正な引数)を与えました。 – angularsen