Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Funkce CreateProcess vytvoří nový proces, který běží nezávisle na procesu vytváření. Pro zjednodušení se tato relace nazývá vztah nadřazený-podřízený.
Následující kód ukazuje, jak vytvořit 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 );
}
Pokud CreateProcess úspěšně, vrátí PROCESS_INFORMATION strukturu, která obsahuje popisovače a identifikátory pro nový proces a jeho primární vlákno. Popisovače vláken a procesů se vytvářejí s úplnými přístupovými právy, i když můžete omezit přístup, pokud zadáte popisovače zabezpečení. Pokud už tyto popisovače nepotřebujete, zavřete je pomocí funkce CloseHandle.
Proces můžete také vytvořit pomocí CreateProcessAsUser nebo CreateProcessWithLogonW funkcí. Tyto funkce umožňují určit kontext zabezpečení uživatelského účtu, ve kterém se proces spouští.