Procmon. O infame utilitário do Windows Sysinternals para rastrear todo tipo de atividade do Windows. Conhecido por sua capacidade de rastrear instaladores de software malicioso fazendo alterações desconhecidas nas chaves do registro ou talvez inspecionando as pegadas de um vírus.
Se você precisa inspecionar o registro do Windows, o sistema de arquivos, a atividade do processo ou da rede e decidiu usar o procmon, este artigo é para você.
Neste Guia Definitivo, você vai aprender tudo o que há para saber sobre o uso do utilitário procmon, desde a instalação, o uso básico até vários casos de uso que o ajudarão a rastrear todo tipo de atividade.
Pré-requisitos
Este Guia Definitivo se aplicará a quase todos os sistemas Windows, mas, para completude (e para evitar que você tente executar o procmon em um computador com Windows 3.1), você precisará do seguinte:
- A Windows Vista or Windows Server 2008 or higher machine (x86 or x64)
É isso! Você vai baixar e instalar o procmon nas seções a seguir. O Guia usará a versão 3.6 do procmon em uma máquina com Windows 10 Build 1909 x64.
Baixando e Executando o Procmon
Para começar, você precisará do procmon em execução em sua máquina com Windows. Você pode obtê-lo de duas maneiras diferentes; via método de download tradicional ou o que a Windows Sysinternals chama de Sysinternals live.
Do Modo Antigo
O Procmon não precisa ser instalado; é um único executável. Você pode obtê-lo baixando o arquivo ZIP. Depois de baixá-lo, extraia o arquivo ZIP com sua ferramenta favorita. Abaixo está um trecho de código PowerShell se você o salvou na sua pasta pessoal. Este trecho de código criará uma pasta em ~\ProcessMonitor com todos os arquivos necessários.
Dentro da pasta ~\ProcessMonitor, você verá cinco arquivos:
- Eula.txt – O acordo de licença que você terá que aceitar antes de executar o Procmon.
- procmon.chm – O arquivo de ajuda que contém toda a documentação fornecida.
- Procmon.exe – O principal arquivo EXE que lançará a instância correta do Procmon (x86 ou x64).
- Procmon64.exe – O binário x64 do Procmon.
- Procmon64a.exe – O binário alpha 64 do Procmon.
Agora execute o Procmon invocando o arquivo ~\ProcessMonitor\procmon.exe.
O Procmon só é executado com permissões elevadas, então você será solicitado a aceitar isso se tiver o UAC ativado quando o executar. Há uma maneira de contornar isso que será abordada mais tarde neste Guia.
Sysinternals Live
Se preferir não (ou não puder) baixar um arquivo EXE, você também pode usar a pasta Sysinternals Live. Para fazer isso, abra o Explorador de Arquivos e cole \\live.sysinternals.com\tools. Você verá então uma pasta como qualquer compartilhamento de rede com todos os arquivos do Sysinternals, incluindo o procmon.

Role para baixo até encontrar procmon, clique duas vezes e voilà, você está executando o procmon!
Personalizando o Comportamento de Início do Procmon
Por padrão, o procmon é iniciado solicitando que você aceite um contrato de licença de usuário final (EULA) e também abre uma janela. Usando a linha de comando, você pode personalizar esse comportamento padrão.
Por exemplo, se você deseja iniciar o procmon minimizado usando o switch /Minimized
.
Talvez você esteja executando o procmon em uma máquina nova e prefira não ver a solicitação da EULA. Você pode desativar isso no início usando o switch /AcceptEula
.
Embora menos comum nos dias de hoje, sempre que você inicia o procmon, ele detecta se você está executando um sistema operacional de 64 bits ou 32 bits. Se estiver em uma máquina de 64 bits, ele iniciará um processo de 64 bits e vice-versa. Se estiver em uma máquina de 64 bits e desejar executar o procmon como um processo de 32 bits ou ler um arquivo de log (mais sobre isso depois) que foi gerado a partir de uma máquina de 32 bits, use o switch /Run32
.
O Procmon possui outros switches de linha de comando para personalizar o comportamento, mas você aprenderá sobre isso nas próximas seções.
Introdução ao Procmon
Quando você inicia o Procmon pela primeira vez, pode ficar sobrecarregado com as opções. Não se preocupe, você aprenderá praticamente tudo neste Guia! Abaixo, você pode ver uma captura típica em andamento do Procmon.

