Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kworld en 5 Junio 2010, 07:32 am



Título: ayuda CreateProcess con variables de entorno de sistema
Publicado por: kworld en 5 Junio 2010, 07:32 am
Hola, estoy intentando crear un proceso para una aplicación de consola, pero no quiero que el proceso creado herede las variables de entorno del proceso que lo crea, por eso quiero crear un bloque de proceso con solamente variables de sistema, sin embargo algo estoy haciendo mal porque CreateProcess me arroja error en el parámetro de la variable de entorno.

Código:
#include <windows.h>
#include <stdio.h>
#include <userenv.h>

int main()
{
    LPVOID env; 
    if (!CreateEnvironmentBlock(&env, NULL, FALSE))
    {
      printf("No CreateEnvironmentBlock. Error:%d\n",GetLastError());
    }
   
    PROCESS_INFORMATION pi;
    memset(&pi, 0, sizeof(pi));
   
    STARTUPINFO si;
    memset(&si, 0, sizeof(si));
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.lpTitle = "";
    si.wShowWindow = SW_NORMAL;
   
    LPTSTR program = TEXT("cmd.exe");
    LPTSTR params = TEXT("/c \"C:\\Users\\Carlos\\Desktop\\hola.cmd\"");
   
   BOOL b;
    b = CreateProcess(program, params, NULL, NULL, FALSE, CREATE_NEW_CONSOLE|NORMAL_PRIORITY_CLASS, env, NULL, &si, &pi);
    if (!b)
    {
          printf("No CreateProcess. Error:%d\n",GetLastError());
    }
   
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
   
    getchar();
}



¿Alguien podría ayudarme por favor?


Título: Re: ayuda CreateProcess con variables de entorno de sistema
Publicado por: Eternal Idol en 5 Junio 2010, 10:46 am
¿Que error te da exactamente? ¿2 por casualidad? Si es asi es por no encontrar el cmd.exe, tenes que usar la ruta completa.


Título: Re: ayuda CreateProcess con variables de entorno de sistema
Publicado por: kworld en 5 Junio 2010, 13:15 pm
Era error 87, de parámetros.
Ya lo resolví, me ayudaron en el foro de la msdn, me dijeron que CreateEnvironmentBlock siempre devuelve un bloque unicode, así es que me faltaba el flag CREATE_UNICODE_ENVIRONMENT

Al final mi code quedó así:

Código:
#define UNICODE

#include <windows.h>
#include <stdio.h>
#include <userenv.h>

int main()
{   
    LPVOID env_block;   
    if (!CreateEnvironmentBlock(&env_block, NULL, FALSE))
    {
      printf("No CreateEnvironmentBlock. Error:%d\n",GetLastError());
    }
   

   
    PROCESS_INFORMATION pi;
    memset(&pi, 0, sizeof(pi));
   
    STARTUPINFO si;
    memset(&si, 0, sizeof(si));
si.cb = sizeof(si);

si.dwFlags = STARTF_USESHOWWINDOW;
si.lpTitle = TEXT("");
si.wShowWindow = SW_NORMAL;
   
   
    LPTSTR program = TEXT("cmd.exe");
    LPTSTR params = TEXT("/c \"C:\\Users\\Carlos\\Desktop\\hola.cmd\"");
    BOOL b;
    b = CreateProcess(program, params, NULL, NULL, FALSE, CREATE_NEW_CONSOLE|CREATE_UNICODE_ENVIRONMENT|NORMAL_PRIORITY_CLASS, env_block, NULL, &si, &pi);
    if (!b)
    {
          printf("No CreateProcess. Error:%d\n",GetLastError());
    }
   
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
    DestroyEnvironmentBlock(env_block);
   
    getchar();
}