Einzelnen Beitrag anzeigen

monty.ms

Registriert seit: 19. Nov 2004
76 Beiträge
 
#1

DeviceIOControl - DeviceNumber ermitteln

  Alt 21. Nov 2008, 12:44
Hallo, ich versuche gerade die PhysicalDiscNumber von einer Partition zu ermitteln.

Hier mal der Code:

Delphi-Quellcode:
type
  TStorageDeviceNumber = Record
    DeviceType: LongWord;
    DeviceNumber: LongWord;
    PartitionNumber: LongWord;
  end;

...

function GetDiskNumber(Drive : string): Integer;
var H: THandle;
    SDN: TStorageDeviceNumber;
    ReturnBytes: DWORD;
begin
  Result := -1;

  H := CreateFile(PChar('\\.\'+Drive+':'), GENERIC_READ, FILE_SHARE_READ , nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

  If H = INVALID_HANDLE_VALUE Then
    Exit;

  If DeviceIoControl(H, $002d1080, nil, 0, @SDN, sizeof(TStorageDeviceNumber),ReturnBytes, nil) Then
    Result := SDN.DeviceNumber;

  CloseHandle(H);
  //
end;
Ab und an erhalte ich einfach -1, weil DeviceIOControl False zurück gibt. Aber ich versteh nicht wieso. Es tritt auch nur bei manchen Partitionen einer Festplatte auf. Was hab ich also falsch gemacht?

Hoffe mir kann jemand helfen. Danke schonmal!
  Mit Zitat antworten Zitat