Ich habe eine
WinApi-Routine die mir einen String gibt. Man übergibt hierbei immer einen Zeiger auf das erste Zeichen und wie groß der bereitgestellte Puffer ist. Die Puffergröße ist immer ein in/out (Delphi-Sprech: "var-Parameter").
Bislang kannte ich das so dass man erst einmal
nil
und eine Pufferlänge von 0 angibt, hierauf ein
ERROR_INSUFFICIENT_BUFFER
zurückbekommt und im var-Parameter drinsteht wie groß er den Puffer gerne hätte. Beispiel:
Delphi-Quellcode:
GetTokenInformation(
processToken,
TTokenInformationClass.TokenUser,
nil,
0,
bufferLength
);
if (GetLastError() <> ERROR_INSUFFICIENT_BUFFER) then RaiseLastOSError();
SetLength(buffer, bufferLength);
Win32Check( GetTokenInformation(
processToken,
TTokenInformationClass.TokenUser,
buffer,
bufferLength,
bufferLength
) );
Ich habe nun ein Problem mit dem Aufruf
QueryFullProcessImageName
Die Doku stimmt: Wenn der Puffer zu klein ist gibt der Aufruf
False
zurück und
GetLastError()
liefert
ERROR_INSUFFICIENT_BUFFER
. Aber der Ausgabeparameter wird
nicht gesetzt. Ich weiß also immer noch nicht wie groß der Puffer sein muss.
Rein akademisch betrachtet: Wie muss man das richtig machen? Eine Schleife welche den Puffer so lange verdoppelt bis es irgendwann mal gepasst hat ist ja wirklich nicht schön...