我已经编写了一个程序,可以在插入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/