Procmon. L’infamità utilità di Windows Sysinternals per rintracciare ogni tipo di attività di Windows. Conosciuta per la sua capacità di individuare installatori di software maligni che apportano modifiche sconosciute alle chiavi di registro o per ispezionare le tracce di un virus.
Se hai bisogno di ispezionare il registro di sistema di Windows, il file system, i processi o l’attività di rete e hai deciso di utilizzare procmon, questo articolo fa al caso tuo.
In questa Guida definitiva, imparerai tutto ciò che c’è da sapere sull’utilizzo dell’utilità procmon, dall’installazione, all’uso di base fino a vari casi d’uso che ti aiuteranno a rintracciare ogni tipo di attività.
Prerequisiti
Questa Guida definitiva si applicherà a quasi tutti i sistemi Windows, ma per completezza (e per evitare che tu provi ad eseguire procmon su un computer Windows 3.1), avrai bisogno dei seguenti elementi:
- A Windows Vista or Windows Server 2008 or higher machine (x86 or x64)
Ecco tutto! Scaricherai e installerai procmon nelle sezioni seguenti. La Guida utilizzerà la versione 3.6 di procmon su una macchina Windows 10 Build 1909 x64.
Scaricamento ed Esecuzione di Procmon
Per iniziare, avrai bisogno di procmon in esecuzione sul tuo computer Windows. Puoi ottenerlo in due modi diversi: tramite il tradizionale metodo di download o quello che Windows Sysinternals chiama Sysinternals live.
Il Metodo Vecchio Stile
Procmon non ha bisogno di essere installato; è un singolo file eseguibile. Puoi ottenerlo scaricando il file ZIP. Una volta scaricato, estrai il file ZIP con il tuo strumento preferito. Di seguito è riportato un frammento di codice PowerShell se lo hai salvato nella tua cartella home. Questo frammento di codice creerà una cartella in ~\ProcessMonitor con tutti i file necessari.
All’interno della cartella ~\ProcessMonitor vedrai cinque file:
- Eula.txt – L’accordo di licenza che dovrai accettare prima di eseguire procmon.
- procmon.chm – Il file di aiuto che contiene tutta la documentazione fornita.
- Procmon.exe – L’EXE principale che avvierà l’istanza corretta di procmon (x86 o x64).
- Procmon64.exe – Il binario procmon x64.
- Procmon64a.exe – Il binario procmon alpha 64.
Ora esegui procmon richiamando il file ~\ProcessMonitor\procmon.exe.
Procmon funziona solo con autorizzazioni elevate, quindi ti verrà chiesto di accettarlo se hai UAC abilitato quando lo esegui. C’è un modo per evitarlo che verrà trattato più avanti in questa guida.
Sysinternals Live
Se preferisci non scaricare un file EXE, puoi anche utilizzare la cartella Sysinternals Live. Per farlo, apri Esplora file e incolla \\live.sysinternals.com\tools. Vedrai quindi una cartella come una normale condivisione di rete contenente tutti i file di Sysinternals, tra cui procmon.

Scorri verso il basso finché trovi procmon, fai doppio clic e voilà, stai eseguendo procmon!
Personalizzazione del comportamento di avvio di Procmon
Per impostazione predefinita, procmon si avvia richiedendo di accettare un contratto di licenza per l’utente finale (EULA) e apre anche una finestra. Utilizzando la riga di comando, è possibile personalizzare questo comportamento predefinito.
Ad esempio, se desideri avviare procmon minimizzato, utilizza lo switch /Minimized
.
Forse stai eseguendo procmon su una nuova macchina e preferiresti non visualizzare il prompt dell’EULA. Puoi disabilitarlo all’avvio utilizzando lo switch /AcceptEula
.
Anche se meno probabile in questi giorni, ogni volta che avvii procmon, rileva se stai utilizzando un sistema operativo a 64 bit o 32 bit. Se sei su una macchina a 64 bit, avvierà un processo a 64 bit e viceversa. Se sei su una macchina a 64 bit e desideri eseguire procmon come processo a 32 bit o leggere un file di registro (ne parleremo più avanti) generato da una macchina a 32 bit, utilizza lo switch /Run32
.
Procmon ha altri switch di riga di comando per personalizzare il comportamento, ma ne parleremo nelle sezioni successive.
Introduzione a Procmon
Quando avvii procmon per la prima volta, potresti sentirti sopraffatto dalle opzioni. Non preoccuparti, imparerai tutto in questa guida! Di seguito puoi vedere un tipico esempio di cattura in corso con procmon.

