我正在编写一个应用程序,通过侦听WM_DEVICECHANGE 消息来检测某个 USB 大容量存储设备何时插入以及何时拔出。
我还注册了我的应用程序来监听WM_DEVICECHANGE
消息DBT_DEVTYP_DEVICEINTERFACE
(使用RegisterDeviceNotification API 调用),当插入或拔出 USB 大容量存储设备时,我会同时收到DBT_DEVICEARRIVAL
和消息。DBT_DEVICEREMOVECOMPLETE
现在,当插入具有多个卷的 USB 设备,然后再拔下时,就会出现问题。
插入设备后,我收到以下消息:
WM_DEVICECHANGE
(DBT_DEVICEARRIVAL
类型DBT_DEVTYP_DEVICEINTERFACE
)WM_DEVICECHANGE
(DBT_DEVICEARRIVAL
类型DBT_DEVTYP_VOLUME
)WM_DEVICECHANGE
(DBT_DEVICEARRIVAL
类型DBT_DEVTYP_VOLUME
)
以及拔出时的以下消息:
WM_DEVICECHANGE
(DBT_DEVICEREMOVECOMPLETE
类型DBT_DEVTYP_VOLUME
)WM_DEVICECHANGE
(DBT_DEVICEREMOVECOMPLETE
类型DBT_DEVTYP_DEVICEINTERFACE
)
因此,即使有两卷,也只有一条删除消息。为什么??
我有两个问题:
- 如何将
DBT_DEVTYP_DEVICEINTERFACE
消息与DBT_DEVTYP_VOLUME
消息相关联(本质上,我如何知道哪个VOLUME消息对应于哪个DEVICEINTERFACE消息 - 因为我为设备获取了它们)? - 有没有办法让 Windows 通知我两个卷删除?