Procmon. O infame utilitário do Windows Sysinternals para rastrear todos os tipos de atividades do Windows. Conhecido por sua capacidade de rastrear instaladores de software mal-intencionado fazendo alterações desconhecidas nas chaves do registro ou talvez inspecionando os rastros de um vírus.
Se você precisa inspecionar o registro do Windows, o sistema de arquivos, o processo ou a atividade de 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 todos os tipos de atividades.
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 Windows 3.1), você precisará do seguinte:
- A Windows Vista or Windows Server 2008 or higher machine (x86 or x64)
É isso aí! Você vai baixar e instalar o procmon nas seções seguintes. O Guia utilizará a versão 3.6 do procmon em uma máquina Windows 10 Build 1909 x64.
Baixando e Executando o Procmon
Para começar, você precisará executar o procmon em sua máquina Windows. Você pode obtê-lo de duas maneiras diferentes; através do método de download tradicional ou do que o Windows Sysinternals chama de Sysinternals ao vivo.
Da Maneira Antiga
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 do 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 contrato 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 EXE que lançará a instância correta do procmon (x86 ou x64).
- Procmon64.exe – O binário procmon x64.
- Procmon64a.exe – O binário procmon x64 alpha.
Agora execute o procmon invocando o arquivo ~\ProcessMonitor\procmon.exe.
Procmon só é executado com permissões elevadas, então você será solicitado a aceitar isso se tiver o UAC habilitado 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á uma pasta como qualquer compartilhamento de rede contendo todos os arquivos do Sysinternals, incluindo o procmon.

Role para baixo até encontrar procmon, clique duas vezes e pronto, você está executando o procmon!
Personalizando o Comportamento de Inicialização 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 quiser iniciar o procmon minimizado, use 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 seja menos provável 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 e quiser executar o procmon como um processo de 32 bits ou ler um arquivo de log (mais sobre isso depois) gerado a partir de uma máquina de 32 bits, use o switch /Run32
.
O Procmon tem outros switches de linha de comando para personalizar o comportamento, mas você aprenderá sobre isso nas seções seguintes.
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! Você pode ver abaixo uma captura típica do Procmon em andamento.

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
.
Como você pode ver 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 momento 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 abriu um arquivo, alterou um valor de chave de 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á numerosos valores para indicar o resultado do evento. Este valor pode ser tão simples como SUCESSO ou específico para o evento como REPARSE, 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 você 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 a uma caixa de diálogo onde pode personalizar as colunas visíveis.

No painel de eventos, 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 completo sobre o processo de captura. Você pode desativar todo o processo de captura ou desativar a captura por classe de evento.
No menu superior, você verá um ícone de lupa (abaixo). Se a lupa tiver um X vermelho sobre ela, isso significa que a captura está desativada. Caso contrário, a captura está ativada.

Não deixe o procmon capturando eventos por mais tempo do que você precisa. Ele usa memória virtual para armazenar todos esses eventos e se você não tiver cuidado, pode acabar travando o Windows! Você pode alterar esse comportamento como 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 ícones iguais sendo exibidos na coluna Operação. Ao clicar nesses botões, você pode habilitar e desabilitar classes de eventos 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 aplicará 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 essa 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, sem dúvida, você 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 evento inteiras, mas você pode ficar muito mais granular.
Existem várias maneiras de interagir com os filtros de evento. 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ê. No item de menu Filtro, clique em Filtro…. Você verá uma caixa de 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 fazê-lo iniciando o Procmon com o comando
/Quiet
.
Você deve ver que sem criar seus próprios filtros, o Procmon também está usando um conjunto integrado de regras de filtro. Se você rolar para baixo na caixa de 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 em cada regra.
Esses filtros são aplicados porque geralmente você não precisará ver os eventos que esses filtros excluem. Mas, se quiser 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 Eventos
Na caixa de Filtro do Process Monitor:
- Clique na lista suspensa mais à esquerda. Esta lista mostra todas as diferentes categorias de eventos nas quais você pode filtrar. Você pode ver abaixo que há várias opções!
Cada item que você vê nesta lista corresponde a uma coluna exibida na tela principal, como mostrado abaixo. Para o propósito deste artigo, escolha Nome do Processo.

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

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

4. Certifique-se de ter escolhido Incluir já que você apenas deseja ver os eventos que correspondem a este critério. E então clique no botão Adicionar para adicionar a regra ao seu filtro atual. Você pode ver abaixo que a regra de Inclusão é mostrada como uma marca de seleção verde.
5. Por fim, como você deseja todos os eventos onde explorer.exe consulta uma chave de registro, certifique-se de incluir também a operação RegQueryKey. Quando terminar, você deve ver ambas as regras adicionadas.

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

