AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi IOCTL_DISK_GET_DRIVE_LAYOUT will nicht!?
Thema durchsuchen
Ansicht
Themen-Optionen

IOCTL_DISK_GET_DRIVE_LAYOUT will nicht!?

Ein Thema von Mattze · begonnen am 31. Mär 2009 · letzter Beitrag vom 17. Mär 2010
Antwort Antwort
Mattze

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

IOCTL_DISK_GET_DRIVE_LAYOUT will nicht!?

  Alt 31. Mär 2009, 12: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
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: IOCTL_DISK_GET_DRIVE_LAYOUT will nicht!?

  Alt 31. Mär 2009, 13:12
Dein Puffer ist zu klein.
Effektiv sind ja in der Variablen "r" nur sizeof(DRIVE_LAYOUT_INFORMATION) Bytes vorhanden.
Behauptet wird aber, dass sizeof(DRIVE_LAYOUT_INFORMATION) + 15 * sizeof(PARTITION_INFORMATION) vorhanden wären.
Folge -> der Heap wird überschrieben -> AV
Andreas
  Mit Zitat antworten Zitat
Mattze

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

Re: IOCTL_DISK_GET_DRIVE_LAYOUT will nicht!?

  Alt 31. Mär 2009, 17:19
Ich hab's raus!

Einerseits ist das natürlich richtig, dass ich zwar den bigbuf gesetzt habe, aber nicht genügend Platz für r reservierte. Kein Problem!
Zum anderen die Frage, wie viel Speicher man reservieren muss.
Da habe ich bei Microsoft etwas überlesen!
Für jede Partition werden 4 Einträge in der Partitionstabelle angelegt!!!
Bei 6 Partitions gibt es also 24 Einträge!!!
Interessant ist in diesem Zusammenhang, dass die "Leereinträge" teilweise auch ausgefüllt sind. So steht da z. B. ein Partitiontyp drin. Der hat evtl. (???) sogar eine Bedeutung für die "echte" Partition, die davor als erstes in der Tabelle steht.
Ein Beispiel bei mir:
Physicaldisk0 hat 6 Partitionen.
Die erste ist C:, bootbar usw. Der Partitionstyp im "echten" Eintrag ist 7 - Partition IFS.
Im darauffolgenden Leereintrag ist er 15?
Die nächsten Partitionen haben alle ebenfalls den "echten" Eintrag 7 und den nächsten Eintrag 5 (Extended Partition).
Wenn ich wüsste, was 15 ist? Aber der Unterschied ist klar! Das kann alles stimmen!

Gruß
Mattze
  Mit Zitat antworten Zitat
Petrus1

Registriert seit: 16. Okt 2009
1 Beiträge
 
#4

Re: IOCTL_DISK_GET_DRIVE_LAYOUT will nicht!?

  Alt 17. Mär 2010, 14:32
Zitat von Mattze:
...
Ein Beispiel bei mir:
Physicaldisk0 hat 6 Partitionen.
Die erste ist C:, bootbar usw. Der Partitionstyp im "echten" Eintrag ist 7 - Partition IFS.
Im darauffolgenden Leereintrag ist er 15?
Die nächsten Partitionen haben alle ebenfalls den "echten" Eintrag 7 und den nächsten Eintrag 5 (Extended Partition).
Wenn ich wüsste, was 15 ist? ...
Der Thread ist ja schon älter .. aber trotzdem.

Ich habe mich die Tage auch mit IOCTL_DISK_GET_DRIVE_LAYOUT befaßt ..

15 = extended partition

Alle folgenden Einträge sind also logische Laufwerke
innerhalb der erweiterten Partition.

Aber .. auf meiner HD ist da LINUX drin.
Kennt jemand eine gute Dokumentation der
Partitionseinträge in extended partitions ?

Beste Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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