Appena avvii procmon, inizia a catturare molti diversi tipi di eventi di Windows.
Se non vuoi che procmon inizi automaticamente a catturare eventi, puoi avviarlo da riga di comando eseguendo
procmon.exe /NoConnect
.
Come puoi vedere nello screenshot sopra, nella colonna Operazione, ci sono diverse icone che rappresentano diverse classi di eventi di Windows. Procmon cattura eventi da cinque diverse classi:
- Registro
- Sistema di file
- Rete
- Processi
- Eventi di profilazione
Ogni evento in tutte le classi è rappresentato in un unico pannello di lista con sette colonne:
- Ora del giorno – L’ora in cui si è verificato l’evento.
- Nome del processo – Il nome del processo che ha generato l’evento.
- PID – L’identificatore del processo.
- Operazione – Il tipo di evento, come ad esempio se il processo ha aperto un file, modificato un valore di chiave del registro, ecc.
- Percorso – Il percorso dell’oggetto con cui l’evento ha interagito, come ad esempio un percorso di file, un percorso di registro, ecc.
- Risultato – Questa colonna conterrà numerosi valori per indicare il risultato dell’evento. Questo valore può essere semplice come SUCCESSO o specifico dell’evento come RIELABORAZIONE, OVERFLOW BUFFER, NOME NON TROVATO, ecc.
- Dettaglio – Questa colonna contiene tutti i dettagli una volta che si individua un evento che si desidera visualizzare.
Se si preferisce non vedere una determinata colonna o si desidera vedere quali altre colonne sono disponibili, fare clic con il pulsante destro del mouse su qualsiasi intestazione di colonna e scegliere Seleziona colonne. Verrà visualizzata una finestra di dialogo in cui è possibile personalizzare le colonne visualizzabili.

Nella finestra degli eventi, fare doppio clic su un evento. È possibile trovare ulteriori dettagli sul processo e sull’evento stesso visualizzando le schede Evento, Processo e Stack.

Abilitazione e disabilitazione delle acquisizioni
Si ha il completo controllo sul processo di acquisizione. È possibile disabilitare l’intero processo di acquisizione o disabilitare l’acquisizione per classe di evento.
Nella barra dei menu superiore, si vedrà un’icona di una lente di ingrandimento (sotto). Se la lente di ingrandimento ha una X rossa sopra di essa, significa che l’acquisizione è disabilitata. In caso contrario, l’acquisizione è abilitata.

Non lasciare procmon a catturare eventi per più tempo del necessario. Utilizza memoria virtuale per archiviare tutti quegli eventi e se non si è attenti, si potrebbe finire per far bloccare Windows! È possibile modificare questo comportamento come si vedrà un po’ più avanti.
Se preferisci essere più selettivo, puoi anche controllare la cattura di ogni classe di evento. Nella barra dei menu, vedrai cinque icone uguali visualizzate nella colonna Operazione. Cliccando su questi pulsanti, puoi abilitare e disabilitare intere classi di eventi.

Passa il mouse su ciascuna icona per vedere che tipo di attività rappresenta ciascuna icona.
Vedrai che non appena clicchi su un’icona, Procmon applica un filtro di evento. A seconda di quanti eventi sono stati catturati finora, potresti vedere un popup come quello riportato di seguito.

Per impostazione predefinita, l’icona più a destra (il grafico nero e verde) non è abilitata. Se desideri abilitare questa classe di eventi quando Procmon si avvia, puoi invocare Procmon dalla riga di comando utilizzando
.\procmon.exe /Profiling
.
Puoi vedere il numero di eventi nella finestra guardando in basso. Come puoi vedere qui sotto, Procmon ha elaborato 84.334 eventi ma a causa del filtro di eventi applicato, sta mostrando solo 15.912 di quelli, ovvero il 18% di essi. Puoi anche vedere che questi eventi vengono archiviati nella memoria virtuale (ne parleremo più avanti).

Filtri di eventi
Per capire Procmon, senza dubbio devi capire il concetto di filtri di eventi. I filtri di eventi sono il modo in cui separi il segnale dal rumore. I filtri di eventi nascondono tutti gli eventi che non ti interessano. In precedenza, hai applicato filtri di eventi per intere classi di eventi, ma puoi ottenere un gran numero di dettagli in più.
Ci sono molteplici modi per interagire con i filtri degli eventi. Iniziamo con qualcosa di semplice. Fai clic sul menu Filtro in alto. Vedrai molte opzioni diverse per lavorare con i filtri.

Visualizzazione dei filtri
Di default, procmon crea un filtro per te. Nel menu Filtro, fai clic su Filtro…. Vedrai apparire una finestra di Filtro di Process Monitor con due sezioni; una per filtrare le regole del filtro e una per visualizzare tutte le regole che hai impostato. Puoi vedere un esempio di questo qui sotto.

Di default, procmon mostrerà i filtri sopra ogni volta che lo avvii. Se desideri nascondere questa finestra, puoi farlo avviando procmon con l’opzione
/Quiet
.
Dovresti notare che senza creare filtri personalizzati, procmon sta utilizzando anche un insieme predefinito di regole di filtro. Se scorri verso il basso nella finestra di Filtro di Process Monitor, vedrai molti tipi diversi di regole definite. Qui puoi visualizzare ogni categoria, operatore, valore e azione da applicare a ciascuna regola.
Questi filtri vengono applicati perché di solito non hai bisogno di visualizzare gli eventi esclusi da questi filtri. Ma se desideri vedere tutti gli eventi, puoi anche rimuovere tutti i filtri predefiniti o fare clic su Filtro —> Abilita output avanzato, come mostrato di seguito.

