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.