@SirThornberry: Ist diese auf 0 gesetzt, dann wird vom System (Windows) eine erstellt.
Eventuell wird in C++ ja dieser Speicherbereich automatisch mit Nullen initialisiert.
Auf die Schnelle würde ich erstmal dieses auspprobieren.
Delphi-Quellcode:
var path : WideString;
path := ExtractFilePath(Paramstr(0)) + 'test.vhd';
dwRet := CreateVirtualDisk(@StorageType, PWideChar(path), ...
Dieser Abschnitt (im
MSDN) scheint auch nicht zuzutreffen?
Zitat:
Remarks
If the CreateVirtualDisk function fails with an error code value of ERROR_INVALID_PARAMETER, the cause may be due to any of the following conditions:
(ich glaub zwar, daß dort alles stimmt, aber vielleicht hab'sch ja doch was übersehn)
Die Signatur scheint eigentlich auch zu stimmen.
Als Alternative könnte ich aber dennoch sowas anbieten:
Delphi-Quellcode:
function CreateVirtualDisk(
const VirtualStorageType: VIRTUAL_STORAGE_TYPE;
Path: PWideChar;
// man könnte sogar direkt "const Path: WideString" angeben
VirtualDiskAccessMask: VIRTUAL_DISK_ACCESS_MASK;
SecurityDescriptor: PSECURITY_DESCRIPTOR;
Flags: CREATE_VIRTUAL_DISK_FLAG;
ProviderSpecificFlags: LongWord;
const Parameters: CREATE_VIRTUAL_DISK_PARAMETERS;
Overlapped: POverlapped;
var Handle: THandle): LongWord;
stdcall;
external '
VirtDisk.dll';
Ansonsten könnte noch ein Problem in den Records liegen, also speziell in der Speicherausrichtung.
Aber bei den hier vorkommenden Feld-Typen sollte es eigentlich nahezu egal sein, selbst wenn eine falsche Record-Ausrichtung verwendet würde (fast Alles schön einheitliche 32-Bit-Werte). Sicherheitshalber könnte man mal versuchen rauszubekommen wie groß die Records in C++ wirklich sind, bzw. man schaut mal in die passenden C-Headerfiles und versucht da was zu finden.