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
CREATE_BREAKAWAY_FROM_JOB
0x01000000
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 .
CREATE_DEFAULT_ERROR_MODE
0x04000000
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.
CREATE_NEW_CONSOLE
0x00000010
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.
CREATE_NEW_PROCESS_GROUP
0x00000200
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.
CREATE_NO_WINDOW
0x08000000
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.
CREATE_PROTECTED_PROCESS
0x00040000
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.
CREATE_PRESERVE_CODE_AUTHZ_LEVEL
0x02000000
Consente al chiamante di eseguire un processo figlio che ignora le restrizioni del processo che normalmente verranno applicate automaticamente al processo.
CREATE_SECURE_PROCESS
0x00400000
Questo flag consente l'avvio di processi sicuri, eseguiti nell'ambiente di sicurezza Virtualization-Based.
CREATE_SEPARATE_WOW_VDM
0x00000800
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.
CREATE_SHARED_WOW_VDM
0x00001000
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.
CREATE_SUSPENDED
0x00000004
Il thread primario del nuovo processo viene creato in uno stato sospeso e non viene eseguito finché non viene chiamata la funzione ResumeThread .
CREATE_UNICODE_ENVIRONMENT
0x00000400
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.
DEBUG_ONLY_THIS_PROCESS
0x00000002
Il thread chiamante avvia e esegue il debug del nuovo processo. Può ricevere tutti gli eventi di debug correlati usando la funzione WaitForDebugEvent .
DEBUG_PROCESS
0x00000001
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.
DETACHED_PROCESS
0x00000008
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.
EXTENDED_STARTUPINFO_PRESENT
0x00080000
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.
INHERIT_PARENT_AFFINITY
0x00010000
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
WinBase.h (include Windows.h)