次の図に示すように、デバイス マネージャーを使用して、ユーザーは明示的にデバイスを有効/無効にすることができます。
特定のデバイスについて、現在ユーザーが無効/有効な状態にあるかどうかを知りたいです。
私は次のアプローチを試しました
CM_Get_DevNode_Status(&status, &problem, data.DevInst, 0);
の存在がDN_STARTED
、またはそれDN_DRIVER_LOADED
を教えてくれることを望んでいました。ただし、デバイスが接続/切断されたときに、ドライバーが OS によってロード/アンロードされている場合でも、これらはゼロになる可能性があります。たとえば、デバイスが有効で、ドライバーがロードされている場合などです。DN_STARTED
になりますが1
、デバイスを切断すると、デバイスのエントリがデバイス マネージャーから削除される前にゼロに設定されます。SetupDiGetDeviceRegistryProperty(..., SPDRP_INSTALL_STATE, ...)
の状態はCM_INSTALL_STATE_INSTALLED
、デバイスが有効になっていることを意味するはずですが。ただし、この関数は、無効なデバイスの場合でもこの状態を返します。WMIを使えば必要な情報は取得できましたが、PowerShellではwmiを使いました。ネイティブの C++ で実装するのは非常に難しいため、wmi は使用したくありません。次のクエリを使用しました。
Select Name, Availability, ConfigManagerErrorCode, ConfigManagerUserConfig from Win32_PnPEntity where Name = 'NVIDIA Quadro M1000M'
上記のクエリの ConfigManagerErrorCode は、22 に設定されている場合、デバイスが無効になっていることを意味し、21 は Windows がデバイスを削除していることを意味します
非 wmi ソリューションを探しています。