Removendo Regras de Filtro de Evento
Você também pode facilmente remover e alterar as regras de filtro.
- Clique no ícone de Filtro no topo da janela principal para abrir a caixa de 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 você aplicar um filtro, saia do Procmon e inicie-o novamente; esse filtro será aplicado novamente. Se você deseja garantir que nenhum filtro seja aplicado ao iniciar o Procmon, você pode invocar o Procmon com o interruptor
/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 deste menu; não é necessário ir para a caixa de Filtro do Monitor de Processos de forma alguma!

Para remover regras de filtro criadas através do menu de clique direito, você ainda terá que ir para a caixa de 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 você terá conjuntos de regras de filtro para várias ocasiões. Usando os recursos de salvamento e organização de filtro do Procmon, você pode gerenciar e salvar quantos desses conjuntos desejar.
Vamos dizer que você tenha 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 conforme mostrado abaixo.

Uma vez que o filtro é 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.

Importação e Exportação de Filtros
Se você espera carregar o procmon em outro computador e manter todos os filtros salvos, está sem sorte. O Procmon não possui um serviço de nuvem para sincronizar filtros. Mas, você pode exportar filtros manualmente e importá-los posteriormente.
Para exportar filtros do Procmon:
- Vá para a caixa Organizar Filtros.
- Clique no filtro que você já salvou e gostaria de 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 Organizar Filtros.
- Clique no botão Importar.
- Encontre o filtro que gostaria de importar e clique em OK.
Você pode ver uma demonstração visual desses passos abaixo.

Importando e Exportando Configurações do Procmon
Brazilian Portuguese Translation:
usuário: Como você aprendeu acima, é possível exportar e importar filtros do ProcMon por meio de arquivos PMF. No entanto, os filtros são apenas um componente que compõe uma instância do ProcMon. Você pode personalizar as colunas, alterar a localização de armazenamento (mais sobre isso depois) e mais. Não seria bom salvar todas essas configurações também? Sim, é possível!
Para salvar toda a configuração do ProcMon, clique em Arquivo —> Exportar Configuração e escolha um local para salvar o arquivo PMC (configuração do ProcMon).

Depois de salvar, você pode fechar o ProcMon no mesmo computador (ou até mesmo em outro), abrir o ProcMon e clicar em Arquivo —> Importar Configuração, onde o ProcMon aplicará todos os mesmos filtros e outras configurações exatamente como foram exportadas.
Você também pode carregar configurações salvas (incluindo filtros) via linha de comando usando o switch /LoadConfig seguido do caminho do arquivo, por exemplo, ./procmon.exe /LoadConfig C:\ProcmonConfigs\file_deletion.pmc.
Destacando Eventos e Convertendo para Filtros
Talvez você precise tornar certos eventos mais fáceis de identificar, mas não queira necessariamente remover nenhum evento da visualização com um filtro. Nesse caso, você pode usar destaques. Os destaques permitem criar conjuntos de regras semelhantes aos 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 gostaria de destacar na lista. Você pode criar uma regra de destaque da seguinte maneira:
- Clique com o botão direito no evento que você deseja destacar um atributo.
- Clique em Destaque 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 azul claro.
- Uma vez que a regra de destaque é criada, você pode então ir para a caixa de Realce do Monitor de Processos clicando em Filtrar -> Realce. Você verá a regra de destaque criada lá.
- A partir da caixa de Realce do Monitor de Processos, você pode adicionar e remover regras assim como pode com um filtro.
- Se você criou algumas regras de destaque e gostaria de transformá-las em um filtro, você pode fazer isso clicando no botão Fazer Filtro na caixa de Realce do Monitor de Processos.
Você pode ver uma demonstração visual dessas etapas abaixo.

