c ++ - Brug RegisterDeviceNotification () til ALLE USB-enheder

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har for tiden kode, der opretter meddelelser om tilsluttede USB HID-enheder inden for en Windows Service (skrevet i C ++). Koden er som følger:


   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);


Der modtages derefter en meddelelse via SERVICE\_CONTROL\_DEVICEEVENT-hændelsen. (Husk, dette er en Service, så ingen WM\_DEVICECHANGE).


Jeg troede, at jeg kun kunne angive flagfladen DEV\_BROADCAST\_DEVICEINTERFACE i registerDeviceNotification () -opkaldet, så det ville tilsidesætte dbcc\_classguid og få alle enheder, men det viser sig, at dette flag ikke understøttes i Windows 2000, hvilket er en dealbreaker for mig. Også jeg gætter på, at det ville returnere mere end bare USB-enheder.


Hvordan skal jeg ændre dette for at få alle USB-enheder, ikke kun USB HID? Skal det være så enkelt som bare at give en anden GUID? Er der endda en GUID for alle USB'er?

Bedste reference


Brugte GUID\_DEVINTERFACE\_USB\_DEVICE (i 'usbiodef.h') for at se efter alle USB-enheder.


  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);

Andre referencer 1


Har du prøvet GUID\_DEVCLASS\_USB? (defineret i devguid.h, Windows SDK)


Mente du DEVICE\_NOTIFY\_ALL\_INTERFACE\_CLASSES flag?


Jeg fandt også følgende artikel nyttige - det handler om enhed GUID'er vs GUID'er til grænseflader:


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