驱动器号中的重复

时间:2010-06-22 06:16:38

标签: c++ windows winapi

我从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;

      }

}

1 个答案:

答案 0 :(得分:1)

DEV_BROADCAST_VOLUME文档提到了这条信息:

  

虽然dbcv_unitmask成员可以在任何消息中指定多个卷,但这并不能保证只为指定事件生成一条消息。多个系统组件可以同时独立生成逻辑卷的消息。

换句话说 - 一条消息可以携带有关多个(几乎)同时添加的多个卷的信息,但这并不能保证只为这些卷生成一条消息。您应该检查dbcv_unitmask多个卷。