No momento em que você executa o Procmon, ele começa a capturar muitos tipos diferentes de eventos do Windows.
Se você não quiser que o Procmon comece automaticamente a capturar eventos, pode iniciá-lo a partir da linha de comando, executando
procmon.exe /NoConnect
.
Conforme mostrado na captura de tela acima, na coluna Operação, existem vários ícones, cada um representando diferentes classes de eventos do Windows. O Procmon captura eventos de cinco classes diferentes:
- Registro
- Sistema de arquivos
- Rede
- Processos
- Eventos de perfil
Cada evento em todas as classes é representado em um único painel de lista de sete colunas:
- Hora do dia – O horário em que o evento ocorreu.
- Nome do processo – O nome do processo que desencadeou o evento.
- PID – O identificador do processo.
- Operação – O tipo de evento, como se o processo abrisse um arquivo, alterasse um valor de chave do registro, etc.
- Caminho – O caminho para o objeto com o qual o evento interagiu, como um caminho de arquivo, caminho de registro, etc.
- Resultado – Esta coluna conterá inúmeros valores para indicar o resultado do evento. Este valor pode ser tão simples como SUCESSO ou específico para o evento, como REPARAÇÃO, ESTOURO DE BUFFER, NOME NÃO ENCONTRADO, etc.
- Detalhe – Esta coluna contém todos os detalhes minuciosos uma vez que você identifica um evento que gostaria de ver.
Se preferir não ver uma determinada coluna ou gostaria de ver quais outras colunas estão disponíveis, clique com o botão direito do mouse em qualquer cabeçalho de coluna e escolha Selecionar colunas. Você será apresentado com uma caixa de diálogo onde pode personalizar as colunas visíveis.

Na janela de evento, clique duas vezes em um evento. Você pode encontrar muitos mais detalhes sobre o processo e o próprio evento visualizando as guias Evento, Processo e Pilha.

Habilitando e Desabilitando Capturas
Você tem controle total sobre o processo de captura. Você pode desabilitar todo o processo de captura ou desabilitar a captura por classe de evento.
Na barra de menu superior, você verá um ícone de lupa (abaixo). Se a lupa tiver um X vermelho sobre ela, isso significa que a captura está desabilitada. Caso contrário, a captura está habilitada.

Não deixe o procmon capturando eventos por mais tempo do que precisa. Ele usa memória virtual para armazenar todos esses eventos e se não tiver cuidado, pode acabar travando o Windows! Você pode alterar esse comportamento conforme verá um pouco mais tarde.
Se preferir ser mais seletivo, também pode controlar a captura de cada classe de evento. Na barra de menu, você verá cinco dos mesmos ícones sendo exibidos na coluna Operação. Ao clicar nesses botões, você pode ativar e desativar classes de evento inteiras.

Passe o mouse sobre cada ícone para ver que tipo de atividade cada ícone representa.
Você verá assim que clicar em um ícone, o Procmon aplica um filtro de evento. Dependendo de quantos eventos foram capturados até agora, você pode ver um pop-up como o abaixo.

Por padrão, o ícone mais à direita (o gráfico preto e verde) não está habilitado. Se desejar habilitar esta classe de evento quando o Procmon iniciar, você pode invocar o Procmon a partir da linha de comando usando
.\procmon.exe /Profiling
.
Você pode ver o número de eventos na janela olhando para baixo. Como pode ver abaixo, o Procmon processou 84.334 eventos, mas devido ao filtro de eventos aplicado, está mostrando apenas 15.912 deles ou 18% deles. Você também pode ver que esses eventos estão sendo armazenados na memória virtual (mais sobre isso depois).

Filtros de Evento
Para entender o Procmon, você indubitavelmente precisa entender o conceito de filtros de evento. Os filtros de evento são como você separa o sinal do ruído. Os filtros de evento ocultam todos os eventos que você não está interessado. Acima, você aplicou filtros de evento por classes de eventos inteiros, mas você pode ficar muito mais granular.
Existem várias maneiras de interagir com os filtros de eventos. Vamos começar de forma simples. Clique no item de menu Filtro no topo. Você verá muitas opções diferentes para trabalhar com filtros.

Visualizando Filtros
Por padrão, o Procmon cria um filtro para você. Sob o item de menu Filtro, clique em Filtrar…. Você verá uma caixa de diálogo Filtro do Monitor de Processos aparecer com duas áreas; uma para filtrar suas regras de filtro e outra para visualizar todas as regras que você configurou. Você pode ver um exemplo disso abaixo.

Por padrão, o Procmon mostrará os filtros acima sempre que você o iniciar. Se desejar ocultar esta caixa, você pode fazer isso iniciando o Procmon com o comando
/Quiet
.
Você deve perceber que, sem criar nenhum filtro próprio, o Procmon também está usando um conjunto embutido de regras de filtro. Se você rolar para baixo na caixa de diálogo Filtro do Monitor de Processos, verá muitos tipos diferentes de regras definidas. Aqui você pode visualizar cada categoria, operador, valor e ação a ser tomada para cada regra.
Esses filtros são aplicados porque geralmente você não precisará ver os eventos que esses filtros excluem. Mas, se desejar ver todos os eventos, você também pode simplesmente remover todos os filtros padrão ou clicar em Filtro —> Ativar Saída Avançada como mostrado abaixo.

