Thema: Delphi Sektoren auslesen

Einzelnen Beitrag anzeigen

nice

Registriert seit: 26. Jan 2004
12 Beiträge
 
#21

Re: Sektoren auslesen

  Alt 3. Mär 2004, 11:09
Also ich konnte das Problem jetzt isolieren:

Delphi-Quellcode:
function RawOpenDrive(DriveLetter: Char): TRawDrive;
var num,h: Cardinal;
begin
  h:=0;
  FillChar(Result, SizeOf(TRawDrive), 0);

  Handle := CreateFile(PChar('\\.\' + DriveLetter + ':'),
                       GENERIC_READ or GENERIC_WRITE,
                       FILE_SHARE_READ or FILE_SHARE_WRITE,
                       nil,
                       OPEN_EXISTING,
                       0,
                       0);
  Result.Handle := Handle;
  if Result.Handle = INVALID_HANDLE_VALUE then RaiseLastOSError;

  // Laufwerk für andere sperren
  if not DeviceIoControl(h, FSCTL_LOCK_VOLUME, nil, 0, nil, 0, num, nil) then
  RaiseLastOSError;

  { Disk-Geometry ermitteln. Vor allem ist das Feld BytesPerSector wichtig, da nur vielfache Bytes gelesen werden können. Ist also BytesPerSector z.B: 512 und man will nur 1 Byte lesen, muss man 512 Bytes lesen. }
  if not DeviceIoControl(Handle,IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0,@Result.DiskGeometry,SizeOf(TDiskGeometry), num, nil) then
    RaiseLastOSError;
end;
Wenn ich als DriveLetter 'C' übergeb müsste
es ja theoretisch klappen, nur kommt dann
Zitat von Windows:
---------------------------
Systemfehler. Code: 6.
Das Handle ist ungültig.
---------------------------
OK
---------------------------
an der Zeile
Delphi-Quellcode:
if not DeviceIoControl(Handle,IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0,@Result.DiskGeometry,SizeOf(TDiskGeometry), num, nil) then
    RaiseLastOSError;
Was ich nicht verstehe, da ja dieses Handle weiter oben geprüft und annerkannt wird...
  Mit Zitat antworten Zitat