Partilhar via


Monitorando a saída silenciosa do processo

A partir do Windows 7, você pode usar a guia Saída do Processo Silencioso em GFlags para inserir o nome de um processo que deseja monitorar para saída silenciosa.

No contexto desse recurso de monitoramento, usamos o termo saída silenciosa para significar que o processo monitorado termina de uma das maneiras a seguir.

Terminação automática

O processo monitorado termina por si mesmo chamando ExitProcess.

Terminação entre processos

Um segundo processo encerra o processo monitorado chamando TerminateProcess.

O recurso de monitoramento não detecta a terminação normal do processo que acontece quando o último thread do processo é encerrado. O recurso de monitoramento não detecta a terminação do processo iniciada pelo código do modo kernel.

Para registrar um processo de monitoramento de saída silencioso, abra a guia Saída do Processo Silencioso em GFlags. Insira o nome do processo como a Imagem e pressione a tecla Tab . Marque a caixa Habilitar Monitoramento de Saída do Processo Silencioso e selecione Aplicar. Isso define o sinalizador FLG_MONITOR_SILENT_PROCESS_EXIT na entrada do Registro a seguir.

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ProcessName\GlobalFlag

Para obter mais informações sobre esse sinalizador, consulte Habilitar o monitoramento de saída de processo silencioso.

Para obter mais informações sobre como usar a guia Saída de Processo Silencioso em GFlags, consulte Configurando o Monitoramento de Saída de Processos Silenciosos.

Na guia Saída do Processo Silencioso de GFlags, você pode configurar as ações que ocorrerão quando um processo monitorado sair silenciosamente. Você pode configurar a notificação, o log de eventos e a criação de arquivos de despejo. Você pode especificar um processo que será iniciado quando a saída silenciosa for detectada e você pode especificar uma lista de módulos que o monitor ignorará. Várias dessas configurações estão disponíveis globalmente e para aplicativos individuais. As configurações globais se aplicam a todos os processos registrados para monitoramento de saída silenciosa. As configurações do aplicativo se aplicam a um processo individual e substituem as configurações globais.

As configurações globais são armazenadas no registro sob a chave a seguir.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit

As configurações do aplicativo são armazenadas no registro sob a chave a seguir.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\ProcessName

Modo de Relatório

A configuração Modo de Relatório está disponível como uma configuração de aplicativo, mas não como uma configuração global. Você pode usar as caixas de marcar a seguir para definir o modo de relatório.

Iniciar o processode monitor Habilitar coleta de despejoHabilitar notificação A entrada do registro ReportingMode é um OR bit a bit dos sinalizadores a seguir.

Sinalizador Valor Significado
LAUNCH_MONITORPROCESS 0x1 Quando a saída silenciosa é detectada, o processo de monitor (especificado na caixa Processo de Monitor ) é iniciado.
LOCAL_DUMP 0x2 Quando a saída silenciosa é detectada, um arquivo de despejo é criado para o processo monitorado. No caso de encerramento entre processos, um arquivo de despejo também é criado para o processo que causou a rescisão.
NOTIFICATION 0x4 Quando a saída silenciosa é detectada, uma notificação pop-up é exibida.

Ignorar auto-saídas

A configuração Ignorar Auto-Saídas está disponível como uma configuração de aplicativo, mas não como uma configuração global. Você pode usar a caixa ignorar auto-saídas marcar para especificar se as auto-saídas são ignoradas.

A entrada do registro IgnoreSelfExits tem um dos valores a seguir.

Valor Significado
0x0 Detecte e responda à terminação automática e ao término entre processos.
0x1 Ignorar a auto-terminação. Detecte e responda à terminação entre processos.

Monitorar processo

Você pode especificar um processo de monitor inserindo um nome de processo, juntamente com parâmetros de linha de comando, na caixa de texto Monitorar Processo . Você pode usar as variáveis a seguir em sua linha de comando.

Varal Significado
%e ID do processo de saída. Esse é o processo monitorado que saiu silenciosamente.
%i ID do processo de início. No caso de terminação automática, isso é o mesmo que o processo de saída. No caso de encerramento entre processos, essa é a ID do processo que causou a rescisão.
%t ID do thread inicial. Esse é o thread que causou o encerramento.
%c O código status passado para ExitThread ou TerminateThread.

Por exemplo, o valor a seguir para o Processo de Monitor especifica que, na saída silenciosa, o WinDbg é iniciado e anexado ao processo de saída.

windbg -p %e

A linha de comando Monitorar Processo é armazenada na entrada do Registro monitorProcess .

Local da pasta de despejo

Você pode usar a caixa de texto Local da pasta de despejo para especificar um local para os arquivos de despejo que são gravados quando uma saída silenciosa é detectada.

A cadeia de caracteres inserida para o local da pasta de despejo é armazenada na entrada do registro LocalDumpFolder .

Se você não especificar um local de pasta de despejo, os arquivos de despejo serão gravados no local padrão, que é %TEMP%\Silent Process Exit.

Tamanho da Pasta de Despejo

Você pode usar a caixa de texto Dump folder size para especificar o número máximo de arquivos de despejo que podem ser gravados na pasta de despejo. Insira esse valor como um inteiro decimal.

O valor que você insere para o tamanho da pasta de despejo é armazenado na entrada do registro MaxNumberOfDumpFiles .

Por padrão, há um limite de dez arquivos de despejo que podem ser gravados.

Tipo de despejo

Você pode usar a lista suspensa Tipo de Despejo para especificar o tipo de arquivo de despejo (Micro, Mini, Heap ou Personalizado) que é gravado quando uma saída silenciosa é detectada.

O tipo de despejo é armazenado na entrada do registro DumpType , que é um OR bit a bit dos membros da enumeração MINIDUMP_TYPE . Essa enumeração é definida em dbghelp.h, que está incluído no pacote Ferramentas de Depuração para Windows.

Por exemplo, suponha que você tenha escolhido um tipo de despejo de Micro e veja que a entrada do registro DumpType tem um valor de 0x88. O valor 0x88 é um OR bit a bit dos dois valores de enumeração MINIDUMP_TYPE a seguir.

MiniDumpFilterModulePaths: 0x00000080

MiniDumpFilterMemory: 0x00000008

Se você escolher um tipo de despejo personalizado, insira seu próprio OR bit a bit de MINIDUMP_TYPE valores de enumeração na caixa Tipo de Despejo Personalizado . Insira esse valor como um inteiro decimal.

Lista de Ignorar Módulo

Você pode usar a caixa Lista de Ignorar Módulo para especificar uma lista de módulos que serão ignorados quando uma saída silenciosa for detectada. Se o processo monitorado for encerrado por um dos módulos nesta lista, a saída silenciosa será ignorada.

A lista de módulos que você insere na caixa Lista ignorar módulo é armazenada na entrada do registro ModuleIgnoreList .

Lendo relatórios de saída do processo em Visualizador de Eventos

Quando um processo monitorado é encerrado silenciosamente, o monitor cria uma entrada no Visualizador de Eventos. Para abrir Visualizador de Eventos, insira o comando eventvwr.msc. Navegue até Aplicativo de Logs > do Windows. Procure entradas de log que tenham uma Origem do Monitor de Saída do Processo.

Caixa de diálogo Propriedades do evento com a guia Geral, exibindo a origem como Monitor de Saída do Processo.