首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么根据盘符取得物理驱动器

2013-10-10 
如何根据盘符取得物理驱动器根据盘符取得\\.\PhysicalDrive1这样的物理驱动器,麻烦了,谢谢[解决办法]简化

如何根据盘符取得物理驱动器
根据盘符取得\\.\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;

热点排行