RegisterDeviceNotificationを使用して、WM_DEVICECHANGEイベントを使用してUSBデバイスへの変更を監視しています。ただし、RegisterDeviceNotification()を呼び出すと、通知ハンドルに対してNULLが返されます。これは、失敗したことを示しているはずです。ただし、GetLastError()はERROR_SUCCESSを返し、通知は実際に通過します。
これは、後で通知の登録を解除してから再登録する必要があるときに、実際の問題を引き起こします。返されたハンドルがNULLだったので、実際に再登録することはできません。試してみると、RegisterDeviceNotification()がハングします。
私のコードは次のとおりです。
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は、デバイス(USBバーコードスキャナー)に接続したときに先に開いたドライバーへのハンドルです。
私がここで間違っていることについて何か考えはありますか?