Einzelnen Beitrag anzeigen

Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: IOCTL_STORAGE_GET_DEVICE_NUMBER, DRIVE_GEOMETRY und DRIVE_LAYOUT

  Alt 8. Sep 2010, 11:17
Moin, Moin

so die letzten Änderungen sind eingeflossen und im ersten Beitrag hinterlegt.
Den geneigten Leser sei ans Herz gelegt nicht alles was hier bisher geschrieben
wurde ist mit Substanz hinterlegt. So wurden Änderungen vorgeschlagen
ohne sie selbst vorher zu prüfen (sprich durch den Compiler zu jagen) bzw.
und das ist meine Schuld, der Code im Anhang benutzt zu haben ohne auf die Änderungen im
abgebildeten Code einzugehen. Ein Vergleich der entsprechenden Fehler-Stellen hätte gereicht.

Einige Sachen wurden mit Absicht nicht übernommen, so ist zum Beispiel:
Delphi-Quellcode:

function GetDeviceNumber(const aPhysicalDrive : Byte;
                         var aDynDeviceRec : TDynDeviceRec) : Boolean; overload;
var
  pVolume : PChar;
  dwSize : DWORD;
  hVolume : THandle;
  DG : DISK_GEOMETRY;
  pDLI : PDRIVE_LAYOUT_INFORMATION;
  lpBytesReturned : DWORD;
  I, piCount,
  dliSize : Integer;
begin
  Result := false;
  dwSize := Length(Format('\\.\PHYSICALDRIVE%d', [aPhysicalDrive])) + 1;
  pVolume := StrAlloc(dwSize);
  try
    StrPCopy(pVolume, Format('\\.\PHYSICALDRIVE%d', [aPhysicalDrive]));
    hVolume := CreateFile(pVolume,
drin geblieben, auch wenn himitsu anderer Meinung ist. Eine Verkürzung auf:
Delphi-Quellcode:

function GetDeviceNumber(const aPhysicalDrive : Byte;
                         var aDynDeviceRec : TDynDeviceRec) : Boolean; overload;
var
  hVolume : THandle;
  DG : DISK_GEOMETRY;
  pDLI : PDRIVE_LAYOUT_INFORMATION;
  lpBytesReturned : DWORD;
  I, piCount,
  dliSize : Integer;
begin
  Result := false;
  try
    hVolume := CreateFile(PChar(Format('\\.\PHYSICALDRIVE%d', [aPhysicalDrive]),
brachte irgendwelche Pseudobezeichnungen und falsche Rückgabewerte.

Meinen Dank an allen die geholfen haben, dass das Beispiel unter D7 genauso läuft wie unter D2009.

Alter Mann
  Mit Zitat antworten Zitat