Por exemplo, você verá algumas regras no topo que mostram o Nome do Processo para o valor da coluna Coluna, é para Relação, vários processos relacionados ao procmon para o valor da coluna Valor e uma Ação de Excluir. Em termos simples, essas regras dizem ao procmon para não exibir (excluir) um processo com o nome de procmon.exe, por exemplo.
Gerenciando Regras de Filtro de Eventos
Dependendo do seu caso de uso, você certamente precisará adicionar suas próprias regras. Existem algumas maneiras diferentes de adicionar regras.
Usando a Caixa de Filtro do Process Monitor
Na última seção, você viu como era a caixa de Filtro do Process Monitor e visualizou todas as regras. Nesta caixa, você também pode criar, modificar e remover regras.
Vamos supor que você queira ver apenas as vezes em que o processo explorer.exe consultou uma chave do registro.
Adicionando Filtros de Evento
Na caixa de Filtro do Process Monitor:
- Clique na lista suspensa mais à esquerda. Essa lista mostra todas as várias categorias de eventos em que você pode filtrar. Você pode ver abaixo que há muitas opções!
Cada item que você vê nesta lista corresponde a uma coluna exibida na visualização principal, conforme mostrado abaixo. Para o propósito deste artigo, escolha Nome do Processo.

2. Escolha uma categoria e, em seguida, escolha um operador. Por padrão, a caixa de seleção será é, mas você tem muitas outras opções se clicar na caixa suspensa. Esses operadores permitem filtrar a opção escolhida de muitas maneiras diferentes. Como você está procurando um processo que seja exatamente explorer.exe, escolha é.

3. Finalmente, escolha o nome do processo conforme mostrado abaixo. Você notará que, como escolheu Nome do Processo como categoria, o Procmon automaticamente exibe todos os processos em execução atualmente para escolher.

4. Certifique-se de ter escolhido Incluir, já que você só deseja ver os eventos que atendem a esse critério. Em seguida, clique no botão Adicionar para adicionar a regra ao seu filtro atual. Você pode ver abaixo que a regra de inclusão é exibida como um marca de seleção verde.
5. Por fim, como você deseja todos os eventos em que explorer.exe consulta uma chave de registro, certifique-se de incluir também a operação RegQueryKey. Quando terminar, você deverá ver ambas as regras adicionadas.

6. Clique em OK e você verá a janela principal remover todos os eventos que não correspondem às regras de filtro que você definiu.

Removendo Regras de Filtro de Eventos
Você também pode remover e alterar facilmente as regras de filtro.
- Clique no ícone de Filtro no topo da janela principal para abrir a caixa Filtro do Monitor de Processos.

2. Destaque ambas as regras de filtro que você criou acima, clique no botão Remover conforme mostrado abaixo e clique em OK. Essa ação removerá ambas as regras personalizadas adicionadas anteriormente.

Você também pode clicar no botão Redefinir para remover automaticamente todas as regras de filtro personalizadas.
Sempre que aplicar um filtro, encerre o procmon e inicie-o novamente; esse filtro será aplicado novamente. Se desejar garantir que nenhum filtro seja aplicado ao iniciar o procmon, você pode invocar o procmon com a opção
/NoFilter
.
Adicionando Regras de Filtro com Clique Direito
Você também pode adicionar regras de filtro através de um menu de clique direito se clicar com o botão direito em um processo. Como você pode ver abaixo, você pode criar qualquer tipo de regra diretamente a partir deste menu; não é necessário ir para a caixa Filtro do Monitor de Processos em absoluto!

Para remover regras de filtro criadas através do menu de clique direito, ainda será necessário ir para a caixa Filtro do Monitor de Processos para removê-las.
Salvando e Gerenciando Filtros Personalizados
Se você é um usuário avançado do procmon, provavelmente chegará um momento em que terá conjuntos de regras de filtro para várias ocasiões. Usando os recursos de salvamento e organização de filtros do procmon, você pode gerenciar e salvar quantos desses conjuntos desejar.
Vamos dizer que você tem um monte de filtros personalizados definidos e gostaria de salvá-los para usá-los novamente em algum momento. Você pode salvar esse filtro indo até Filtro, escolhendo Salvar Filtro e fornecendo um nome como mostrado abaixo.

Assim que o filtro for salvo, você pode então ir até Filtro, clicar em Organizar Filtros onde você verá todos os filtros que salvou. A partir daqui, você pode clicar em um filtro, clicar em OK e seu filtro salvo será aplicado à janela atual.

Você também pode carregar um filtro salvo passando o mouse sobre Carregar Filtro no menu suspenso Filtro e escolhendo seu filtro salvo na lista à direita.

