c++ - 驱动器号重复

标签 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;

      }

}

最佳答案

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/

相关文章:

c - WTS_CLIENT_ADDRESS 地址无法正确打印

c++ - 在早期 Windows 版本上运行时检查 Windows 10 功能是否存在

c++ - 了解堆(优先级队列)中的向上和向下渗透函数

c++ - 如何简化嵌套循环?

android - 在 Linux 和 Windows 主机上开发 Android 应用程序

c++ - 如何在 Windows 和 Mac 上提供原生用户界面?

windows - 测量 Windows 中设备驱动程序的内存使用情况

c++ - 如果 HWND 错误,则 MessageBox 返回 0

c++算法 - count_if对象中的第三个参数

c++ - 无法同时使用C++ Rest SDK和微软单元测试