QueryDosDevice(L"E:", DeviceName, MAX_PATH);
(E: SD-карта)
Имя устройства: "\ Device \ HarddiskVolume3"
Как мне "преобразовать" его во что-то вроде "\\.\PHYSICALDRIVE1"
QueryDosDevice(L"E:", DeviceName, MAX_PATH);
(E: SD-карта)
Имя устройства: "\ Device \ HarddiskVolume3"
Как мне "преобразовать" его во что-то вроде "\\.\PHYSICALDRIVE1"
Тома состоят из одного или нескольких разделов, расположенных на дисках. Итак, E: не обязательно сопоставляется с одним диском в системе (подумайте о программном RAID).
Способ сопоставления томов с именами PhysicalDrive в Win32 заключается в том, чтобы сначала открыть том, а затем отправить IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS. Это даст вам структуру с одной записью DISK_EXTENT для каждого раздела, охватываемого томом:
typedef struct _VOLUME_DISK_EXTENTS {
DWORD NumberOfDiskExtents;
DISK_EXTENT Extents[ANYSIZE_ARRAY];
} VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
В экстентах указан номер диска:
typedef struct _DISK_EXTENT {
DWORD DiskNumber;
LARGE_INTEGER StartingOffset;
LARGE_INTEGER ExtentLength;
} DISK_EXTENT, *PDISK_EXTENT;
DiskNumber - это то, что входит в ссылку PhsyicalDriveX, поэтому вы можете просто набрать этот номер с помощью "\\. \ PhysicalDrive% d"
-скотт
Поскольку вы все равно используете WMI, начните с Win32_LogicalDiskToPartition
. На стороне Win32_LogicalDisk
заголовок будет буквой диска. Затем используйте Win32_DiskDriveToDiskPartition
, чтобы узнать, на каком физическом диске находится этот раздел.