Flag di creazione di processi
I flag di creazione del processo seguenti vengono usati dalle funzioni CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW e CreateProcessWithTokenW. Possono essere specificati in qualsiasi combinazione, ad eccezione di quanto indicato.
Esempio
BOOL creationResult;
creationResult = CreateProcess(
NULL, // No module name (use command line)
cmdLine, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP, // creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&startupInfo, // Pointer to STARTUPINFO structure
&processInformation); // Pointer to PROCESS_INFORMATION structure
Esempio di esempi classici di Windows in GitHub.
Flags
Costante/valore | Descrizione |
---|---|
|
I processi figlio di un processo associato a un processo non sono associati al processo. Se il processo di chiamata non è associato a un processo, questa costante non ha alcun effetto. Se il processo chiamante è associato a un processo, il processo deve impostare il limite di JOB_OBJECT_LIMIT_BREAKAWAY_OK . |
|
Il nuovo processo non eredita la modalità di errore del processo di chiamata. Il nuovo processo ottiene invece la modalità di errore predefinita. Questa funzionalità è particolarmente utile per le applicazioni shell multithreading eseguite con errori rigidi disabilitati. Il comportamento predefinito è per il nuovo processo per ereditare la modalità di errore del chiamante. L'impostazione di questo flag modifica il comportamento predefinito. |
|
Il nuovo processo ha una nuova console anziché ereditare la console padre (impostazione predefinita). Per altre informazioni, vedere Creazione di una console. Impossibile usare questo flag con DETACHED_PROCESS. |
|
Il nuovo processo è il processo radice di un nuovo gruppo di processi. Il gruppo di processi include tutti i processi discendenti di questo processo radice. L'identificatore del processo del nuovo gruppo di processi è lo stesso dell'identificatore del processo, restituito nel parametro lpProcessInformation . I gruppi di processi vengono usati dalla funzione GenerateConsoleCtrlEvent per consentire l'invio di un segnale CTRL+BREAK a un gruppo di processi console. Se questo flag viene specificato, i segnali CTRL+C verranno disabilitati per tutti i processi all'interno del nuovo gruppo di processi. Questo flag viene ignorato se specificato con CREATE_NEW_CONSOLE. |
|
Il processo è un'applicazione console in esecuzione senza una finestra della console. Pertanto, l'handle della console per l'applicazione non è impostato. Questo flag viene ignorato se l'applicazione non è un'applicazione console o se viene usata con CREATE_NEW_CONSOLE o DETACHED_PROCESS. |
|
Il processo deve essere eseguito come processo protetto. Il sistema limita l'accesso ai processi protetti e ai thread dei processi protetti. Per altre informazioni su come i processi possono interagire con i processi protetti, vedere Process Security and Access Rights (Diritti di sicurezza e accesso). Per attivare un processo protetto, il file binario deve avere una firma speciale. Questa firma viene fornita da Microsoft ma non attualmente disponibile per i file binari non Microsoft. Attualmente sono presenti quattro processi protetti: base multimediale, motore audio, segnalazione errori di Windows e sistema. I componenti che caricano in questi file binari devono essere firmati anche. Le aziende multimediali possono sfruttare i primi due processi protetti. Per altre informazioni, vedere Panoramica del percorso multimediale protetto. Windows Server 2003 e Windows XP: Questo valore non è supportato. |
|
Consente al chiamante di eseguire un processo figlio che ignora le restrizioni del processo che normalmente verranno applicate automaticamente al processo. |
|
Questo flag consente l'avvio di processi sicuri, eseguiti nell'ambiente di sicurezza Virtualization-Based. |
|
Questo flag è valido solo quando si avvia un'applicazione basata su Windows a 16 bit. Se impostato, il nuovo processo viene eseguito in una macchina VIRTUALE PRIVATA (VDM). Per impostazione predefinita, tutte le applicazioni basate su Windows a 16 bit vengono eseguite come thread in una singola VDM condivisa. Il vantaggio di eseguire separatamente è che un arresto anomalo termina solo il singolo VDM; tutti gli altri programmi in esecuzione in macchine virtuali distinte continuano a funzionare normalmente. Inoltre, le applicazioni basate su Windows a 16 bit eseguite in macchine virtuali separate hanno code di input separate. Ciò significa che se un'applicazione smette di rispondere in modo momentaneo, le applicazioni in macchine virtuali separate continuano a ricevere l'input. Lo svantaggio dell'esecuzione separatamente è che richiede molto più memoria a tale scopo. È consigliabile usare questo flag solo se l'utente richiede che le applicazioni a 16 bit vengano eseguite nel proprio VDM. |
|
Il flag è valido solo quando si avvia un'applicazione basata su Windows a 16 bit. Se l'opzione DefaultSeparateVDM nella sezione Windows di WIN.INI è TRUE, questo flag esegue l'override dell'opzione. Il nuovo processo viene eseguito nella macchina virtuale virtuale condivisa. |
|
Il thread primario del nuovo processo viene creato in uno stato sospeso e non viene eseguito finché non viene chiamata la funzione ResumeThread . |
|
Se questo flag è impostato, il blocco di ambiente a cui punta lpEnvironment usa caratteri Unicode. In caso contrario, il blocco di ambiente usa caratteri ANSI. |
|
Il thread chiamante avvia e esegue il debug del nuovo processo. Può ricevere tutti gli eventi di debug correlati usando la funzione WaitForDebugEvent . |
|
Il thread chiamante avvia e esegue il debug del nuovo processo e tutti i processi figlio creati dal nuovo processo. Può ricevere tutti gli eventi di debug correlati usando la funzione WaitForDebugEvent . Un processo che usa DEBUG_PROCESS diventa la radice di una catena di debug. Ciò continua fino a quando non viene creato un altro processo nella catena con DEBUG_PROCESS. Se questo flag viene combinato con DEBUG_ONLY_THIS_PROCESS, il chiamante esegue il debug solo del nuovo processo, non dei processi figlio. |
|
Per i processi della console, il nuovo processo non eredita la console padre (impostazione predefinita). Il nuovo processo può chiamare la funzione AllocConsole in un secondo momento per creare una console. Per altre informazioni, vedere Creazione di una console. Questo valore non può essere usato con CREATE_NEW_CONSOLE. |
|
Il processo viene creato con informazioni di avvio estese; il parametro lpStartupInfo specifica una struttura STARTUPINFOEX . Windows Server 2003 e Windows XP: Questo valore non è supportato. |
|
Il processo eredita l'affinità del padre. Se il processo padre include thread in più di un gruppo di processori, il nuovo processo eredita l'affinità relativa del gruppo di un gruppo arbitrario in uso da parte dell'elemento padre. Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Questo valore non è supportato. |
Commenti
In Windows a 32 bit le applicazioni a 16 bit vengono simulate da ntvdm.exe, non vengono eseguite come singoli processi. Pertanto, i flag di creazione del processo si applicano a ntvdm.exe. Poiché ntvdm.exe persiste dopo aver eseguito la prima applicazione a 16 bit, quando si avvia un'altra applicazione a 16 bit, i nuovi flag di creazione non vengono applicati, ad eccezione di CREATE_NEW_CONSOLE e CREATE_SEPARATE_WOW_VDM, che creano un nuovo ntvdm.exe.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows XP [solo app desktop] |
Server minimo supportato |
Windows Server 2003 [solo app desktop] |
Intestazione |
|