QueryDosDevice(L"E:", DeviceName, MAX_PATH);
(E:はSDカードです)
DeviceName は「\Device\HarddiskVolume3」です
それを次のようなものに「変換」するにはどうすればよいですか"\\.\PHYSICALDRIVE1"
QueryDosDevice(L"E:", DeviceName, MAX_PATH);
(E:はSDカードです)
DeviceName は「\Device\HarddiskVolume3」です
それを次のようなものに「変換」するにはどうすればよいですか"\\.\PHYSICALDRIVE1"
ボリュームは、ディスク上に存在する 1 つ以上のパーティションで構成されます。したがって、E: は必ずしもシステム内の単一のディスクにマップされるとは限りません (ソフトウェア RAID を考えてください)。
Win32 でボリュームを PhysicalDrive 名にマップする方法は、最初にボリュームを開き、次に IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS を送信することです。これにより、ボリュームがまたがるすべてのパーティションに対して 1 つの 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
、どの物理ドライブがそのパーティションを保持しているかを確認するために使用します。