Exportando e Abrindo Eventos para/de 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 você precise salvar esses eventos para investigação posterior ou carregá-los em outro computador? Nesse caso, você precisa salvar os eventos em um arquivo de log (PML).
Uma maneira de salvar esses eventos úteis é clicar em Arquivo —> Salvar. Essa ação abrirá a caixa de diálogo Salvar em arquivo abaixo, onde você terá algumas opções.
Eventos a serem salvos:
- Todos os eventos – Esta opção é exatamente como parece. Ela salvará todos os eventos capturados pelo Procmon, independentemente de você ter aplicado ou não um filtro de evento a um arquivo.
- Eventos exibidos usando filtro atual – Esta opção não salva todos os eventos capturados, mas apenas aqueles que passaram pelos filtros de evento atualmente ativos.
- Eventos destacados – Esta opção exporta apenas para o log 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) – Salve todos os eventos em um arquivo CSV.
- Linguagem de Marcação Extensível (XML) – Salve todos os eventos em um arquivo XML. Esse formato também permite salvar rastreamentos 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 em seu computador local ou não, simplesmente indo para Arquivo —> Abrir e escolhendo o arquivo PML.
Você pode abrir logs a partir da linha de comando usando o switch /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 de antemão 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 paginação é 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 paginação pode ficar fora de controle.
Ao usar a memória virtual como local de armazenamento, você pode descobrir quanto espaço resta para o procmon usar clicando em Arquivo —> Arquivos de Backing.
O que fazer? Alterar o local de armazenamento.
Armazenamento de Eventos no Disco
Você pode alterar onde o procmon armazena eventos, do arquivo de paginação para o disco, fazendo o seguinte:
- Interrompa a captura se estiver em execução no momento.
2. Clique em Arquivo —> Arquivos de Backup. Você verá um resumo dos eventos armazenados e seu 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 nomeado:, clique no botão de reticências e defina um local para o arquivo.
Tente usar um volume de disco diferente daquele em 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 iniciando-o a partir da linha de comando e usando a opção
/BackingFile
. Se desejar voltar a usar o arquivo de página, use a opção/PagingFile
.
Convertendo Arquivos de Log
O Procmon pode salvar arquivos de log em três formatos diferentes; PML, CSV e XML. Talvez você tenha salvo 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 no formato CSV. Você pode fazer isso abrindo primeiro o arquivo de log com a opção /OpenLog
e depois usando uma opção /Save*
para salvar.
O Procmon tem 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 registro capture.pml para capture.csv:
Lembre-se das opções de rastreamento de pilha e resolução de símbolos na caixa de diálogo Salvar no Arquivo acima? Você também pode habilitar essas opções usando /SaveAs1
e /SaveAs2
.
Você só pode salvar rastreamentos de pilha e informações de símbolos em formato XML.
Converter o registro capture.pml para capture.xml incluindo informações de pilha:
Converter o registro 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ê certamente verá um indicador de progresso conforme 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 funcionamento. 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 na inicialização ou talvez malware que decide ser executado imediatamente quando o Windows é iniciado. O Procmon possui um recurso chamado Log de Inicialização que você pode habilitar para capturar essas informações.
Para habilitar o log de inicialização, clique em Opções —> Habilitar Log de Inicialização no menu conforme mostrado abaixo.

Depois de clicar em Habilitar Log de Inicialização, você verá uma caixa de diálogo solicitando 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.

Depois de clicar em OK, o procmon habilitará o registro de inicialização, o que instrui o driver de filtro (mais sobre isso depois) a esperar pelo próximo reinício do Windows. Quando você reiniciar o Windows, o procmon começará a capturar eventos de processo como se você o 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 de volta, 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.

À medida que o procmon converte os dados, você verá uma barra de progresso como abaixo.

Não se esqueça de abrir o procmon novamente após um reinício! O procmon começará a capturar eventos assim que o Windows for iniciado em C:\Windows\procmon.pmb. Ele continuará a fazer isso até que você o desligue abrindo o procmon novamente.
Executando o Procmon Remotamente
Embora o procmon só seja executado localmente em uma máquina Windows, você pode invocar o procmon para ser executado remotamente via psexec ou o 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 seguintes etapas:
- 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 captura. Reproduza o problema que está tentando capturar.
5. Pare o procmon no computador remoto usando o interruptor /Terminate.
6. Aguarde o procmon ser encerrado. 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
Agora, você tem o arquivo de log executado remotamente em seu computador local!
Se você deseja um script 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.
Descarte Eventos Filtrados
Quando o procmon está executando uma captura, ele captura todos os eventos. Você pode criar e aplicar filtros de evento, mas esses filtros apenas ocultam os eventos na tela; eles não impedem que o procmon os capture.
Se você pretende realizar capturas de procmon de longa duração, é sempre uma boa ideia escolher Drop Filtered Events no menu Filter como mostrado abaixo.

