¿Cómo funciona un vistazo UNICODE bloque de entorno como para iniciar un nuevo proceso a través de CreateProcessW () en Windows?

StackOverflow https://stackoverflow.com/questions/4168369

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

  1. GetEnvironmentStrings llamada y transmitirla al proceso hijo
  2. GetEnvironmentStringsW llamada y pasarlo al proceso hijo
  3. 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() ...

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top