希望能得到這樣的結果
磁盤 1 的分區 1 : C
磁盤 1 的分區 2 : D
磁盤 1 的分區 3 : E
磁盤 1 的分區 4 : F
磁盤 2 的分區 1 : G
磁盤 2 的分區 2 : I
磁盤 2 的分區 3 : J
磁盤 2 的分區 4 : K
---------------------------------------------------------------
就是這樣了,GetVolumeInfo('C').DiskNumber結果就是所在的物理磁盤ID
需要JEDI的Win32支持庫才能編譯!
function GetVolumeInfo(DriverLetter: Char): TDiskExtent;
var
hVolume: THandle;
DiskExtents: PVolumeDiskExtents;
dwOutBytes: Cardinal;
begin
with Result do
begin
DiskNumber := 0;
StartingOffset.QuadPart := 0;
ExtentLength.QuadPart := 0;
end;
hVolume := CreateFile(PChar('.'+DriverLetter+':'), GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if hVolume < 1 then Exit;
DiskExtents := AllocMem(Max_Path);
if DeviceIoControl(hVolume,
IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,
nil, 0,
DiskExtents, Max_Path,
dwOutBytes, nil) then
begin
if DiskExtents^.NumberOfDiskExtents > 0 then
Result := DiskExtents^.Extents[0];
end;
FreeMem(DiskExtents);
CloseHandle(hVolume);
end;