WDF驱动代码实现查询USB总线驱动上的所有驱动的PID和VID信息
时间: 2023-11-28 09:03:49 浏览: 242
一个通过USB PID/VID查找设备是否存在的源代码工程
5星 · 资源好评率100%
要查询USB总线驱动上的所有驱动的PID和VID信息,可以使用Windows驱动程序开发工具包(WDK)中的函数来遍历设备树并获取设备属性。以下是WDF驱动代码实现查询USB总线驱动上的所有驱动的PID和VID信息的步骤:
1. 获取USB总线的设备接口GUID和设备对象
```C++
LPGUID usbDeviceGuid = (LPGUID)&GUID_DEVINTERFACE_USB_DEVICE;
WDFDEVICE usbDevice = WdfDeviceCreateDeviceInterface(
Device,
usbDeviceGuid,
NULL);
```
2. 遍历设备树并获取设备属性
```C++
WDFDEVICE usbChildDevice = WdfChildListRetrieveNextDevice(
ChildList,
NULL);
while (usbChildDevice != NULL)
{
UNICODE_STRING deviceInstanceId;
WdfStringCreate(&deviceInstanceId, NULL);
// 获取设备实例ID
if (WdfDeviceAllocAndQueryProperty(usbChildDevice,
DevicePropertyHardwareID,
NonPagedPoolNx,
WDF_NO_OBJECT_ATTRIBUTES,
&deviceInstanceId))
{
// 解析设备实例ID
PWSTR deviceId = deviceInstanceId.Buffer;
while (*deviceId)
{
if (wcsstr(deviceId, L"USB\\") == deviceId)
{
// 获取PID和VID信息
ULONG pid, vid;
if (swscanf(deviceId, L"USB\\VID_%04X&PID_%04X", &vid, &pid) == 2)
{
// 处理PID和VID信息
}
}
// 指向下一个设备实例ID
deviceId += wcslen(deviceId) + 1;
}
}
// 获取下一个设备
usbChildDevice = WdfChildListRetrieveNextDevice(
ChildList,
usbChildDevice);
}
```
这样就可以遍历所有USB总线驱动上的设备,并获取它们的PID和VID信息。注意,此代码仅适用于USB总线设备,对于其他类型的设备可能需要使用不同的接口和属性。
阅读全文