SetupDi
系関数でデバイスインターフェイスクラスGUIDが取得できずに悩んだので、学んだことを記録します。結論、デバイスインターフェイスクラスGUIDはSDKヘッダーファイルの定数使用が正攻法です。cfgmgr32も使えるならCM_Enumerate_Classes
で列挙できます。
- デバイスインターフェイスクラス、デバイスセットアップクラス、デバイスインターフェイス、デバイスインスタンスは別物。
- デバイスセットアップクラスとデバイスインスタンスは
SetupDiGetClassDevs(A/W)
とSetupDiEnumDeviceInfo
で取得できる。 - デバイスインターフェイスの取得にはデバイスインターフェイスクラスGUIDが必要。
- デバイスインターフェイスクラスGUIDはMicrosoft DocsかWindows SDKから個別に取得するしかない。列挙する
SetupDi
系関数はない。 - デバイスインターフェイスGUIDがあれば関連付けられたデバイスセットアップクラス、デバイスインスタンス、デバイスインターフェイスを取得できる。
- cfgmgr32も使えるなら
CM_Enumerate_Classes
で列挙できる。
図示すると以下です。
Microsoft DocsやSDK ↓ デバイスインターフェイスクラスGUID (GUID_DEVINTERFACE_*等) ↓SetupDiGetClassDevs デバイス情報リスト←SetupDiGetClassDevs ↓SetupDiEnumDeviceInfo デバイス情報→デバイスインスタンス ↓ ↓ ↓ デバイスセットアップクラス ↓←デバイスインターフェイスクラス ↓SetupDiEnumDeviceInterfaces デバイスインターフェイス or デバイスインターフェイスクラスGUID ↓←デバイス情報リストSetupDiGetClassDevs ↓SetupDiEnumDeviceInterfaces デバイスインターフェイス デバイスセットアップ/インターフェイスクラスGUID ↓ デバイスセットアップ/インターフェイスクラスプロパティ