¿Cómo funciona un vistazo UNICODE bloque de entorno como para iniciar un nuevo proceso a través de CreateProcessW () en Windows?
-
09-10-2019 - |
Pregunta
En esencia, me gustaría crear un nuevo proceso y definir el ambiente para que a partir del proceso padre. Me gustaría usar CreateProcessW
y pasar una (modificado) entorno Unicode en lpEnvironment
, pero no estoy seguro de lo que el contenido debe ser similar en comparación con un bloque de entorno ANSII.
La única documentación que realmente es encontrado en MSDN:
Tenga en cuenta que un bloque de entorno es ANSI terminado por dos cero bytes: una para la última cadena, uno más para terminar el bloque. bloque de entorno A Unicode se termina por cuatro cero bytes: dos para la última cadena, dos más para terminar el bloque.
Ahora he intentado
-
GetEnvironmentStrings
llamada y transmitirla al proceso hijo -
GetEnvironmentStringsW
llamada y pasarlo al proceso hijo - modificar estos bloques con mis cadenas de entorno adicionales y dárselo
no de ellos el trabajo
En realidad sólo podría establecer lpEnvironment
a NULL
a conseguir que funcione, pero ahora tendría que cambiar y volver a mis padres de procesamiento de medio ambiente - es que el camino a seguir aquí
(también hice conjunto CREATE_UNICODE_ENVIRONMENT
)
Podría alguien decirme por favor qué es tan especial acerca de bloques de entorno UNICODE
- lo hizo el trabajo, cuando sólo tiene que utilizar la materia y ASCII
llamada CreateProcessA()
...
Solución
No tengo ni idea de lo que está haciendo mal y sin código. Pero esto funciona:
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());
}
Tal vez eso le dará una idea de lo que está haciendo mal.