Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.