2009-04-01 100 views
7

現在、Windowsサービス(C++で書かれている)内に接続されたUSB HIDデバイスの通知を設定するコードがあります。コードは以下の通りである:すべてのUSBデバイスにRegisterDeviceNotification()を使用

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をオーバーライドしてすべてのデバイスを取得できると思っていましたが、そのフラグはWindows 2000ではサポートされていません。また、私はそれが単なるUSBデバイス以上のものを返すだろうと推測しています。

すべて USB HIDだけでなく、これを変更するにはどうすればよいですか?別のGUIDを指定するだけで簡単なはずですか?すべてのUSB用のGUIDですか?

答えて

5

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

GUID_DEVCLASS_USBを試しましたか? (devguid.h、Windows SDKで定義されています)

DEVICE_NOTIFY_ALL_INTERFACE_CLASSESフラグを意味しましたか?

はまた、私は次の記事が役に立ったと評価してい - それはインターフェースのGUID対デバイスのGUIDについてです:すべてのUSBデバイスを監視する(「usbiodef.h」で)GUID_DEVINTERFACE_USB_DEVICEを使用し

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

関連する問題