Registriert seit: 26. Jan 2004
12 Beiträge
|
Re: Sektoren auslesen
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...
|
|
Zitat
|