Importando e Exportando Filtros
Se você espera carregar o Procmon em outro computador e manter todos os seus filtros salvos, está sem sorte. O Procmon não possui um serviço em nuvem para sincronizar filtros. Mas, você pode exportar manualmente filtros e importá-los posteriormente.
Para exportar filtros do Procmon:
- Vá para a caixa de Organizar Filtros.
- Clique no filtro que já salvou e deseja exportar.
- Clique no botão Exportar.
- Forneça um nome, escolha um caminho e clique em OK. Você verá que todos os filtros do Procmon são salvos com a extensão PMF.
Para importar filtros do Procmon:
- Vá para a caixa de Organizar Filtros.
- Clique no botão Importar.
- Encontre o filtro que deseja importar e clique em OK.
Você pode ver um guia visual desses passos abaixo.

Importando e Exportando Configurações do Procmon
Como aprendido anteriormente, é possível exportar e importar filtros do Procmon por meio de arquivos PMF. Mas filtros são apenas um componente que compõe uma instância do Procmon. É possível personalizar as colunas, alterar a localização de armazenamento (mais sobre isso depois) e muito mais. Não seria bom também salvar todas essas configurações? Você pode!
Para salvar toda a configuração do Procmon, clique em Arquivo -> Exportar Configuração e escolha uma localização onde deseja salvar o arquivo PMC (configuração do Procmon).

Depois de salvar, você pode fechar o Procmon no mesmo computador (ou até mesmo em um diferente), abrir o Procmon novamente e clicar em Arquivo -> Importar Configuração, onde o Procmon aplicará todos os mesmos filtros e outras configurações exatamente como foram exportados.
Também é possível carregar configurações salvas (incluindo filtros) via linha de comando usando o parâmetro /LoadConfig seguido do caminho do arquivo, por exemplo: ./procmon.exe /LoadConfig C:\ProcmonConfigs\file_deletion.pmc.
Destacando Eventos e Convertendo em Filtros
Talvez você precise destacar certos eventos para facilitar sua identificação, mas não queira necessariamente remover esses eventos da visualização com um filtro. Nesse caso, você pode usar destaques. Os destaques permitem que você crie conjuntos de regras, assim como os filtros, mas em vez de ocultar eventos, a cor de fundo dos eventos é alterada.
Talvez você veja um processo na lista de eventos chamado ctfmon.exe que deseja destacar na lista. Você pode criar uma regra de destaque assim:
- Clique com o botão direito no evento que deseja destacar um atributo.
- Clique em Destacar e escolha um atributo desse evento para destacar. Neste exemplo, você escolheria Nome do Processo. Em seguida, você verá a cor de fundo mudar para uma cor azul claro.
- Depois que a regra de destaque for criada, você poderá ir para a caixa de Realce do Monitor de Processos clicando em Filtrar —> Destacar. Você verá a regra de destaque criada lá.
- A partir da caixa de Realce do Monitor de Processos, você pode adicionar e remover regras da mesma forma que faz com um filtro.
- Se você criou algumas regras de destaque e gostaria de transformá-las em um filtro, pode fazer isso clicando no botão Fazer Filtro na caixa de Realce do Monitor de Processos.
Você pode ver uma demonstração visual desses passos abaixo.

Exportar e Abrir Eventos de/para Arquivos de Log
Para que o Procmon exiba eventos para você em uma janela, eles precisam ser armazenados em algum lugar. Por padrão, os eventos são armazenados na memória virtual, mais especificamente no seu arquivo de página.

Dependendo de quão grande é o arquivo de página que você definiu (e do limite de compromisso do sistema), depende de quantos eventos o Procmon pode armazenar.
O Procmon é capaz de capturar até 199 milhões de eventos.
Salvando Eventos em um Arquivo de Log
Talvez precise guardar esses eventos para investigação posterior ou carregá-los em outro computador? Nesse caso, precisa guardar os eventos em um arquivo de log (PML).
Uma maneira de salvar esses eventos úteis é clicar em Arquivo —> Salvar. Esta ação abrirá a caixa de diálogo Salvar em Arquivo abaixo, onde você será apresentado(a) com algumas opções.
Eventos para salvar:
- Todos os eventos – Esta opção é exatamente como parece. Irá salvar todos os eventos capturados pelo Procmon, independentemente de ter aplicado um filtro de eventos ou não a um arquivo.
- Eventos exibidos usando filtro atual – Esta opção não salva todos os eventos capturados, mas apenas aqueles que passaram pelos seus filtros de eventos atualmente ativos.
- Eventos destacados – Esta opção exporta para o log apenas os eventos que você destacou atualmente.
Formato:
- Formato Nativo do Monitor de Processos (PML) – O formato padrão para salvar todos os eventos (PML).
- Valores Separados por Vírgula (CSV) – Salva todos os eventos em um arquivo CSV.
- Linguagem de Marcação Extensível (XML) – Salva todos os eventos em um arquivo XML. Este formato também permite salvar rastros de trilha (mais sobre isso depois) e resolverá símbolos de pilha.

