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.