设置API获取设备属性
Setup API Get Device Properties
我知道如何在windows中使用设置api,但是,我似乎无法弄清楚如何获得我需要的一切。我想获得并知道如何获得设备友好的名称,制造商和描述。然而,我似乎不知道如何获得设备路径,所以我可以调用创建文件。有人能给我指个正确的方向吗?
我明白只有链接到场外的答案是不好的形式,但这个话题是相当深刻的。碰巧有一篇关于的微软文章正是所问的:https://learn.microsoft.com/en-us/windows-hardware/drivers/install/using-setupapi-to-access-device-properties--windows-vista-and-later-。
下面是一个代码片段,它将返回GUID指定的所有设备的设备路径(至少包括initguid.h
,然后是特定于设备的标头,例如usbiodef.h
)。这应该会让您大致了解SetupAPI是如何工作的。设备的路径是一个字符串,可以传递给CreateFile
来创建一个适合DeviceIoControl
使用的句柄。
vector<wstring> EnumDevices(
_In_ const GUID Guid
)
{
vector<wstring> r;
int index = 0;
HDEVINFO hDevInfo = SetupDiGetClassDevs(&Guid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
SP_DEVINFO_DATA DevInfoData;
memset(&DevInfoData, 0, sizeof(SP_DEVINFO_DATA));
DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
while (SetupDiEnumDeviceInfo(hDevInfo, index, &DevInfoData)) {
index++;
int jndex = 0;
SP_DEVICE_INTERFACE_DATA DevIntData;
memset(&DevIntData, 0, sizeof(SP_DEVICE_INTERFACE_DATA));
DevIntData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
while (SetupDiEnumDeviceInterfaces(
hDevInfo,
&DevInfoData, &Guid, jndex, &DevIntData
)) {
jndex++;
// Get the size required for the structure.
DWORD RequiredSize;
SetupDiGetDeviceInterfaceDetail(
hDevInfo, &DevIntData, NULL, NULL, &RequiredSize, NULL
);
PSP_DEVICE_INTERFACE_DETAIL_DATA pDevIntDetData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(
sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA) + RequiredSize
);
memset(pDevIntDetData, 0, sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA) + RequiredSize);
pDevIntDetData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
SetupDiGetDeviceInterfaceDetail(
hDevInfo,
&DevIntData,
pDevIntDetData, RequiredSize,
NULL,
&DevInfoData
);
r.push_back(wstring(pDevIntDetData->DevicePath));
free(pDevIntDetData);
}
}
return r;
}
相关文章:
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 如何将类的属性从 c++ 获取到 QML 中
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- 如何使用C++获取/设置OBS中的垂直滚动过滤器属性?
- 如何在提升图形库中获取属性的类型
- 获取正在运行的程序的属性
- 使用setW()函数保存文件时,如何获取每个属性的值
- 如何在Qt中解析未知的xml并获取其中的所有属性
- 通过EventFilter到剪贴板获取QlineEdit的某些属性
- 如何在自定义操作DLL(MSI / Wix)中获取"INSTALLED"属性?
- 提升属性树:如何使用xml文件获取子树的子级
- C++,无法获取受保护的抽象类属性
- 如何在C 中获取类n-th属性
- 如何使用 API 获取 QML 对象的 id 属性C++
- 使用 CDT 从头文件中获取属性定义的节点元素是什么
- 从 Arduino 库中的方法获取私有布尔属性
- 从元对象获取属性更改通知程序
- 当连接的 QML 属性更改时C++对象不会获取值
- 一般获取对象的所有属性C++
- 提升属性树放置/获取DBL_MAX