c++ - 从单元掩码中查找所有逻辑驱动器

标签 c++ winapi

我已经编写了一个程序,可以在插入USB硬盘时对其进行检测。我想知道USB上的所有分区。如果我的驱动器有一个分区(例如E:/),则程序成功检测到。但是,如果USB驱动器有两个分区(例如:E:F:),则仅检测到第一个分区E:,但我不知道如何检测F:或USB的其他分区。插入USB驱动器时,会触发DBT_DEVICEARRIVAL

case DBT_DEVICEARRIVAL:
            
            if (b->dbcc_devicetype == DBT_DEVTYP_VOLUME)
            {
                
                PDEV_BROADCAST_HDR lpdbh = (PDEV_BROADCAST_HDR)lParam;
                PDEV_BROADCAST_VOLUME vol = (PDEV_BROADCAST_VOLUME)lParam;
                char drive = FirstDriveFromMask(vol->dbcv_unitmask);                
            }
函数FirstDriveFromMask()可以从掩码中检测到第一个遇到的分区。如何从USB驱动器检测其他分区。
char FirstDriveFromMask(ULONG unitmask)// (usb has drive e:, f: )unitmask I receive is 48. Output is E
{
    for (char i = 0; i < 26; ++i, unitmask >>= 1)
        if (unitmask & 0x1)
            return i + 'A';
    return 0;
}

最佳答案

以下功能可能会有所帮助:

std::string DrivesFromMask(ULONG unitmask)
{
    char i;
    std::string drv = "";
    for (i = 0; i < 26 && unitmask; ++i)
    {
        if (unitmask & 0x1)
        {
            drv += i + 'A';
        }
        unitmask = unitmask >> 1;
    }
    return drv;
}
然后读取std::string中的每个驱动器号。

关于c++ - 从单元掩码中查找所有逻辑驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63259972/

相关文章:

c++ - 如何使用 std::nested_exception 和 friend ?

c++ - 可能丢失在 pthread_create 的丢失记录中

c++ - 将 LPWSTR 转换为字符串

c++ - 无法通过 C++ 获取 IME 输入上下文 (ImmGetContext)

c++ - GetCurrentDirectory() 正在破坏 C++ 中的代码

c++ - 类字段在函数内部不可访问

c++ - STL 的 'partial_sum' 有什么实际用途?

c++ - 包含 vector 的指针列表的内存管理

c# - SetParent Hook ,如何解钩?

c# - 如何获取在 C# 中使用给定文件名的 PID?