tja, das kommt wohl von den vielen Varianten -.-''
P := GetMemory(Size);
GetMem(P, Size);
P := SysGetMem(Size);
...
wobei GetMem eine
Exception (EOutOfMemory) auslößt, wenn der gewpnschte Speicher nicht reserviert werden kann und die Anderen "nur" P=nil zurückliefern (also ohne
Exception).
Was gibt DeviceIoControl für'n Fehler aus?
(bei 'nem Fehler wird nichts in den Record geschrieben, daher könnten auch die "komischen" Werte kommen ... standen halt vorher schon so drin)
Delphi-Quellcode:
Size := SizeOf(_DRIVE_LAYOUT_INFORMATION_EX) + SizeOf(_PARTITION_INFORMATION_EX) * 31;
GetMem(P, Size);
Try
FillChar(P^, Size, 0);
If DeviceIoControl(H, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, nil, 0,
P, Size, OutBytes, nil) Then Begin
...
End Else ShowMessage(SysErrorMessage(GetLastError));
Finally
FreeMem(P);
End;
Und wie hast du dir eigentlich das
Handle zur Partition geholt?