Udostępnij za pośrednictwem


Tworzenie procesów

Funkcja CreateProcess tworzy nowy proces uruchamiany niezależnie od procesu tworzenia. Dla uproszczenia ta relacja jest nazywana relacją nadrzędny-podrzędny.

Poniższy kod pokazuje, jak utworzyć proces.

#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 );
}

Jeśli CreateProcess zakończy się powodzeniem, zwraca PROCESS_INFORMATION strukturę zawierającą uchwyty i identyfikatory dla nowego procesu i jego wątku podstawowego. Dojścia wątku i procesu są tworzone z pełnymi prawami dostępu, chociaż można ograniczyć dostęp, jeśli określisz deskryptory zabezpieczeń. Gdy te dojścia nie są już potrzebne, zamknij je przy użyciu funkcji CloseHandle.

Proces można również utworzyć przy użyciu funkcji CreateProcessAsUser lub CreateProcessWithLogonW. Te funkcje umożliwiają określenie kontekstu zabezpieczeń konta użytkownika, w którym jest uruchamiany proces.