Assim que você selecionar o item Drop Filtered Events, o procmon imediatamente começa a descartar todos os eventos filtrados. O Procmon não os exibe na tela nem os salva na memória virtual ou em um arquivo de log. Descartar eventos indesejados completamente ajuda a conservar recursos.
Tópicos Avançados
Ainda está ávido por mais informações sobre procmon e como usá-lo? Vamos mergulhar em alguns tópicos avançados! Esses tópicos são aqueles que provavelmente você não precisará saber com muita frequência. Esses tópicos giram em torno de recursos do procmon mais técnicos, mas essas informações podem ser úteis ao solucionar problemas com o procmon.
Drivers de Filtro
Para capturar eventos, o procmon registra e usa um driver de filtro através do Windows Filter Manager (FltDrv). Este driver de filtro chamado PROCMON24 é instalado quando você inicia uma captura. Às vezes, esse driver de filtro pode entrar em conflito com outras aplicações.
Depois de iniciar o procmon, abra um console do PowerShell elevado ou prompt de comando e execute fltmc filters
. O utilitário fltmc
lista, carrega e descarrega drivers de filtro. Quando você executa isso, verá o driver de filtro PROCMON24 carregado como mostrado abaixo.
Observe que a Altitude do PROCMON24 é 385200 por padrão, com outros filtros tendo um número menor. A altitude do filtro do driver representa o nível no qual um driver de filtro pode “ver” eventos. Por exemplo, eventos acontecendo no nível wcifs, luafv ou Wof, o procmon será incapaz de ver. 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 o comando
/NoConnection
para evitar que o procmon se conecte ao driver de filtro.
Descarregando o Driver de Filtro PROCMON24
Há alguns casos em que o driver de filtro PROCMON24 pode entrar em conflito com vários dispositivos de hardware e você precisará descarregá-lo. Mas, essa situação pode não ser tão simples 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. Você não pode descarregar este driver de filtro porque presumivelmente o desenvolvedor não adicionou essa capacidade.

Se você precisa descarregar o driver de filtro PROCMON24, infelizmente, reiniciar é a única maneira de fazê-lo.
Rastreamentos de Pilha
Às vezes, eventos simples como a leitura de uma chave de registro, a abertura de um arquivo ou a chamada de um endereço de rede não são suficientemente profundos. Você precisa cavar mais fundo e ver um histórico das chamadas reais de função da API do Windows que um processo está fazendo. 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 dos rastreamentos de pilha poderia continuar por muito tempo. Se você quiser aprender 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 em Níveis Inferiores)
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 faz. O Procmon só captura eventos que o seu driver de filtro conhece ou a altitude em que seu driver de filtro está.
Se, por exemplo, você precisa registrar a atividade do antivírus, o armazenamento de baixo nível e outros eventos de hardware em níveis inferiores, você deve alterar a altitude do driver de filtro PROCMON24 para ser mais baixa do que os outros.
Para fazer isso:
- Certifique-se de que o Procmon esteja fechado.
2. Encontre a menor altitude 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 unidades a menos do que o valor de altitude mais baixo (para ver todos os eventos).
Dependendo da versão do Procmon que você tem instalada, a localização da chave do registro pode mudar. 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 for a altitude que você definir, mais eventos terá que gerenciar. Não defina a altitude mais baixa do que você precisa.
4. Negue os direitos de Excluir e Definir Valor para Todos na chave Process Monitor 24 Instance. Quando o procmon for executado 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 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 tudo o que você precisa. Se você diminuir a Altitude
do procmon para o mínimo que pode ir, esteja pronto 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 com Windows que continua sendo removido por algum motivo desconhecido e deseja rastreá-lo, o procmon pode ajudar (e é bem 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 tanto 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 arquivo ao nome do arquivo ou caminho usando o filtro Caminho
também.
Rastreando Problemas de Arquivos Bloqueados
Todos nós já passamos por isso; 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, você nunca saberá se aquele erro aleatório que você 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 já estivemos lá. Às vezes, algum processo que a aplicação inicia requer privilégios elevados, mas não informa onde ou como. Você pode abrir o procmon para ajudar.
Uma maneira de rastrear os processos que são negados devido à necessidade de permissões elevadas é 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
, como mostrado abaixo.
A partir daqui, você pode adicionar mais filtros como registro ou caminho de 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 inicializar. 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.
- Ative 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 Log 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 Vida Útil que mostra de forma gráfica o tempo que cada processo levou. Você também pode observar os 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 usam o serviço Microsoft App-V para virtualizar e implantar aplicativos para usuários finais. Se você usa o App-V, há um (e não documentado) switch do procmon que você precisa conhecer chamado /externalcapture
.
Usar .\procmon.exe /ExternalCapture
tende a capturar mais atividades de registro em torno de aplicativos do App-V. Experimente este switch se você não conseguir encontrar o que está procurando ao solucionar problemas com aplicativos do App-V!
O switch /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 extenso sobre tudo sobre o procmon! Embora você tenha aprendido muito sobre o procmon, sempre há mais tesouros a descobrir com este utilitário útil.
Se você quiser sugerir alguma atualização ou alteração neste Guia Definitivo, entre em contato comigo no Twitter e me avise!