5

次の図に示すように、デバイス マネージャーを使用して、ユーザーは明示的にデバイスを有効/無効にすることができます。

ここに画像の説明を入力

特定のデバイスについて、現在ユーザーが無効/有効な状態にあるかどうかを知りたいです。

私は次のアプローチを試しました

  1. CM_Get_DevNode_Status(&status, &problem, data.DevInst, 0);の存在がDN_STARTED、またはそれDN_DRIVER_LOADEDを教えてくれることを望んでいました。ただし、デバイスが接続/切断されたときに、ドライバーが OS によってロード/アンロードされている場合でも、これらはゼロになる可能性があります。たとえば、デバイスが有効で、ドライバーがロードされている場合などです。DN_STARTEDになりますが1、デバイスを切断すると、デバイスのエントリがデバイス マネージャーから削除される前にゼロに設定されます。
  2. SetupDiGetDeviceRegistryProperty(..., SPDRP_INSTALL_STATE, ...)の状態はCM_INSTALL_STATE_INSTALLED、デバイスが有効になっていることを意味するはずですが。ただし、この関数は、無効なデバイスの場合でもこの状態を返します。
  3. WMIを使えば必要な情報は取得できましたが、PowerShellではwmiを使いました。ネイティブの C++ で実装するのは非常に難しいため、wmi は使用したくありません。次のクエリを使用しました。

    Select Name, Availability, ConfigManagerErrorCode, ConfigManagerUserConfig from Win32_PnPEntity where Name = 'NVIDIA Quadro M1000M'

上記のクエリの ConfigManagerErrorCode は、22 に設定されている場合、デバイスが無効になっていることを意味し、21 は Windows がデバイスを削除していることを意味します

非 wmi ソリューションを探しています。

4

1 に答える 1