Comment un look bloc d'environnement UNICODE comme pour lancer un nouveau processus via CreateProcessW () sous Windows?
-
09-10-2019 - |
Question
Pour l'essentiel, je voudrais créer un nouveau processus et définir l'environnement pour elle du processus parent. Je voudrais utiliser CreateProcessW
et passer un (Modifiée) environnement UNICODE dans lpEnvironment
, mais je ne suis pas sûr de ce que le contenu devrait ressembler par rapport à un bloc d'environnement ANSII.
La seule documentation que j'ai vraiment trouvé est sur MSDN:
Notez qu'un bloc d'environnement ANSI est terminé par deux octets zéro: pour une la dernière chaîne, un plus pour mettre fin à le bloc. bloc Un environnement Unicode se termine par quatre octets zéro: deux pour la dernière chaîne, deux autres à mettre fin au bloc.
Maintenant, j'essayé de
-
GetEnvironmentStrings
d'appel et de le transmettre au processus de l'enfant -
GetEnvironmentStringsW
d'appel et de le transmettre au processus de l'enfant - modifier ces blocs avec mes chaînes d'environnement supplémentaires et passer sur
non d'entre eux travaillent
Je ne pouvais vraiment que mettre lpEnvironment
à NULL
pour l'obtenir au travail, mais maintenant je dois changer et revenir traitement mes parents environnement - est que le chemin à parcourir ici
(J'ai aussi fait ensemble CREATE_UNICODE_ENVIRONMENT
)
Quelqu'un pourrait-il s'il vous plaît me dire ce qui est si spécial sur les blocs d'environnement UNICODE
- il a fait le travail, quand je viens d'utiliser des trucs et ASCII
appel CreateProcessA()
...
La solution
Je ne sais pas ce que vous faites mal sans code. Mais cela fonctionne:
STARTUPINFO startInfo = {0};
PROCESS_INFORMATION procInfo = {0};
WCHAR env[] = L"key=value\0key2=value2\0\0";
WCHAR cmdline[] = L"calc";
startInfo.cb = sizeof(startInfo);
if(!CreateProcessW(NULL, cmdline, NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT, env, NULL, &startInfo, &procInfo))
{
printf("Error %d\n", GetLastError());
}
Peut-être vous donner une idée de ce que vous faites mal.