Créer des processus

La fonction CreateProcess crée un nouveau processus qui s’exécute indépendamment du processus de création. Par souci de simplicité, cette relation est appelée relation parent-enfant.

Le code suivant montre comment créer un processus.

#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 réussit, il retourne une structure PROCESS_INFORMATION qui contient des handles et des identificateurs pour le nouveau processus et son thread principal. Les handles de thread et de processus sont créés avec des droits d’accès complets, même si vous pouvez restreindre l’accès si vous spécifiez des descripteurs de sécurité. Lorsque vous n’avez plus besoin de ces handles, fermez-les à l’aide de la fonction CloseHandle .

Vous pouvez également créer un processus à l’aide des fonctions CreateProcessAsUser ou CreateProcessWithLogonW . Ces fonctions vous permettent de spécifier le contexte de sécurité du compte d’utilisateur dans lequel le processus s’exécute.