Ad esempio, vedrai alcune regole in alto che mostrano Nome Processo per il valore Colonna, è per Relazione, vari processi correlati a procmon per il valore della colonna Valore e un’azione Escludi. In parole semplici, queste regole indicano a procmon di non visualizzare (escludere) un processo con il nome di procmon.exe, ad esempio.
Gestione delle regole del filtro degli eventi
A seconda del tuo caso d’uso, avrai sicuramente bisogno di aggiungere le tue regole. Ci sono diversi modi per aggiungere regole.
Utilizzando la casella di filtraggio di Process Monitor
Nella sezione precedente, hai visto come appariva la casella di Filtro di Process Monitor e hai visualizzato tutte le regole. In questa casella, puoi anche creare, modificare ed eliminare regole.
Supponiamo che tu voglia vedere solo le volte in cui il processo explorer.exe ha interrogato una chiave di registro.
Aggiunta di filtri degli eventi
Nella casella Filtro di Process Monitor:
- Fai clic sulla lista a discesa più a sinistra. Questa lista mostra tutte le varie categorie di eventi su cui puoi filtrare. Come puoi vedere qui sotto, ce ne sono parecchie!
Ogni voce che vedi in questa lista corrisponde a una colonna visualizzata nella schermata principale come mostrato di seguito. Per l’obbiettivo di questo articolo, scegli Nome Processo.

2. Scegli una categoria, quindi scegli un operatore. Per impostazione predefinita, il menu a tendina sarà è, ma hai molte altre opzioni se fai clic sul menu a tendina. Questi operatori ti permettono di filtrare l’opzione scelta in molti modi diversi. Poiché stai cercando un processo che sia esattamente explorer.exe, scegli è.

3. Infine, seleziona il nome del processo come indicato di seguito. Noterai che poiché hai scelto Nome del processo come categoria, procmon mostra automaticamente tutti i processi attualmente in esecuzione tra cui scegliere.

4. Assicurati di aver scelto Includi poiché vuoi vedere solo gli eventi che corrispondono a questo criterio. Quindi clicca sul pulsante Aggiungi per aggiungere la regola al filtro corrente. Come puoi vedere qui sotto, la regola di inclusione viene mostrata come un segno di spunta verde.
5. Infine, poiché desideri tutti gli eventi in cui explorer.exe interroga una chiave di registro, assicurati di includere anche l’operazione RegQueryKey. Quando hai finito, dovresti vedere entrambe le regole aggiunte.

6. Clicca su OK e vedrai quindi la finestra principale rimuovere tutti gli eventi che non corrispondono alle regole di filtro che hai appena definito.

Rimuovere le regole di filtro degli eventi
Puoi anche facilmente rimuovere e modificare le regole di filtro.
- Clicca sull’icona del filtro in alto nella finestra principale per aprire la casella di dialogo Filtro di Process Monitor.

2. Evidenzia entrambe le regole di filtro create in precedenza, clicca sul pulsante Rimuovi come mostrato di seguito e clicca su OK. Questa azione rimuoverà entrambe le regole personalizzate aggiunte in precedenza.

Puoi anche cliccare sul pulsante Ripristina per rimuovere automaticamente tutte le regole personalizzate di filtro.
Ogni volta che applichi un filtro, chiudi procmon e riavvialo, quel filtro verrà applicato di nuovo. Se vuoi assicurarti che nessun filtro venga applicato quando avvii procmon, puoi invocare procmon con l’opzione
/NoFilter
.
Aggiunta di regole di filtro con clic destro
Puoi anche aggiungere regole di filtro tramite un menu a comparsa se fai clic destro su un processo. Come puoi vedere di seguito, puoi creare qualsiasi tipo di regola direttamente da questo menu; non è necessario andare alla casella Filtro di Process Monitor affatto!

Per rimuovere le regole di filtro create tramite il menu a comparsa, dovrai comunque andare alla casella Filtro di Process Monitor per rimuoverle.
Salvataggio e gestione dei filtri personalizzati
Se sei un utente esperto di procmon, arriverà probabilmente un momento in cui avrai set di regole di filtro per varie occasioni. Utilizzando le funzionalità di salvataggio e organizzazione dei filtri di procmon, puoi gestire e salvare quanti set di filtri desideri.
Supponiamo che tu abbia un gruppo di filtri personalizzati definiti e desideri salvarli per usarli nuovamente in futuro. Puoi salvare questo filtro andando su Filtro, scegliendo Salva filtro e fornendo un nome come mostrato di seguito.

Una volta salvato il filtro, puoi andare su Filtro, fare clic su Organizza filtri dove vedrai tutti i filtri che hai salvato. Da qui, puoi fare clic su un filtro, cliccare su OK e il tuo filtro salvato verrà applicato alla finestra corrente.

Puoi anche caricare un filtro salvato passando il cursore su Carica filtro nel menu a tendina Filtro e scegliendo il filtro salvato dalla lista a destra.

