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.