我正在尝试为我的设备(cm_power_data_s)获取电源数据。
我正在使用SetupDiGetDeviceRegistryProperty
API 来执行此操作。
虽然这适用于某些设备,但不适用于其他设备。
返回的数据SetupDiEnumDeviceInfo
是null
,没有这个,我不能用SetupDiGetDeviceRegistryProperty
。 我尝试通过查询获取类来
手动填充,但不返回缓冲区大小(与传递空数据相同)。有人可以帮忙吗?这是我的代码:sp_devinfo_data
wmi
GUID
SetupDiGetDeviceRegistryProperty
uint SPDRP_DEVICE_POWER_DATA = 0x0000001E;
int proptype;
int size;
//int D3, D2, D1, D3wake, cap = 0;
DEVPROPKEY key = DEVPROPKEY.DEVPKEY_Device_PowerData;
IntPtr hDevInfo = SetupDiGetClassDevs(IntPtr.Zero, DevID, IntPtr.Zero, DIGCF.DIGCF_ALLCLASSES | DIGCF.DIGCF_PRESENT | DIGCF.DIGCF_DEVICEINTERFACE);
if (hDevInfo == (IntPtr)INVALID_HANDLE_VALUE)
{
throw new ArgumentNullException("invalidhandle");
}
SP_DEVINFO_DATA data = new SP_DEVINFO_DATA();
data.cbSize = Marshal.SizeOf(data);
SetupDiEnumDeviceInfo(hDevInfo, 0, ref data); // This data is empty for some devices
// SetupDiGetSelectedDevice(hDevInfo, ref data);
int aa = Marshal.GetLastWin32Error();
bool b = SetupDiGetDeviceRegistryProperty(hDevInfo, ref data, SPDRP_DEVICE_POWER_DATA, out proptype, IntPtr.Zero, 0, out size);
int a = Marshal.GetLastWin32Error();
if (size == 0)
{
return "";
// throw new ArgumentNullException("Power Data cannot be fetched");
}
IntPtr buffer1 = Marshal.AllocHGlobal(size);
if (!SetupDiGetDeviceRegistryProperty(hDevInfo, ref data, SPDRP_DEVICE_POWER_DATA, out proptype, buffer1, size, out size))
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}