Importazione ed esportazione di filtri
Se prevedi di caricare Procmon su un altro computer e mantenere tutti i filtri salvati, sei sfortunato. Procmon non dispone di un servizio cloud per sincronizzare i filtri. Tuttavia, puoi esportare manualmente i filtri e importarli successivamente.
Per esportare i filtri di procmon:
- Vai alla casella Organizza filtri.
- Fai clic sul filtro che hai già salvato e che desideri esportare.
- Fai clic sul pulsante Esporta.
- Fornisci un nome, scegli un percorso e fai clic su OK. Vedrai che tutti i filtri di procmon vengono salvati con l’estensione PMF.
Per importare i filtri di procmon:
- Vai alla casella Organizza filtri.
- Fai clic sul pulsante Importa.
- Trova il filtro che desideri importare e fai clic su OK.
Puoi vedere una guida visuale di questi passaggi di seguito.

Importazione ed esportazione di configurazioni Procmon
Come hai appena imparato, è possibile esportare e importare filtri Procmon tramite file PMF. Ma i filtri sono solo uno dei componenti che compongono un’istanza di Procmon. È possibile personalizzare le colonne, modificare la posizione di archiviazione (ne parleremo più avanti) e altro ancora. Non sarebbe bello salvare anche tutte queste impostazioni? Puoi farlo!
Per salvare l’intera configurazione di Procmon, fai clic su File -> Esporta configurazione quindi scegli una posizione in cui desideri salvare il file PMC (configurazione Procmon).

Una volta salvato, puoi quindi chiudere Procmon sullo stesso computer (o anche su un computer diverso), aprire Procmon e fare clic su File -> Importa configurazione dove Procmon applicherà tutti i filtri e le altre impostazioni proprio come sono state esportate.
Puoi anche caricare configurazioni salvate (incluse i filtri) tramite la riga di comando utilizzando l’opzione /LoadConfig seguita dal percorso del file ad esempio ./procmon.exe /LoadConfig C:\ProcmonConfigs\file_deletion.pmc.
Evidenziazione degli eventi e conversione in filtri
Forse hai bisogno di rendere più facili da individuare determinati eventi ma non vuoi necessariamente rimuovere gli eventi dalla vista con un filtro. In tal caso, puoi utilizzare le evidenziazioni. Le evidenziazioni consentono di creare insiemi di regole simili ai filtri ma anziché nascondere gli eventi, viene cambiato il colore di sfondo degli eventi.
Forse vedi un processo nell’elenco degli eventi chiamato ctfmon.exe che desideri evidenziare nell’elenco. Puoi creare una regola di evidenziazione:
- Fai clic con il pulsante destro sull’evento di cui desideri evidenziare un attributo.
- Clicca su Evidenzia e scegli un attributo di quell’evento da evidenziare. In questo esempio, sceglieresti Nome del processo. Vedrai quindi il colore di sfondo cambiare in un colore azzurro chiaro.
- Una volta creata la regola di evidenziazione, puoi andare alla casella Evidenziazione del monitor del processo cliccando su Filtro -> Evidenzia. Vedrai la regola di evidenziazione creata lì.
- Dalla casella Evidenziazione del monitor del processo, puoi aggiungere e rimuovere regole proprio come faresti con un filtro.
- Se hai creato delle regole di evidenziazione e desideri trasformarle in un filtro, puoi farlo cliccando sul pulsante Crea filtro nella casella Evidenziazione del monitor del processo.
Puoi vedere una guida visuale di questi passaggi qui sotto.

Esportazione e apertura degli eventi da/in file di log
Perché procmon mostri gli eventi in una finestra, devono essere archiviati da qualche parte. Per impostazione predefinita, gli eventi vengono archiviati nella memoria virtuale, più precisamente nel tuo file di paging.

A seconda di quanto hai definito la dimensione del tuo file di paging (e del limite di commit del sistema), dipende da quanti eventi procmon può archiviare.
Procmon è in grado di catturare fino a 199 milioni di eventi.
Salvataggio degli eventi in un file di log.
Forse hai bisogno di salvare questi eventi per un’indagine successiva o forse caricarli su un altro computer? In tal caso, devi salvare gli eventi su un file di registro (PML).
Un modo per salvare questi utili eventi è fare clic su File -> Salva. Questa azione apre la finestra di dialogo Salva su file qui sotto, dove ti vengono presentate alcune opzioni.
Eventi da salvare:
- Tutti gli eventi – Questa opzione è esattamente come sembra. Salverà tutti gli eventi catturati da procmon, indipendentemente dal fatto che tu abbia applicato o meno un filtro degli eventi a un file.
- Eventi visualizzati utilizzando il filtro corrente – Questa opzione non salva tutti gli eventi catturati, ma solo quelli che hanno superato i filtri degli eventi attualmente attivi.
- Eventi evidenziati – Questa opzione esporta nel registro solo gli eventi che hai attualmente evidenziato.
Formato:
- Formato nativo di Process Monitor (PML) – Il formato predefinito per salvare tutti gli eventi (PML).
- Valori separati da virgola (CSV) – Salva tutti gli eventi in un file CSV.
- Linguaggio di markup estensibile (XML) – Salva tutti gli eventi in un file XML. Questo formato ti permette anche di salvare tracce di tracciamento (ne parleremo più avanti) e risolverà i simboli dello stack.