Clique em OK e o Procmon irá registrar todos os eventos capturados atualmente que correspondem aos seus critérios no arquivo de sua escolha.
Abrindo Logs de Eventos Salvos
Você capturou milhares de eventos em um computador, salvou essa sessão de captura em um arquivo PML e o copiou para outro computador para investigação. E agora? Você precisa abri-lo.
Você pode abrir qualquer arquivo PML, independentemente de tê-lo capturado no seu computador local ou não, simplesmente indo para Arquivo —> Abrir e escolhendo o arquivo PML.
Você também pode abrir logs a partir da linha de comando usando a opção /OpenLog, por exemplo, procmon.exe /OpenLog C:\MeuArquivoDeLog.pml.
Registro Automático de Eventos
Na seção anterior, você aprendeu como exportar eventos para um log depois de capturá-los. Mas e se você souber antecipadamente que deseja eventos em um arquivo PML, XML ou CSV? Você pode fazer com que o procmon capture automaticamente eventos em um desses formatos de arquivo de log.
Além disso, armazenar eventos no arquivo de página é aceitável se você estiver em uma sessão de solução de problemas ad hoc simples que pode durar menos de uma hora. No entanto, este método tem algumas desvantagens.
- Sempre que você fecha o procmon, os eventos desaparecem.
- Como mencionado antes, o tamanho do arquivo de página pode crescer descontroladamente.
Ao usar a memória virtual como local de armazenamento, você pode descobrir quanto espaço resta para o procmon usando Arquivo —> Arquivos de Suporte.
O que fazer? Altere o local de armazenamento.
Armazenando Eventos no Disco
Você pode alterar onde o procmon armazena eventos do seu arquivo de página para o disco, fazendo o seguinte:
- Interrompa a captura se estiver em execução.
2. Clique em Arquivo -> Arquivos de Backup. Você verá um resumo dos eventos armazenados e o tamanho, juntamente com uma opção para alterar o local de armazenamento.

3. Para alterar o local de armazenamento para um arquivo, clique no campo Usar arquivo denominado:, clique no botão de reticências e defina um local de arquivo.
Tente usar um volume de disco diferente do que o procmon está sendo executado para obter melhor desempenho.
Você pode forçar o procmon a usar um arquivo como local de armazenamento também o iniciando a partir da linha de comando e usando a opção
/BackingFile
. Se desejar voltar a usar o arquivo de paginação novamente, use a opção/PagingFile
.
Conversão de Arquivos de Log
O Procmon pode salvar arquivos de log em três formatos diferentes; PML, CSV e XML. Talvez você tenha salvado um arquivo de log como PML e precise analisar os eventos com um script ou outra ferramenta. Nesse caso, você pode converter esse arquivo de log PML para XML ou CSV na linha de comando.
Vamos dizer que você tenha um arquivo de log PML em C:\captura.pml. Você gostaria de converter este arquivo de log para XML e outro em formato CSV. Você pode fazer isso primeiro abrindo o arquivo de log com a opção /OpenLog
e depois usando uma opção /Save*
para girar e salvá-lo.
O Procmon possui um parâmetro padrão /SaveAs
que permite salvar um log em qualquer um dos três formatos mencionados anteriormente. O parâmetro /SaveAs
definirá o formato do arquivo dependendo da extensão do arquivo que você fornecer.
Abaixo estão alguns exemplos:
Converter o log captura.pml para captura.xml:
Converter o log capture.pml para capture.csv:
Lembre-se das opções de rastreamento de pilha e resolução de símbolos de pilha na caixa de diálogo Salvar no Arquivo acima? Você também pode habilitar essas opções usando /SalvarComo1
e /SalvarComo2
.
Você só pode salvar rastreamentos de pilha e informações de símbolos no formato XML.
Converter o log capture.pml para capture.xml incluindo informações de pilha:
Converter o log capture.pml para capture.xml incluindo informações de pilha com símbolos:
Saiba que adicionar rastreamentos de pilha e símbolos aumentará drasticamente o tempo de conversão e você verá inevitavelmente um indicador de progresso como mostrado abaixo.

Capturando Eventos de Inicialização
Às vezes, as informações que você precisa investigar não são geradas enquanto o Windows está em execução. Você também pode precisar investigar o que um processo está fazendo sempre que o Windows estiver apenas inicializando.
É comum precisar solucionar problemas como desempenho lento de inicialização ou talvez malware que decide ser executado imediatamente quando o Windows é iniciado. O Procmon tem um recurso chamado Registro de Inicialização que você pode habilitar para capturar essas informações.
Para habilitar o registro de inicialização, clique em Opções —> Habilitar Registro de Inicialização no menu como mostrado abaixo.

