Sinalizadores de criação de processo

Os sinalizadores de criação de processo a seguir são usados pelas funções CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW e CreateProcessWithTokenW . Eles podem ser especificados em qualquer combinação, exceto conforme observado.

Exemplo

     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

Exemplo de exemplos clássicos do Windows no GitHub.

Flags

Constante/valor Descrição
CREATE_BREAKAWAY_FROM_JOB
0x01000000
Os processos filho de um processo associado a um trabalho não estão associados ao trabalho.
Se o processo de chamada não estiver associado a um trabalho, essa constante não terá efeito. Se o processo de chamada estiver associado a um trabalho, o trabalho deverá definir o limite de JOB_OBJECT_LIMIT_BREAKAWAY_OK .
CREATE_DEFAULT_ERROR_MODE
0x04000000
O novo processo não herda o modo de erro do processo de chamada. Em vez disso, o novo processo obtém o modo de erro padrão.
Esse recurso é particularmente útil para aplicativos de shell multithread que são executados com erros rígidos desabilitados.
O comportamento padrão é que o novo processo herda o modo de erro do chamador. Definir esse sinalizador altera esse comportamento padrão.
CREATE_NEW_CONSOLE
0x00000010
O novo processo tem um novo console, em vez de herdar o console do pai (o padrão). Para obter mais informações, consulte Criação de um console.
Esse sinalizador não pode ser usado com DETACHED_PROCESS.
CREATE_NEW_PROCESS_GROUP
0x00000200
O novo processo é o processo raiz de um novo grupo de processos. O grupo de processos inclui todos os processos descendentes desse processo raiz. O identificador de processo do novo grupo de processos é o mesmo que o identificador de processo, que é retornado no parâmetro lpProcessInformation . Os grupos de processos são usados pela função GenerateConsoleCtrlEvent para habilitar o envio de um sinal CTRL+BREAK para um grupo de processos de console.
Se esse sinalizador for especificado, os sinais CTRL+C serão desabilitados para todos os processos dentro do novo grupo de processos.
Esse sinalizador será ignorado se especificado com CREATE_NEW_CONSOLE.
CREATE_NO_WINDOW
0x08000000
O processo é um aplicativo de console que está sendo executado sem uma janela de console. Portanto, o identificador de console do aplicativo não está definido.
Esse sinalizador será ignorado se o aplicativo não for um aplicativo de console ou se for usado com CREATE_NEW_CONSOLE ou DETACHED_PROCESS.
CREATE_PROTECTED_PROCESS
0x00040000
O processo deve ser executado como um processo protegido. O sistema restringe o acesso a processos protegidos e aos threads de processos protegidos. Para obter mais informações sobre como os processos podem interagir com processos protegidos, consulte Direitos de Acesso e Segurança do Processo.
Para ativar um processo protegido, o binário deve ter uma assinatura especial. Essa assinatura é fornecida pela Microsoft, mas não está disponível atualmente para binários que não são da Microsoft. Atualmente, há quatro processos protegidos: base de mídia, mecanismo de áudio, relatório de erros do Windows e sistema. Os componentes que são carregados nesses binários também devem ser assinados. As empresas multimídia podem aproveitar os dois primeiros processos protegidos. Para obter mais informações, consulte Visão geral do caminho de mídia protegida.
Windows Server 2003 e Windows XP: Não há suporte para esse valor.
CREATE_PRESERVE_CODE_AUTHZ_LEVEL
0x02000000
Permite que o chamador execute um processo filho que ignora as restrições de processo que normalmente seriam aplicadas automaticamente ao processo.
CREATE_SECURE_PROCESS
0x00400000
Esse sinalizador permite que processos seguros, executados no ambiente de segurança Virtualization-Based, sejam iniciados.
CREATE_SEPARATE_WOW_VDM
0x00000800
Esse sinalizador só é válido ao iniciar um aplicativo baseado no Windows de 16 bits. Se definido, o novo processo será executado em uma VDM (Máquina virtual dos DOS) privada. Por padrão, todos os aplicativos baseados no Windows de 16 bits são executados como threads em uma única VDM compartilhada. A vantagem de executar separadamente é que uma falha encerra apenas a VDM única; quaisquer outros programas em execução em VDMs distintas continuam funcionando normalmente. Além disso, aplicativos baseados no Windows de 16 bits executados em VDMs separadas têm filas de entrada separadas. Isso significa que, se um aplicativo parar de responder momentaneamente, os aplicativos em VDMs separadas continuarão a receber entrada. A desvantagem de executar separadamente é que é preciso significativamente mais memória para fazê-lo. Você deverá usar esse sinalizador somente se o usuário solicitar que aplicativos de 16 bits sejam executados em sua própria VDM.
CREATE_SHARED_WOW_VDM
0x00001000
O sinalizador só é válido ao iniciar um aplicativo baseado no Windows de 16 bits. Se a opção DefaultSeparateVDM na seção windows de WIN.INI for TRUE, esse sinalizador substituirá a opção. O novo processo é executado na Máquina Virtual dos DOS compartilhada.
CREATE_SUSPENDED
0x00000004
O thread primário do novo processo é criado em um estado suspenso e não é executado até que a função ResumeThread seja chamada.
CREATE_UNICODE_ENVIRONMENT
0x00000400
Se esse sinalizador for definido, o bloco de ambiente apontado por lpEnvironment usará caracteres Unicode. Caso contrário, o bloco de ambiente usa caracteres ANSI.
DEBUG_ONLY_THIS_PROCESS
0x00000002
O thread de chamada inicia e depura o novo processo. Ele pode receber todos os eventos de depuração relacionados usando a função WaitForDebugEvent .
DEBUG_PROCESS
0x00000001
O thread de chamada inicia e depura o novo processo e todos os processos filho criados pelo novo processo. Ele pode receber todos os eventos de depuração relacionados usando a função WaitForDebugEvent .
Um processo que usa DEBUG_PROCESS se torna a raiz de uma cadeia de depuração. Isso continuará até que outro processo na cadeia seja criado com DEBUG_PROCESS.
Se esse sinalizador for combinado com DEBUG_ONLY_THIS_PROCESS, o chamador depura apenas o novo processo, não processos filho.
DETACHED_PROCESS
0x00000008
Para processos de console, o novo processo não herda o console do pai (o padrão). O novo processo pode chamar a função AllocConsole posteriormente para criar um console. Para obter mais informações, consulte Criação de um console.
Esse valor não pode ser usado com CREATE_NEW_CONSOLE.
EXTENDED_STARTUPINFO_PRESENT
0x00080000
O processo é criado com informações de inicialização estendidas; o parâmetro lpStartupInfo especifica uma estrutura STARTUPINFOEX .
Windows Server 2003 e Windows XP: Não há suporte para esse valor.
INHERIT_PARENT_AFFINITY
0x00010000
O processo herda a afinidade de seu pai. Se o processo pai tiver threads em mais de um grupo de processadores, o novo processo herdará a afinidade relativa ao grupo de um grupo arbitrário em uso pelo pai.
Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Não há suporte para esse valor.

Comentários

No Windows de 32 bits, os aplicativos de 16 bits são simulados por ntvdm.exe, não executados como processos individuais. Portanto, os sinalizadores de criação do processo se aplicam a ntvdm.exe. Como ntvdm.exe persiste depois de executar o primeiro aplicativo de 16 bits, quando você inicia outro aplicativo de 16 bits, os novos sinalizadores de criação não são aplicados, exceto para CREATE_NEW_CONSOLE e CREATE_SEPARATE_WOW_VDM, que criam um novo ntvdm.exe.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho
WinBase.h (inclua Windows.h)