Fai clic su OK e procmon trasferirà tutti gli eventi attualmente catturati che corrispondono ai tuoi criteri nel file che hai scelto.
Apertura di registri eventi salvati.
Hai catturato migliaia di eventi su un computer, salvato quella sessione di cattura in un file PML e l’hai copiata su un altro computer per l’indagine. E ora? Devi aprirlo.
Puoi aprire qualsiasi file PML, indipendentemente se l’hai catturato sul tuo computer locale o meno, semplicemente andando su File -> Apri e scegliendo il file PML.
Puoi aprire i log dalla riga di comando utilizzando lo switch /OpenLog ad esempio procmon.exe /OpenLog C:\MyLogFile.pml.
Registrazione automatica degli eventi
Nella sezione precedente hai imparato come esportare gli eventi in un log dopo averli catturati. Ma cosa succede se sai in anticipo che vuoi gli eventi in un file PML, XML o CSV? Puoi fare in modo che procmon catturi automaticamente gli eventi in uno di quei formati di file di log.
Inoltre, memorizzare gli eventi nel file di paging va bene se ti trovi in una semplice sessione di risoluzione dei problemi ad hoc che può durare meno di un’ora. Questo metodo ha però alcuni svantaggi.
- Ogni volta che chiudi procmon, gli eventi vengono persi.
- Come già detto, la dimensione del file di paging può crescere in modo incontrollato.
Quando utilizzi la memoria virtuale come posizione di archiviazione, puoi scoprire quanto spazio rimane a procmon per l’utilizzo facendo clic su File -> File di paging.
Cosa fare? Cambia la posizione di archiviazione.
Archiviazione degli eventi su disco
Puoi cambiare la posizione in cui procmon archivia gli eventi, dal file di paging al disco, facendo:
- Interrompi la cattura se è in corso.
2. Fare clic su File —> File di backup. Vedrai quindi un riepilogo degli eventi archiviati e delle dimensioni, insieme a un’opzione per cambiare la posizione di archiviazione.

3. Per cambiare la posizione di archiviazione su un file, fare clic sul campo Usa file denominato:, fare clic sul pulsante dei puntini di sospensione e definire una posizione di file.
Prova a utilizzare un volume disco diverso rispetto a quello su cui è in esecuzione procmon per ottenere le migliori prestazioni.
È possibile forzare procmon a utilizzare un file come posizione di archiviazione anche avviandolo dalla riga di comando e utilizzando l’opzione
/BackingFile
. Se si desidera tornare a utilizzare il file di paging, utilizzare l’opzione/PagingFile
.
Conversione dei file di registro
Procmon può salvare i file di registro in tre diversi formati: PML, CSV e XML. Forse hai salvato un file di registro come PML e hai bisogno di analizzare gli eventi con uno script o un altro strumento. In tal caso, è possibile convertire quel file di registro PML in XML o CSV dalla riga di comando.
Supponiamo di avere un file di registro PML in C:\capture.pml. Si desidera convertire questo file di registro in XML e uno in formato CSV. È possibile farlo aprendo prima il file di registro con l’opzione /OpenLog
e poi utilizzando un’opzione /Save*
per salvarlo.
Procmon ha un parametro standard /SaveAs
che consente di salvare un registro in uno dei tre formati sopra indicati. Il parametro /SaveAs
imposterà il formato del file in base all’estensione del file fornita.
Ecco alcuni esempi:
Convertire il registro capture.pml in capture.xml:
Converti il registro capture.pml in capture.csv:
Ricorda le opzioni di stack trace e risoluzione dei simboli nella finestra di dialogo Salva su file sopra? Puoi abilitare anche queste opzioni usando /SalvaCome1
e /SalvaCome2
.
Puoi salvare solo gli stack trace e le informazioni sui simboli in formato XML.
Converti il registro capture.pml in capture.xml includendo le informazioni sullo stack:
Converti il registro capture.pml in capture.xml includendo le informazioni sullo stack con i simboli:
Tieni presente che l’aggiunta di stack trace e simboli aumenterà drasticamente il tempo di conversione e senza dubbio vedrai un indicatore di progresso come mostrato di seguito.

Cattura degli eventi di avvio
A volte le informazioni di cui hai bisogno per indagare non vengono generate quando Windows è acceso e in esecuzione. Potresti anche avere bisogno di indagare su ciò che un processo sta facendo durante l’avvio di Windows.
È comune dover risolvere problemi come un avvio lento o malware che decide di eseguirsi immediatamente all’avvio di Windows. Procmon ha una funzionalità chiamata Registrazione all’avvio che puoi abilitare per catturare queste informazioni.
Per abilitare la registrazione all’avvio, fai clic su Opzioni -> Abilita registrazione all’avvio nel menu come mostrato di seguito.

