Объем на физический диск - PullRequest
       27

Объем на физический диск

6 голосов
/ 29 сентября 2010
QueryDosDevice(L"E:", DeviceName, MAX_PATH);

(E: это SD-карта)

DeviceName - "\ Device \ HarddiskVolume3"

Как мне "конвертировать" что-то вроде "\\.\PHYSICALDRIVE1"

Ответы [ 2 ]

16 голосов
/ 29 сентября 2010

Тома состоят из одного или нескольких разделов, которые находятся на дисках. Таким образом, 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"

-Скотт

2 голосов
/ 29 сентября 2010

Поскольку вы все равно используете WMI, начните с Win32_LogicalDiskToPartition. На стороне Win32_LogicalDisk заголовком будет буква диска. Затем используйте Win32_DiskDriveToDiskPartition, чтобы увидеть, какой физический диск содержит этот раздел.

...