Hallo,
ich möchte mit dem nachfolgenden Code Partitionsinformationen auf eine HDD schreiben,
aber leider bekomme ich immer die Fehlermeldung:
Fehler 31, "Ein an das System angeschlossenes Gerät funktioniert nicht".
Delphi-Quellcode:
function SetPartitionInfoEx : Boolean;
var
PartitionInfoEx : TPartitionInformationEx;
PartInfoMBR : TPartitionInformationMbr;
lpBytesReturned : Cardinal;
begin
ZeroMemory(@PartInfoMBR, SizeOf(TPartitionInformationMbr));
PartInfoMBR.PartitionType := PARTITION_IFS;
PartInfoMBR.BootIndicator := false;
PartInfoMBR.HiddenSectors := 0;
PartInfoMBR.RecognizedPartition := true;
ZeroMemory(@PartitionInfoEx, SizeOf(TPartitionInformationEx));
PartitionInfoEx.PartitionStyle := PARTITION_STYLE_MBR;
PartitionInfoEx.StartingOffset.QuadPart := 63 * FBytesPerSector;
PartitionInfoEx.PartitionLength.QuadPart:= FDeviceLength - 1;
PartitionInfoEx.PartitionNumber := 1;
PartitionInfoEx.RewritePartition := true;
PartitionInfoEx.Mbr := PartInfoMBR;
Result := DeviceIOControl(FDeviceHandle,
IOCTL_DISK_SET_PARTITION_INFO_EX,
@PartitionInfoEx,
SizeOf(TPartitionInformationEx),
nil, 0, lpBytesReturned, nil);
if not Result then DoWipeError(GetLastError);
end;
Die Angaben wie FBytesPerSector, FDeviceLength usw. hole ich vorher mit
IOCTL_DISK_GET_DRIVE_GEOMETRY und
IOCTL_DISK_GET_LENGTH_INFO.
Was mich ein wenig irritiert ist die Tatsache das
IOCTL_DISK_CREATE_DISK und
IOCTL_DISK_SET_DRIVE_LAYOUT_EX ohne Fehler durchlaufen.
Die Reihenfolge ist diese:
CreateDisk
UpdateProperties
SetDriveLayoutEx
UpdateProperties
SetPartitionInfoEx
UpdateProperties
Hat jemand einen Tipp woran es liegen könnte?