Я написал программу для обнаружения 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;
}