Dopo aver cliccato su Abilita registrazione all’avvio, comparirà una finestra di dialogo che richiede alcune informazioni opzionali. In questa finestra di dialogo puoi catturare eventi di profilazione dei thread.
L’abilitazione degli eventi di profilazione dei thread è un caso d’uso avanzato. Quando abiliti la profilazione dei thread, procmon cattura le tracce dello stack dei thread e l’utilizzo della CPU che puoi utilizzare per identificare la fonte dei problemi di prestazioni legati alla CPU.

Dopo aver cliccato su OK, procmon abiliterà la registrazione di avvio che istruisce il driver del filtro (ne parleremo più avanti) ad attendere il riavvio successivo di Windows. Quando riavvii Windows, procmon inizierà a catturare gli eventi dei processi come se li avessi avviati manualmente.
Tutti i dati degli eventi di avvio vengono memorizzati in un file di log temporaneo chiamato C:\Windows\procmon.pmb.
Una volta che Windows è di nuovo attivo, apri nuovamente procmon. Dovresti vedere una finestra di dialogo come quella riportata di seguito. Qui, clicca su Sì per convertire i dati di avvio nel formato PML selezionando il file di log in cui salvare i dati.

Mentre procmon converte i dati, vedrai una barra di progresso come quella riportata di seguito.

Non dimenticare di riavviare procmon dopo un riavvio! Procmon inizierà a catturare gli eventi non appena Windows si avvia in C:\Windows\procmon.pmb. Continuerà a farlo fino a quando non lo spegni aprendo nuovamente procmon.
Esecuzione di Procmon in remoto
Sebbene procmon funzioni solo localmente su una macchina Windows, puoi richiamare procmon per eseguirlo in remoto tramite psexec o il comando Invoke-Command
di PowerShell.
Collegato: PsExec: La guida definitiva, Invoke-Command: Il modo migliore per eseguire codice in remoto
Per eseguire Procmon con il comando Invoke-Command
di PowerShell, seguire i seguenti passaggi:
- Abilitare l’esecuzione remota di PowerShell sulla macchina remota, se non già presente.
2. Copiare la cartella di Procmon sul computer remoto tramite la console di PowerShell.
3. Eseguire Procmon tramite PowerShell assicurandosi di saltare la conferma EULA, forzare Procmon a memorizzare gli eventi su un file di backup anziché nella memoria virtuale e non chiedere il filtro all’avvio.
4. A questo punto, Procmon ha iniziato a catturare. Riprodurre il problema che si sta cercando di catturare.
5. Interrompere Procmon sul computer remoto utilizzando lo switch /Terminate.
6. Attendere che Procmon si arresti. Come scorciatoia, è possibile controllare periodicamente il processo Procmon e restituire il controllo alla console di PowerShell quando è completo.
7. Copiare il file di log remoto sul computer locale.
A questo punto, avrai il file di log eseguito in remoto sul tuo computer locale!
Se desideri uno script PowerShell corretto per gestire questa cattura, puoi trovarlo di seguito.
Configurazione di Catture Procmon a Lunga Durata
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.
Eliminazione degli eventi filtrati
Quando Procmon esegue una cattura, cattura tutti gli eventi. Puoi creare e applicare filtri agli eventi, ma questi filtri nascondono solo gli eventi sullo schermo; non impediscono a Procmon di catturarli.
Se hai intenzione di eseguire delle registrazioni di procmon a lungo termine, è sempre una buona idea selezionare Drop Filtered Events dal menu Filter come mostrato di seguito.

Una volta selezionato l’elemento Drop Filtered Events, procmon inizia immediatamente a eliminare tutti gli eventi filtrati. Procmon non li mostra sullo schermo né li salva nella memoria virtuale o in un file di log. L’eliminazione completa degli eventi indesiderati aiuta a risparmiare risorse.
Argomenti avanzati
Se sei ancora alla ricerca di ulteriori informazioni su procmon e su come utilizzarlo, passiamo ad alcuni argomenti avanzati! Questi argomenti riguardano funzionalità di procmon che probabilmente non ti serviranno spesso. Queste informazioni possono essere utili per la risoluzione dei problemi di procmon.
Driver di filtro
Per catturare gli eventi, procmon registra e utilizza un driver di filtro tramite il Windows Filter Manager (FltDrv). Questo driver di filtro chiamato PROCMON24 viene installato quando avvii una registrazione. A volte questo driver di filtro può entrare in conflitto con altre applicazioni.
Dopo aver avviato procmon, apri una console di PowerShell con privilegi elevati o un prompt dei comandi e esegui il comando fltmc filters
. L’utilità fltmc
elenca, carica e scarica i driver di filtro. Quando esegui questo comando, vedrai il driver di filtro PROCMON24 caricato come mostrato di seguito.
Nota che l’altitudine di PROCMON24 è di 385200 per impostazione predefinita, con altri filtri che hanno un numero inferiore. L’altitudine del driver del filtro rappresenta il livello al quale un driver del filtro può “vedere” gli eventi. Ad esempio, se si verificano eventi a livello di wcifs, luafv o Wof, procmon non sarà in grado di vederli. Maggiori informazioni su come cambiarlo verranno fornite in seguito.

