我从WM_DEVICECHANGE
获取设备插入和删除通知我从DBT_DEVTYP_DEVICEINTERFACE获取dbcc_name
我从DBT_DEVTYP_VOLUME
获得相应的驱动器号如果我逐个插入设备,它可以正常工作
但如果我一次插入两个设备,我会在驱动器号中重复
我该如何解决呢?
请给我一些想法
我的代码段
if ( DBT_DEVICEARRIVAL == wParam || DBT_DEVICEREMOVECOMPLETE == wParam )
{
PDEV_BROADCAST_HDR pHdr = ( PDEV_BROADCAST_HDR )lParam;
PDEV_BROADCAST_DEVICEINTERFACE pDevInf;
PDEV_BROADCAST_VOLUME pDevVolume = reinterpret_cast<PDEV_BROADCAST_VOLUME>(lParam);
switch( pHdr->dbch_devicetype )
{
case DBT_DEVTYP_DEVICEINTERFACE:
pDevInf = ( PDEV_BROADCAST_DEVICEINTERFACE )pHdr;
updateDevice( pDevInf, wParam , pDevVolume );
break;
case DBT_DEVTYP_VOLUME:
pDevVolume = ( PDEV_BROADCAST_VOLUME )pHdr;
QString aDrive = FirstDriveFromMask( pDevVolume->dbcv_unitmask );
break;
}
}
答案 0 :(得分:1)
DEV_BROADCAST_VOLUME
文档提到了这条信息:
虽然
dbcv_unitmask
成员可以在任何消息中指定多个卷,但这并不能保证只为指定事件生成一条消息。多个系统组件可以同时独立生成逻辑卷的消息。
换句话说 - 一条消息可以携带有关多个(几乎)同时添加的多个卷的信息,但这并不能保证只为这些卷生成一条消息。您应该检查dbcv_unitmask
多个卷。