如何根据盘符取得物理驱动器
根据盘符取得\\.\PhysicalDrive1这样的物理驱动器,麻烦了,谢谢
[解决办法]
简化下
const
IOCTL_STORAGE_GET_DEVICE_NUMBER = 2953344;
type
DEVICE_TYPE = DWORD;
STORAGE_DEVICE_NUMBER = record
DeviceType: DEVICE_TYPE;
DeviceNumber: ULONG;
PartitionNumber: ULONG;
end;
PSTORAGE_DEVICE_NUMBER = ^STORAGE_DEVICE_NUMBER;
function GetHardwardIDs(const drv: Char): Integer;
var
hDevice, readed: Cardinal;
number: STORAGE_DEVICE_NUMBER;
res: Boolean;
path: PChar;
begin
path := PChar(Format('\\.\%s:', [drv]));
hDevice := CreateFile(path, GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
0,
0);
if hDevice = INVALID_HANDLE_VALUE then
Result := -1;
res := DeviceIoControl(hDevice, IOCTL_STORAGE_GET_DEVICE_NUMBER,
nil,
0,
@number,
SizeOf(number),
readed,
nil);
if not res then
Result := -1;
Result := number.DeviceNumber;
end;
// 调用
procedure TForm1.btn1Click(Sender: TObject);
var
phyDrvNum: Integer;
begin
// 参数为逻辑盘符
phyDrvNum := GetHardwardIDs('g');
if phyDrvNum <> -1 then
begin
// phyDrvNum 为从0开始的下标,表示第几个物理磁盘
ShowMessage(Format('\\.\PhysicalDrive%d', [phyDrvNum]));
end;
end;