Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Array wird falschrum gefüllt

  Alt 6. Mär 2003, 06:02
Ich werde noch mal wahnsinnig. Folgeder Code:
Delphi-Quellcode:
procedure THDDInfo.DumpDiskExtents;
var
  VolumePath : String;
  hVolume : cardinal;
  BytesWritten : DWORD;
  de : VOLUME_DISK_EXTENTS;
  i, j : Integer;
  TempArray : TDiskNumArray;
begin
  FDiskNumbers := nil;
  setlength(FDiskNumbers, length(FPartitions));
  for i := 0 to length(FPartitions)-1 do
  begin
    VolumePath := '\\.\'+FPartitions[i]+':';
    hVolume := CreateFile(pointer(Volumepath), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
    if hVolume = INVALID_HANDLE_VALUE then
      exit;
    DeviceIOControl(hVolume, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, nil, 0, @de, sizeof(de), BytesWritten, nil);
    for j := 0 to de.NumberOfDiskExtents-1 do
    begin
      FDiskNumbers[j] := de.extents[j].DiskNumber;
    end;
  end;
end;
Ich habe insgesammt 5 Partitionen (c bis f auf HDD0 und i auf HDD1) und beim Füllen des Arrays FDiskNumbers geht es schief. Er bekommt nach einander die Werte 0, 0, 0, 0, 1, also in der richtigen Reihenfolge wie es auch richtig ist.
Aber wenn ich nachher in das Array reinkucke, stehen sie genau umgekehrt drin, das heißt so: 1, 0, 0, 0, 0.
Aber die Reihenfolge ist natürlich wichtig, da ich auch ein Array mit den Laufwerksbuchstaben habe und das soll nachher wieder zusammenpassen logischerweise.
Die Compiler-Optimierung habe ich schon ausgeschaltet, hilft nichts.

Zum leichteren Debuggen habe ich das Projekt mal angehangen.
Angehängte Dateien
Dateityp: zip sysinfo.zip (119,0 KB, 32x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat