我从 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;
}
}
最佳答案
DEV_BROADCAST_VOLUME
文档提到了这条信息:
Although the
dbcv_unitmask
member may specify more than one volume in any message, this does not guarantee that only one message is generated for a specified event. Multiple system components may independently generate messages for logical volumes at the same time.
换句话说 - 一条消息可以携带有关(几乎)同时添加的多个卷的信息,但这并不能保证只会为这些卷生成一条消息。您应该为多个卷检查 dbcv_unitmask
。
关于c++ - 驱动器号重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090694/