对所有USB设备使用RegisterDeviceNotification()

我目前有一些代码,在Windows服务(用C ++编写)内设置连接的USB HID设备的通知。 代码如下:

GUID hidGuid; HidD_GetHidGuid(&hidGuid); DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; ZeroMemory(&NotificationFilter, sizeof(NotificationFilter)); NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; NotificationFilter.dbcc_classguid = hidGuid; HDEVNOTIFY deviceNotify = RegisterDeviceNotification(StatusHandle, &NotificationFilter, DEVICE_NOTIFY_SERVICE_HANDLE); 

然后通过SERVICE_CONTROL_DEVICEEVENT事件接收通知。 (请记住,这是一个服务,所以没有WM_DEVICECHANGE)。

我以为我只能在RegisterDeviceNotification()调用中指定DEV_BROADCAST_DEVICEINTERFACE标志,所以它会覆盖dbcc_classguid并获取所有设备,但事实certificate,Windows 2000不支持该标志,这对我来说是一个破坏者。 此外,我猜测这将不仅仅是USB设备。

我应该如何修改,以获得所有 USB设备,而不仅仅是USB HID? 应该像给出一个不同的GUID一样简单吗? 所有的USB甚至有一个GUID?

使用GUID_DEVINTERFACE_USB_DEVICE(在“usbiodef.h”中)来观察所有USB设备。

  DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; ZeroMemory(&NotificationFilter, sizeof(NotificationFilter)); NotificationFilter.dbcc_size = sizeof(NotificationFilter); NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; NotificationFilter.dbcc_reserved = 0; NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE; HDEVNOTIFY hDevNotify = RegisterDeviceNotification(hwnd, &NotificationFilter, DEVICE_NOTIFY_SERVICE_HANDLE); 

你有没有尝试过GUID_DEVCLASS_USB ? (在devguid.h,Windows SDK中定义)

你的意思是DEVICE_NOTIFY_ALL_INTERFACE_CLASSES标志?

另外,我发现下面的文章很有用 – 这是关于设备GUIDs与接口GUIDs:

http://blogs.msdn.com/doronh/archive/2006/02/15/532679.aspx