2009-03-18 13 views
1

Ich verwende RegisterDeviceNotification, um mithilfe des WM_DEVICECHANGE-Ereignisses nach Änderungen an einem USB-Gerät zu suchen. Wenn ich jedoch RegisterDeviceNotification() aufrufen, wird NULL für das Benachrichtigungshandle zurückgegeben, das anzeigen sollte, dass es fehlgeschlagen ist. Aber GetLastError() gibt ERROR_SUCCESS zurück und die Benachrichtigungen durchlaufen tatsächlich.
Das verursacht echte Probleme, wenn ich später UnRegister für Benachrichtigungen und dann neu registrieren muss. Da das zurückgegebene Handle NULL war, kann ich mich nicht wirklich neu registrieren. Wenn ich versuche, hängt RegisterDeviceNotification() einfach.RegisterDeviceNotification Gibt NULL zurück, aber Benachrichtigungen wurden noch empfangen

Mein Code ist wie folgt:

DEV_BROADCAST_HANDLE devBrHdr; 

::ZeroMemory(&devBrHdr,sizeof(DEV_BROADCAST_HANDLE)); 
devBrHdr.dbch_size = sizeof(DEV_BROADCAST_HANDLE); 
devBrHdr.dbch_devicetype = DBT_DEVTYP_HANDLE; 
devBrHdr.dbch_handle = m_hDriver; 

m_hDevNotify = ::RegisterDeviceNotification(hWnd,&devBrHdr,DEVICE_NOTIFY_WINDOW_HANDLE); 

m_hDriver der Griff an den Fahrer, die ich früher geöffnet, auf an das Gerät anschließen (USB-Barcode-Scanner).

Irgendwelche Ideen, was ich hier falsch mache?

Antwort

0
  1. Vergewissern Sie sich nicht einen anderen Win32-API-Aufruf zwischen RegisterDeviceNotification und GetLastError machen.

  2. Überprüfen Sie den Wert devBrHdr.dbch_hdevnotify. Es sollte das gleiche Handle enthalten, das von RegisterDeviceNotification zurückgegeben wird.

  3. Wurde der m_hDriver Wert von einem Anruf an CreateFile erhalten?

+0

dbch_hdevnotify ist auch NULL, nachdem RegisterDeviceNotification zurückgegeben wurde. m_hDriver WAS von einem Aufruf von CreateFile erhalten ... Macht das einen Unterschied? –