Herzlichen Glückwunsch. Du hast die Ungereimtheiten zwischen verschiedenen Generationen von Windows-Schnittstellen für dich entdeckt. Das ist ein wunderbar erbauliches Thema welches zu graumeliertem Haar und wunderbaren Falten führen kann.
- QueryFullProcessImageName ist eine neue Funktion die erst eingeführt wurde nachdem Windows 9x/Me und Windows NT zu Windows 2000 verschmolzen wurden (und seitdem sind ja noch weitere Stilblüten hinzugekommen).
- GetTokenInformation stammt noch aus der guten alten NT-Zeit.
- MultiByteToWideChar stammt noch aus Windows-95-Zeiten.
Und alle arbeiten mit ERROR_INSUFFICIENT_BUFFER
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.
Die Dokumentation behauptet doch aber auch nicht, daß er gesetzt wird, oder?
Zitat:
On success, receives the number of characters written to the buffer, not including the null-terminating character.
Hab den wichtigen Teil mal hervorgehoben.
Ansonsten hat Zacherl deine Frage ja schon beantwortet. Ja, es ist die einzige sinnvolle Methode. Statt verdoppeln kannst du natürlich auch immer einen festen Wert draufschlagen. Und natürlich kannst du auch versuchen auf den von dir unterstützten Systemen einen guten Basiswert zu ermitteln, um die Anzahl der Allozierungen klein zu halten.