怎么样知道硬盘上有哪几个分区或者指定的分区是在哪一个硬盘上
2006-02-04 13:59:15 来源:WEB开发网核心提示:希望能得到这样的结果 磁盘 1 的分区 1 : C 磁盘 1 的分区 2 : D 磁盘 1 的分区 3 : E 磁盘 1 的分区 4 : F 磁盘 2 的分区 1 : G 磁盘 2 的分区 2 : I 磁盘 2 的分区 3 : J
希望能得到这样的结果
磁盘 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;
磁盘 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;
更多精彩
赞助商链接