Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DeviceIOControl - DeviceNumber ermitteln (https://www.delphipraxis.net/124582-deviceiocontrol-devicenumber-ermitteln.html)

monty.ms 21. Nov 2008 12:44


DeviceIOControl - DeviceNumber ermitteln
 
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!

nicodex 21. Nov 2008 13:13

Re: DeviceIOControl - DeviceNumber ermitteln
 
Was gibt im Fehlerfall GetLastError() zurück?
Ansonsten versuch’s mit ... GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, ...

monty.ms 21. Nov 2008 15:06

Re: DeviceIOControl - DeviceNumber ermitteln
 
So funktionierts. Vielen Dank!

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz