Einzelnen Beitrag anzeigen

Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

IOCTL_DISK_GET_DRIVE_LAYOUT will nicht!?

  Alt 31. Mär 2009, 13:48
Hallo,

ich versuche mich ja nun schon eine Weile an deviceIOcontrol.
Nch viel hin und her funktioniert nun auch neiniges.
Aber IOCTL_DISK_GET_DRIVE_LAYOUT will nicht.
Kann mir jemand helfen:

Delphi-Quellcode:
var
  i : Integer;
  Device : string;
  hDevice : Cardinal;
  dummy : DWORD;
  bigBuf : DWord;
  r : DRIVE_LAYOUT_INFORMATION;

begin
  hDevice := CreateFile(PChar('\\.\PHYSICALDRIVE0'), GENERIC_WRITE or GENERIC_READ,
                        FILE_SHARE_READ or FILE_SHARE_WRITE,
                        nil, OPEN_EXISTING, 0, 0);

  if hDevice <> INVALID_HANDLE_VALUE then begin
    bigbuf:=sizeof(DRIVE_LAYOUT_INFORMATION) + 15 * sizeof(PARTITION_INFORMATION);
    if not DeviceIOControl(hDevice, IOCTL_DISK_GET_DRIVE_LAYOUT, nil, 0, @r,
                       bigbuf, dummy, nil) then begin
      showmessage(SysErrorMessage( GetLastError )+' '+inttostr(getlasterror));
    end
  end;
  CloseHandle(hDevice);
end;
Ohne "GENERIC_WRITE or GENERIC_READ" in CreateFile kommt
Nr. 5: Zugriff verweigert.

Mit kommt:
Nr. 122: Der an einen Systemaufruf übergebene Bereich ist zu klein.

Ich habe bigbuf natürlich vergrößert. Ab einer gewissen Größe kommt das CPU-Fenster, davor der gleiche Fehler.

Was mache ich falsch?

Gruß
Mattze
  Mit Zitat antworten Zitat