Il driver del filtro PROCMON24 rimane caricato anche quando procmon non è in esecuzione.
A volte procmon potrebbe avere problemi nel caricare un driver del filtro. Per risolvere il problema, aprire procmon con l’opzione
/NoConnection
per impedire a procmon di connettersi al driver del filtro.
Sblocco del driver del filtro PROCMON24
In alcuni casi, il driver del filtro PROCMON24 potrebbe entrare in conflitto con vari dispositivi hardware e sarà necessario sbloccarlo. Tuttavia, questa situazione potrebbe non essere così semplice come sembra.
È possibile sbloccare i driver del filtro utilizzando il comando fltmc unload
seguito dal nome del driver del filtro.
Ma se provi il comando sopra, scoprirai presto che non funziona. Non puoi sbloccare questo driver del filtro perché presumibilmente lo sviluppatore non ha aggiunto questa funzionalità.

Se è necessario sbloccare il driver del filtro PROCMON24, purtroppo l’unico modo per farlo è riavviare il sistema.
Tracce dello stack
A volte eventi semplici come la lettura di una chiave del registro, l’apertura di un file o la chiamata di un indirizzo di rete non sono sufficientemente approfonditi. È necessario scavare più a fondo e vedere la cronologia delle effettive chiamate alle funzioni dell’API di Windows che un processo sta effettuando. È necessario guardare la traccia dello stack.
A stack trace is the history of various functions called during various function calls when a process is running.
Con un elenco di eventi che appaiono in Procmon, fare doppio clic su qualsiasi evento e fare clic sulla scheda Stack come mostrato di seguito. La scheda Stack rappresenta le chiamate alle funzioni che il singolo processo ha effettuato al momento dell’evento.

L’argomento delle tracce dello stack potrebbe richiedere molto tempo. Se desideri saperne di più sulla comprensione dello stack delle chiamate di un processo, consulta l’articolo Ottimizzazione delle tracce dello stack in Process Monitor
Modifica dell’altitudine di Procmon (cattura di eventi a livello inferiore)
Come accennato in precedenza, Procmon utilizza un filtro di driver per catturare gli eventi. Anche se potrebbe sembrare che Procmon catturi tutti gli eventi di Windows (ci sono molti eventi che appaiono nella finestra di Procmon!), non è così. Procmon cattura solo gli eventi di cui il suo filtro di driver è a conoscenza o l’altitudine del suo filtro di driver.
Se, ad esempio, è necessario registrare l’attività dell’antivirus, lo storage a basso livello e altri eventi hardware di livello inferiore, è necessario modificare l’altitudine del driver di filtro PROCMON24 in modo che sia inferiore rispetto agli altri.
Per farlo:
- Assicurarsi che Procmon sia chiuso.
2. Trovare l’altitudine più bassa dei driver di filtro attualmente caricati con il comando fltmc
.
3. Cambiare il valore del registro Altitude sotto la chiave di registro HKLM\System\CurrentControlSet\Services\PROCMON24\Instances\Process Monitor 24 Instance a 100 in meno rispetto al valore di altitudine più basso (per vedere tutti gli eventi).
A seconda della versione di Procmon installata, la posizione della chiave di registro potrebbe cambiare. Questo tutorial utilizza Procmon 2.4.
È possibile aprire una sessione di PowerShell elevata e eseguire il seguente frammento di codice per cambiare rapidamente il valore.
Più bassa è l’altitudine impostata, più eventi dovranno essere gestiti. Non impostare l’altitudine più bassa di quanto necessario.
4. Negare i diritti Delete e Set Value per Everyone sulla chiave Process Monitor 24 Instance. Quando Procmon viene eseguito di nuovo, cercherà di ripristinare il valore Altitude
predefinito. È possibile modificare queste autorizzazioni tramite l’utilità regedit o eseguire il frammento di codice PowerShell di seguito.
5. Scaricare il driver di filtro PROCMON24 riavviando Windows.
6. Avviare Procmon.
7. Aprire una console di PowerShell o un prompt dei comandi e eseguire il comando fltmc filters
. Ora dovresti vedere il driver di filtro Procmon alla nuova altitudine.

