DetourCreateProcessWithDllW(): Keine Unicode DLL-Pfadangabe :(
-
Ist das wirklich so einfach? GetShortPathName() hat immer ASCII-Output und funktioniert in jedem Fall? Denn:
MSDN schrieb:
When you create a long file name, Windows may also create a short 8.3 form of the name, called the 8.3 alias, and store it on disk also. This 8.3 aliasing can be disabled for a specified volume
Ansonsten:
Ich blicke halt nicht durch die Funktion UpdateImports(), das ist zu viel Drumherum, von dem ich wenig bis keine Ahnung habe und es wird wild mit Zeigern und Adressen hantiert. Kannst dir ja mal angucken (Google nach creatwth.cpp).
-
Hallo, wenn es dir darum geht, nur einen wchar_t string in einen C-string umzuwandeln, könnte ich dir vielleicht mit dieser Funktion weiterhelfen:
bool ToASCII(wchar_t* str, char* pOut) { if(!str||!pOut)return false; int Length = wcslen(str); for(int loop=0;loop<Length;loop++) pOut[loop] = (char)str[loop]; pOut[Length]=0; return true; }MfG, Jochen
-
Der Unicode-String muss in die import table geschrieben werden. Wenn ich ihn zuerst in char* wandeln würde, wäre er doch nicht mehr gültig.
-
Und noch was:
UpdateImport() schreibt ja normalerweise char* in den Speicher (import table). Wenn ich jetzt aber einfach wchar_t* reinschreibe, wie weiß dann die .exe (der loader oder wie auch immer windows das macht) dass der String jetzt als Unicode zu interpretieren ist?
-
Hi
Wen die Funktion nur mit char * umgehen kann, dan ist es auch so. Und du kommst nicht drum herum!
kurz: du musst es mit char* machen!Lowbyte
-
Wieso denkst du das? Wenn es an der Funktion liegt, werde ich es schon irgendwie hinbekommen. Aber wenn das PE Format nicht damit umgehen kann, dann geht es natürlich nicht, und das ist meine Vermutung.
-
Hi
PE ist nicht fähig mit Unicode umzugehen.
Das andere ist die Funktion auch nicht ! Und das wirst du nicht hinbekommen, sonst musst du die Funktion selber schreiben. Und spätestens da wirst du scheitern.Lowbyte
-
Hi
konkreter... PE erwartet char* und nicht UNICODE ! das ist der Haken.
Lowbyte
-
Danke für den Optimismus

Ich hab es bereits geschafft, die Funktion umzuschreiben. Habe auch alles überprüft, der String würde stimmen, aber es hat nicht funktioniert. Also ging ich davon aus, dass PE nur ASCII kann.Und dem scheint auch so zu sein. Warum eigentlich? Es ist also nicht vorgesehen, ganze Pfade für den loader anzugeben, sondern nur Dateinamen? Denn Unicode-Pfade unterstützt Windows ja, und somit sollte es das PE Format doch eigentlich auch...
Naja, ich habs jetzt mit CreateRemoteThread() & LoadLibraryW() gemacht. Klappt auch tadellos.
-
Hi
Die W version der Funktion ist nur zur kompatibilität zu UNICODE Projecten. Das ist noch bei paar Funktionen so, von der API. Das heisst aber nicht das sie auch funktioniert.
Und warum brauchst du einen Unicode Path, gets nicht auch ohne, wen nicht warum?.Lowbyte
-
Welche Funktion meinst du jetzt?
Weil mein Programm auch für Windows in anderen Sprachen sein soll.