Depois de clicar em Habilitar Registro de Inicialização, você verá uma caixa de diálogo pedindo algumas informações opcionais. Esta caixa de diálogo é onde você pode capturar eventos de perfil de thread.
Habilitar eventos de perfil de thread é um caso de uso avançado. Quando você habilita o perfil de thread, o procmon captura rastreamentos de pilha de thread e utilização da CPU que você pode usar para identificar a origem de problemas de desempenho relacionados à CPU.

Ao clicar em OK, o procmon irá habilitar o registro de inicialização que instrui o driver de filtro (mais sobre isso depois) a aguardar o próximo reinício do Windows. Quando você reiniciar o Windows, o procmon então começará a capturar eventos de processo como se você tivesse iniciado manualmente.
Todos os dados de eventos de inicialização são armazenados em um arquivo de log temporário chamado C:\Windows\procmon.pmb.
Quando o Windows estiver pronto, abra o procmon novamente. Você deverá ver uma caixa de diálogo como abaixo. Aqui, clique em Sim para converter os dados de inicialização para o formato PML, selecionando então o arquivo de log para salvar os dados.

Ao converter os dados, você verá uma barra de progresso como abaixo.

Não se esqueça de abrir o procmon novamente após reiniciar! O Procmon começará a capturar eventos assim que o Windows inicializar em C:\Windows\procmon.pmb. Ele continuará a fazê-lo até que você o desligue abrindo o procmon novamente.
Executando o Procmon Remotamente
Embora o procmon seja executado apenas localmente em uma máquina Windows, você pode invocar o procmon para ser executado remotamente via psexec ou pelo comando Invoke-Command
do PowerShell.
Relacionado: PsExec: O Guia Definitivo, Invoke-Command: A Melhor Maneira de Executar Código Remoto
Para executar o procmon com o comando Invoke-Command
do PowerShell, siga as etapas a seguir:
- 1. Ative a Remoção do PowerShell na máquina remota, se ainda não estiver ativada.
2. Copie a pasta do procmon para o computador remoto via console do PowerShell.
3. Invoque o procmon via PowerShell garantindo que você pule a confirmação do EULA e force o procmon a armazenar eventos em um arquivo de backup em vez de memória virtual e não solicite o filtro ao iniciar.
4. Neste ponto, o procmon começou a capturar. Reproduza o problema que está tentando capturar.
5. Pare o procmon no computador remoto usando o switch /Terminate.
6. Aguarde o procmon encerrar. Como atalho, você pode verificar periodicamente o processo do procmon e retornar o controle para o console do PowerShell quando estiver completo.
7. Copie o arquivo de log remoto para o computador local
Neste momento, você possui o arquivo de log executado remotamente em seu computador local!
Se desejar um script do PowerShell adequado para gerenciar esta captura, você pode encontrá-lo abaixo.
Configurando Capturas de Procmon de Longa Duração
A busy Windows system can produce a lot of events procmon captures that can overwhelm your PC. If you intend to run procmon for an extended amount of time, there a few measure you should take into consideration.
Eliminar Eventos Filtrados
Ao executar uma captura com o procmon, ele captura todos os eventos. Você pode criar e aplicar filtros de eventos, mas esses filtros apenas ocultam os eventos na tela; eles não impedem que o procmon os capture.
Se pretende realizar capturas de longa duração com o Procmon, é sempre uma boa ideia escolher a opção Drop Filtered Events no menu Filter, conforme mostrado abaixo.

Assim que selecionar a opção Drop Filtered Events, o Procmon começará imediatamente a descartar todos os eventos filtrados. O Procmon não os mostra na tela, nem os salva na memória virtual ou num ficheiro de registo. Descartar eventos indesejados ajuda a conservar recursos.
Tópicos Avançados
Ainda deseja mais informações sobre o Procmon e como utilizá-lo? Vamos abordar alguns tópicos avançados! Estes são temas que provavelmente não precisará de conhecer com muita frequência. Estes tópicos estão mais relacionados com funcionalidades do Procmon mais técnicas, mas essa informação pode ser útil ao resolver problemas com o Procmon.
Drivers de Filtro
Para capturar eventos, o Procmon regista e utiliza um driver de filtro através do Windows Filter Manager (FltDrv). Este driver de filtro, chamado PROCMON24, é instalado quando inicia uma captura. Por vezes, este driver de filtro pode entrar em conflito com outras aplicações.
Depois de iniciar o Procmon, abra uma consola PowerShell elevada ou um prompt de comando e execute o comando fltmc filters
. A utilidade fltmc
lista, carrega e descarrega drivers de filtro. Ao executar este comando, verá o driver de filtro PROCMON24 carregado, como mostrado abaixo.
Aviso de que a Altitude do PROCMON24 é 385200 por padrão, com outros filtros tendo um número menor. A altitude do driver de filtro representa o nível em que um driver de filtro pode “ver” eventos. Por exemplo, eventos ocorrendo nos níveis wcifs, luafv ou Wof, o procmon não será capaz de visualizar. Mais sobre como alterar isso posteriormente.

