Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
CreateProcess işlevi, oluşturma işleminden bağımsız olarak çalışan yeni bir işlem oluşturur. Kolaylık olması için bu ilişkiye üst-alt ilişki adı verilir.
Aşağıdaki kodda bir işlemin nasıl oluşturulacağı gösterilmektedir.
#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 );
}
CreateProcess başarılı olursa, yeni işlemin ve birincil iş parçacığının tanıtıcılarını ve tanımlayıcılarını içeren bir PROCESS_INFORMATION yapısı döndürür. İş parçacığı ve işlem tanıtıcıları tam erişim haklarıyla oluşturulur, ancak güvenlik tanımlayıcıları belirtirseniz erişimi kısıtlayabilirsiniz. Bu tanıtıcılara artık ihtiyacınız kalmadığında, CloseHandle işlevini kullanarak bunları kapatın.
Ayrıca createProcessAsUser kullanarak veya CreateProcessWithLogonW işlevlerini bir işlem oluşturabilirsiniz. Bu işlevler, işlemin çalıştırıldığı kullanıcı hesabının güvenlik bağlamını belirtmenize olanak tanır.