注册 WM_DEVICECHANGE 事件,但还不够。
仅注册该事件则仅仅只会收到 DBT_DEVNODES_CHANGED 通知(包括光驱的弹出、收入,网络的通断等都会触发该事件)。
所以还需要用 RegisterDeviceNotification() 注册相应的设备通知。
HDEVNOTIFY RegisterDeviceNotification( IN HANDLE hRecipient, // 注册 WM_DEVICECHANGE 事件的窗口或Service句柄 IN LPVOID NotificationFilter, // DEV_BROADCAST_DEVICEINTERFACE 结构 IN DWORD Flags ); BOOL UnregisterDeviceNotification( IN HDEVNOTIFY Handle // RegisterDeviceNotification() 返回的那个Handle );在 DEV_BROADCAST_DEVICEINTERFACE 结构里有个 dbcc_classguid 为需要监听的设备 GUID。
MSDN 上说 RegisterDeviceNotification() 的 Flags 加上 DEVICE_NOTIFY_ALL_INTERFACE_CLASSES 后可以不要GUID 但我这里似乎 不能不要GUID~~ RegisterDeviceNotification() 时失败说 “Bad Data!”~ 不知道是怎么回事,也许没用对吧。
参考:
http://www.microsoft.com/whdc/Driver/tips/PnPUmNotif.mspx
http://msdn.microsoft.com/en-us/library/aa363211(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa363431(VS.85).aspx
另外,在 Linux 上的热插拔通知 可用 udev, HAL, D-BUS。
//EOF
0 comments:
Post a Comment