O driver de filtro PROCMON24 permanece carregado mesmo quando o procmon não está em execução.
Às vezes, o procmon pode ter problemas ao carregar um driver de filtro. Para solucionar, abra o procmon com a opção
/NoConnection
para evitar que o procmon se conecte ao driver de filtro.
Descarregando o Driver de Filtro PROCMON24
Há casos em que o driver de filtro PROCMON24 pode entrar em conflito com vários dispositivos de hardware e será necessário descarregá-lo. No entanto, essa situação pode não ser tão fácil quanto parece.
Você pode descarregar drivers de filtro usando o comando fltmc unload
seguido pelo nome do driver de filtro.
Mas se você tentar o comando acima, logo descobrirá que não funciona. Não é possível descarregar este driver de filtro porque presumivelmente o desenvolvedor não adicionou essa capacidade.

Se você precisar descarregar o driver de filtro PROCMON24, infelizmente, reiniciar é a única maneira de fazê-lo.
Stack Traces
Às vezes, eventos simples como ler uma chave de registro, abrir um arquivo ou chamar um endereço de rede não são suficientemente profundos. Você precisa cavar mais fundo e ver um histórico das chamadas de função reais da API do Windows que um processo está realizando. Você precisa olhar para o rastreamento de pilha.
A stack trace is the history of various functions called during various function calls when a process is running.
Com uma lista de eventos aparecendo no procmon, clique duas vezes em qualquer evento e clique na guia Pilha como mostrado abaixo. A guia Pilha representa as chamadas de função que o processo individual fez no momento em que o evento ocorreu.

O tópico de rastreamento de pilha poderia continuar por muito tempo. Se você quiser saber mais sobre como entender a pilha de chamadas de um processo, confira o artigo Obtendo rastreamentos de pilha melhores no Monitor de Processos
Alterando a Altitude do Procmon (Capturando Eventos de Nível Inferior)
Como mencionado anteriormente, o procmon usa um driver de filtro para capturar eventos. Mesmo que pareça que o procmon captura todos os eventos do Windows (há muitos eventos que aparecem na janela do procmon!), ele não o faz. Procmon apenas captura eventos que seu driver de filtro conhece ou a altitude em que seu driver de filtro está.
Se, por exemplo, você precisar registrar atividades de antivírus, armazenamento de baixo nível e outros eventos de hardware de nível inferior, será necessário alterar a altitude do driver de filtro PROCMON24 para ser menor do que os outros.
Para fazer isso:
- Certifique-se de que o Procmon está fechado.
2. Encontre a altitude mais baixa dos drivers de filtro atualmente carregados com o comando fltmc
.
3. Altere o valor do registro Altitude sob a chave do registro HKLM\System\CurrentControlSet\Services\PROCMON24\Instances\Process Monitor 24 Instance para 100 a menos que o valor de altitude mais baixo (para ver todos os eventos).
Dependendo da versão do procmon que você tem instalada, pode mudar a localização da chave do registro. Este tutorial está usando o Procmon 2.4.
Você pode abrir uma sessão elevada do PowerShell e executar o trecho de código abaixo para alterar rapidamente o valor.
Quanto mais baixa você definir a altitude, mais eventos terá que gerenciar. Não defina a altitude menor do que você precisa.
4. Negue os direitos de Excluir e Definir Valor para Todos na chave Process Monitor 24 Instance. Quando o Procmon rodar novamente, ele tentará definir o valor Altitude
de volta para o padrão. Você pode alterar essas permissões através do utilitário regedit ou apenas executar o trecho de código do PowerShell abaixo.
5. Descarregue o driver de filtro PROCMON24 reiniciando o Windows.
6. Inicie o Procmon.
7. Abra um console do PowerShell ou prompt de comando e execute fltmc filters
. Agora você deve ver o driver de filtro do Procmon na nova altitude.

