Compartir a través de


Creación de procesos

La función CreateProcess crea un nuevo proceso que se ejecuta independientemente del proceso de creación. Por motivos de simplicidad, esta relación se denomina relación de elementos primarios y secundarios.

En el código siguiente se muestra cómo crear un proceso.

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

void _tmain( int argc, TCHAR *argv[] )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    if( argc != 2 )
    {
        printf("Usage: %s [cmdline]\n", argv[0]);
        return;
    }

    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        argv[1],        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

Si CreateProcess se realiza correctamente, devuelve una estructura de PROCESS_INFORMATION que contiene identificadores e identificadores para el nuevo proceso y su subproceso principal. Los identificadores de subproceso y proceso se crean con derechos de acceso completo, aunque puede restringir el acceso si especifica descriptores de seguridad. Cuando ya no necesite estos identificadores, ciérralos mediante la función CloseHandle.

También puede crear un proceso mediante las funciones de CreateProcessAsUser o createProcessWithLogonW. Estas funciones permiten especificar el contexto de seguridad de la cuenta de usuario en la que se ejecuta el proceso.