Membuat proses

Fungsi CreateProcess membuat proses baru yang berjalan secara independen dari proses pembuatan. Untuk kesederhanaan, hubungan ini disebut hubungan induk-anak.

Kode berikut menunjukkan cara membuat proses.

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

Jika CreateProcess berhasil, ia mengembalikan struktur PROCESS_INFORMATION yang berisi handel dan pengidentifikasi untuk proses baru dan utas utamanya. Utas dan handel proses dibuat dengan hak akses penuh, meskipun Anda dapat membatasi akses jika Anda menentukan deskriptor keamanan. Ketika Anda tidak lagi memerlukan handel ini, tutup dengan menggunakan fungsi CloseHandle .

Anda juga dapat membuat proses dengan menggunakan fungsi CreateProcessAsUser atau CreateProcessWithLogonW . Fungsi-fungsi ini memungkinkan Anda menentukan konteks keamanan akun pengguna tempat proses berjalan.