Você pode agora capturar o que precisar. Se você diminuir a Altitude
do procmon para o mínimo que pode ir, esteja preparado para o evento monção!
Exemplos do Mundo Real
Agora você deve ter uma boa compreensão do que o procmon pode fazer e como ele pode ajudá-lo a rastrear eventos do Windows. Vamos agora aplicar esse conhecimento e cobrir alguns casos de uso comuns onde você pode precisar desse tipo de know-how.
Encontrando o que está deletando um arquivo
Se você tem um arquivo em sua máquina Windows que continua sendo removido por algum motivo desconhecido e deseja rastreá-lo, o procmon pode ajudar (e é bastante fácil).
Talvez você tenha aberto o procmon e tentado definir um arquivo de evento chamado Delete ou Remove arquivo mas, para sua consternação, tal operação não existe. Em vez disso, para encontrar eventos de remoção de arquivos, você deve filtrar ambos os eventos com uma Operação
de:
SetDispositionInformationFile
SetDispositionInformationEx
Se o seu sistema estiver removendo muitos arquivos, você também vai querer limitar os eventos de exclusão de arquivos para o nome do arquivo ou caminho usando o filtro Caminho
também.
Rastreando Problemas com Arquivos Bloqueados
Já estivemos todos lá; você tenta mover ou remover um arquivo e ele está bloqueado por algum outro processo. Às vezes, se você está tentando desinstalar um aplicativo, por exemplo, nunca saberá se aquele erro aleatório que vê tem algo a ver com um arquivo bloqueado em primeiro lugar!
Para descobrir quando o Windows tenta remover ou modificar um arquivo bloqueado, use o conjunto de filtros abaixo.
Resolução de Problemas de Aplicações que Requerem Direitos de Administrador
Você está trabalhando com uma aplicação que, de acordo com a documentação, deveria funcionar, mas não funciona? Todos nós já passamos por isso. Às vezes, algum processo que a aplicação inicia requer privilégios elevados, mas não informa onde ou como. Você pode iniciar o procmon para ajudar.
Uma maneira de rastrear processos sendo negados devido a permissões elevadas necessárias é filtrar o Resultado de um evento.
Sempre que ocorrer um evento que seja negado devido à falta de direitos elevados, você geralmente verá um resultado de ACESSO NEGADO
. Sabendo disso, você pode facilmente construir um filtro simples mostrando todos os eventos com um Resultado de ACESSO NEGADO
, conforme mostrado abaixo.
A partir daqui, você pode adicionar mais filtros como caminho de registro ou pasta com o atributo Caminho também.
Encontrando o Processo Acessando um Endereço IP
Talvez você tenha algum comportamento de rede estranho com Wireshark e precise descobrir qual processo está iniciando essa comunicação. Inicie o procon e adicione o seguinte conjunto de regras de filtro.
Essas regras de filtro limitam os eventos apenas ao tráfego de rede iniciado localmente com um destino de um único endereço IP.
Resolução de Problemas de Inicialização Lenta
Às vezes, o Windows demora para iniciar. Essa lentidão pode ser causada por muitos componentes diferentes do Windows, aplicativos instalados e assim por diante. Usando a capacidade de log de inicialização do procmon, você pode rastrear e corrigir o problema.
- Ativar o registro de inicialização. Você pode descobrir como fazer isso na seção Capturar Eventos de Tempo de Inicialização acima.
2. Na caixa de diálogo Ativar Registro de Inicialização, certifique-se de marcar a caixa de seleção Gerar eventos de perfil de thread. O botão de opção A cada segundo deve ser suficiente.

3. Após reiniciar, abra o procmon, clique com o botão direito em qualquer coluna e escolha Selecionar Colunas.
4. Na caixa Seleção de Coluna do Monitor de Processos, marque Duração. Depois de fazer isso, você poderá ver quanto tempo cada evento levou para ser executado.

5. Agora você pode criar uma regra de filtro em Duração para um número de segundos que você considera adequado. A regra de filtro abaixo mostrará apenas eventos que levaram mais de cinco segundos para serem concluídos.

6. Por fim, outra maneira útil de investigar esses eventos lentos é usando a Árvore de Processos do procmon. A Árvore de Processos mostra as relações entre processos pai e filho e contém o horário de início e término de cada processo. Para encontrá-la, clique em Ferramentas —> Árvore de Processos.

7. Uma vez na Árvore de Processos, agora dê uma olhada na coluna Tempo de Vida, que mostra em um formato gráfico o tempo que cada processo levou. Você também pode observar intervalos de tempo comparando as colunas Hora de Início e Hora de Término nesta visualização.

Resolução de Problemas em Aplicações App-V
Muitas organizações utilizam o serviço Microsoft App-V para virtualizar e implantar aplicativos para os usuários finais. Se você utiliza o App-V, há um interruptor útil (e não documentado) no Procmon que você precisa conhecer, chamado /externalcapture
.
Ao usar .\procmon.exe /ExternalCapture
, geralmente se captura mais atividade no registro relacionada a aplicativos do App-V. Experimente este interruptor se não conseguir encontrar o que procura ao solucionar problemas com aplicativos do App-V!
O interruptor /HookRegistry supostamente serve ao mesmo propósito que /ExternalCapture, mas não funciona mais em máquinas de 64 bits.
Conclusão
Bem, aqui está; um guia abrangente sobre tudo relacionado ao Procmon! Embora você tenha aprendido muito sobre o Procmon, sempre há mais gemas a descobrir com esta útil ferramenta.
Se desejar sugerir atualizações ou alterações a este Guia Definitivo, entre em contato comigo no Twitter e me avise!