Ora puoi catturare tutto ciò di cui hai bisogno. Se riduci al minimo l’Altitudine
di procmon, preparati per il monsone di eventi!
Esempi reali
Ora dovresti avere una buona comprensione di ciò che procmon può fare e di come può aiutarti a rintracciare gli eventi di Windows. Ora applichiamo questa conoscenza e analizziamo alcuni casi d’uso comuni in cui potresti aver bisogno di questa competenza.
Trovare cosa sta eliminando un file
Se hai un file sul tuo computer Windows che continua a essere eliminato per qualche motivo sconosciuto e vuoi rintracciarlo, procmon può aiutarti (ed è abbastanza facile).
Forse hai aperto procmon e hai cercato di impostare un evento chiamato Elimina o Rimuovi file, ma molto probabilmente non esiste un’operazione del genere. Invece, per trovare gli eventi di eliminazione file, devi filtrare gli eventi con un’Operazione
di:
SetDispositionInformationFile
SetDispositionInformationEx
Se il tuo sistema sta eliminando molti file, vorrai anche limitare gli eventi di eliminazione file solo al nome o al percorso utilizzando anche il filtro Percorso
.
Rintracciare i problemi di file bloccato
Ci siamo tutti trovati in questa situazione: provi a spostare o eliminare un file e viene bloccato da qualche altro processo. A volte, se stai cercando di disinstallare un’applicazione, ad esempio, non saprai mai se l’errore casuale che vedi ha qualcosa a che fare con un file bloccato in primo luogo!
Per capire quando Windows tenta di rimuovere o modificare un file bloccato, utilizza il seguente set di filtri.
Risoluzione dei problemi delle applicazioni che richiedono diritti di amministratore
Stai lavorando con un’applicazione che, secondo la documentazione, dovrebbe funzionare ma non lo fa? Ci siamo tutti passati. A volte un certo processo che l’applicazione avvia richiede privilegi elevati ma non ti dice dove o come. Puoi avviare procmon per aiutarti.
Un modo per individuare i processi che vengono negati a causa dei privilegi elevati richiesti è filtrare il Risultato di un evento.
Ogni volta che un evento viene negato a causa della mancanza di diritti elevati, di solito vedrai un risultato di ACCESSO NEGATO
. Sapendo questo, puoi facilmente creare un filtro semplice che mostra tutti gli eventi con un Risultato di ACCESSO NEGATO
come mostrato di seguito.
Da qui, puoi aggiungere ulteriori filtri come il percorso del registro o della cartella con l’attributo Percorso.
Trovare il processo che accede a un indirizzo IP
Forse hai riscontrato un comportamento di rete strano con Wireshark e devi capire quale processo inizia quella comunicazione. Avvia procon e aggiungi il seguente insieme di regole di filtro.
Queste regole di filtro limitano gli eventi solo al traffico di rete avviato localmente con una destinazione di un singolo indirizzo IP.
Risoluzione dei problemi di avvio lento
A volte Windows è lento nell’avvio. Questa lentezza può essere causata da molti componenti di Windows diversi, applicazioni installate, e così via. Utilizzando la capacità di registrazione di avvio di procmon, puoi individuare e risolvere il problema.
- Abilita la registrazione dell’avvio. Puoi scoprire come fare questo nella sezione Cattura eventi di avvio sopra.
2. Nella finestra di dialogo Abilita la registrazione dell’avvio, assicurati di selezionare la casella di controllo Genera eventi di profilazione del thread. Il pulsante di opzione Ogni secondo dovrebbe essere sufficiente.

3. Dopo un riavvio, apri procmon, fai clic con il pulsante destro del mouse su una colonna qualsiasi e scegli Seleziona colonne.
4. Nella finestra Selezione colonne Process Monitor, seleziona Durata. Una volta fatto ciò, sarai in grado di vedere quanto tempo ha impiegato ogni evento per eseguirsi.

5. Ora puoi creare una regola di filtro su Durata per un numero di secondi che ritieni adeguato. La regola di filtro di seguito visualizzerà solo gli eventi che hanno impiegato più di cinque secondi per completarsi.

6. Infine, un altro modo utile per investigare su questi eventi lenti è utilizzare il Process Tree di procmon. Il Process Tree mostra le relazioni tra processi padre e figlio e contiene l’ora di inizio e di fine di ciascun processo. Per trovarlo, fai clic su Strumenti —> Process Tree.

7. Una volta nel Process Tree, dai un’occhiata alla colonna Tempo di vita che mostra in formato grafico la durata di ciascun processo. Puoi anche notare gli intervalli di tempo confrontando le colonne Ora di inizio e Ora di fine in questa visualizzazione.

Risoluzione dei problemi delle applicazioni App-V
Molte organizzazioni utilizzano il servizio di virtualizzazione e distribuzione delle applicazioni di Microsoft, App-V, per distribuire applicazioni agli utenti finali. Se si utilizza App-V, esiste una pratica (e non documentata) opzione di procmon chiamata /externalcapture
che è importante conoscere.
Utilizzare .\procmon.exe /ExternalCapture
tende a catturare più attività del registro attorno alle applicazioni App-V. Prova questa opzione se non riesci a trovare ciò che cerchi durante la risoluzione dei problemi delle applicazioni App-V!
L’opzione /HookRegistry dovrebbe avere lo stesso scopo di /ExternalCapture, ma non funziona più su macchine a 64-bit.
Conclusione
Ecco qui una guida completa su tutto procmon! Nonostante tu abbia imparato molto su procmon, ci sono sempre altre gemme da scoprire con questa comoda utility.
Se desideri suggerire aggiornamenti o modifiche a questa Guida Definitiva, contattami su Twitter e fammelo sapere!