Process Monitor中文手冊

1.介紹

2.使用Process Monitor

3.列的選擇

4.過濾和高亮

5. 進程樹(The Process Tree)

6. 信息概要工具(Trace Summary Tools)

7. 選項

8. 保存和記錄(Saving and Logging)

9. 啓動記錄

10. 配置的導入和導出

11. 命令行選項

12. Process Monitor腳本

13. 注入應用程序調試信息

 


1.介紹

Process Monitor
Copyright ©1996-2010 Mark Russinovich and Bryce Cogswell
Sysinternals - www.sysinternals.com

Process Monitor 是windows下高級實時監聽工具,用於監視文件系統、註冊表、進程和線程的活動。它兼併了兩個Sysinternals實用工具Filemon和Regmon的特點,並且增加了一系列的擴展包括豐富而無干擾的過濾全面的事件屬性比如會話ID和用戶名,可靠的進程信息,全部的線程棧和對每一個操作完整的符號支持,同時一個或多個文件。這些優秀的功能將使Process Monitor成爲解決操作系統問題和惡意軟件跟蹤的重要工具之一。

Process Monitor運行在Windows XP SP2,、Windows Server 2003 SP1、和Windows Vista。同時支持64位版本的Windows XP, Windows Server 2003 和 Windows Vista。


2.使用Process Monitor

運行Process Monitor 需要本地管理組成員。當你啓動Process Monitor後,它就開始監聽三類操作,包括:文件系統,註冊表,進程。

  • 文件系統
    Process Monitor顯示所有的Windows文件系統活動,包括本地磁盤和遠程文件系統。Process Monitor會自動探測到新的文件系統設備並監聽它們。所有的系統路徑都會被顯示爲相對於在用戶會話中的一個文件系統操作的執行。比如,如果用戶A把掛載的一個共享作爲Z:盤符,則在Process Monitor中,所有對這個共享的操作都會被顯示爲相對於驅動器Z:。想在列表中清除文件系統的操作,在Process Monitor工具欄上反選“文件系統”按鈕,再次按下可以增加對文件系統的監聽。
  • 註冊表
    Process Monitor記錄所有的註冊表操作並顯示使用常見的註冊表根鍵縮寫來顯示註冊表路徑(如HEKY_LOCAL_MACHINE 縮寫爲HKLM)。想在列表中清除註冊表的操作,在Process Monitor工具欄上反選“註冊表”按鈕,再次按下可以增加對註冊表的監聽。
  • 進程
    在它的進程/線程監聽子系統中Process Monitor跟蹤所有進程和線程的創建和退出操作,包括DLL和設備驅動程序的加載操作。 想在列表中清除進程的操作,在Process Monitor工具欄上反選“進程”按鈕,再次按下可以增加對進程的監聽。
  • 網絡
    Process Monitor使用“Windows事件跟蹤(ETW)”來跟蹤並記錄TCP和UDP活動。每個網絡操作包括源和目標地址,還有發送和接受到的一些數量的數據,但不包括真實的數據。想在列表中清除網絡的操作,在Process Monitor工具欄上反選“網絡”按鈕,再次按下可以增加對網絡的監聽。
  • 性能分析
    這個事件類可以在“選項”菜單中啓用。當處於“啓用”狀態,Process Monitor掃描系統中所有活動的線程併爲每個線程生成一個性能分析事件,記錄了內核模式和用戶模式的CPU時間消耗,還有許多在上個性能分析事件後已被線程執行的環境開關。
    提示:性能分析中不包括系統進程

 

有許多基礎設置控制ProcessMonitor的基本操作:

Capture:通過“File”菜單下“Capture Events”菜單項,capture工具欄按鈕或Crtl+E熱鍵可以開關Process Monitor的監聽。

Autoscroll:通過“Edit”菜單下Autoscroll菜單項,autoscroll工具欄按鈕或Ctrl+A熱鍵來開關Process Monitor的自動滾動動作,這樣最近的操作就會始終顯示着。

Clear:通過“Edit”菜單選擇Clear Display或用Ctrl+X熱鍵來清除所有顯示項。


3.列的選擇

你可以拖拽列來重新排列次序,也可以在Options菜單中選擇Select Columns選項,然後通過彈出的列選擇對話框來定製列的顯示。

Application Details

  • Process Name 產生事件的那個進程的名字
  • Image Path 進程鏡像的完整路徑
  • Command Line 命令行,用於啓動進程
  • Company Name 進程鏡像文件中的企業名稱。這個文本是由應用程序的開發者來定義的。
  • Description 進程鏡像文件中的產品描述信息。這個文本是由應用程序的開發者定義的。
  • Version 進程鏡像文件中的產品版本號。這個文本是由應用程序的開發者定義的。

Event Details

  • Sequence Number 操作在全體事件中的相對位置,也包括當前的過濾。
  • Event Class 事件的類別(文件,註冊表,進程)
  • Operation 特殊事件操作,比如Read,RegQueryValue等等
  • Date & Time 操作的日期和時間
  • Time of Day 只是操作的時間
  • Path 一個事件引用資源的路徑
  • Detail 事件的附加信息
  • Result 一個完成了的操作的狀態碼
  • Relative Time 一個操作相對於Process Monitor的啓動後的時間,或者相對於Process Monitor的信息清除後的時間。
  • Duration 一個已經完成了的操作所持續的時間

Process Management

  • User Name 正在執行操作的進程的用戶賬戶名
  • Session ID 正在執行操作的進程的Windows會話ID
  • Authentication ID 正在執行操作的進程的登錄會話ID
  • Process ID 執行了操作的進程的進程ID
  • Thread ID 執行了操作的線程的線程ID
  • Integrity Level 正在運行的進程執行操作時的可信級別(僅支持Vista以上系統)
  • Virtualized 執行了操作的進程的虛擬化狀態

 

4.事件屬性

你可以雙擊單個事件來查看它的屬性內容,或者當右擊屬性的時候選擇屬性菜單項。事件屬性對話框由事件,進程和棧三個標籤組成。你可以顯示前一個或後一個,也可以高亮某個事件通過選擇下面的選項。

事件
事件頁中會顯示針對於某個事件的相關信息,包括順序號,所屬線程,事件類和操作,結果,時間戳,如果適用的話還有資源路徑。只有文件系統和註冊表事件定義了資源路徑。根據事件的操作,在事件頁下方列出了詳細內容。這些內容跟主窗口所顯示的信息一致,每個信息由分割線隔開。

進程
事件的進程標籤中會顯示執行這個事件的進程的信息。包括進程鏡像的數據,比如路徑和版本,進程頁顯示進程的執行屬性,比如進程ID,運行進程的用戶賬戶,如果事件是在64位系統下產生,需要標識程序時32位還是64位的。如果程序運行在Vista以上系統,Process Monitor顯示進程的可信度和進程是否是虛擬的。

進程頁下方顯示了在進程中,事件發生時進程加載的模塊信息和它的地址。雙擊列表中的模塊可以瀏覽到該模塊的更多的信息,包括它的版本信息。


棧頁中顯示了事件被記錄的時刻的線程棧信息。棧是非常有用的對於判斷事件發生的原因和哪個組件導致事件的發生。棧的內核模式幀用字母‘K’在幀的左邊標識,用戶模式棧(用戶模式棧在Vista SP1/WindowsServer 2008之前的64位系統中不可用)用字母‘U’。如果Process Monitor可以定位鏡像引用的符號表,它將會嘗試轉換地址爲其所屬的函數。將如果符號表必須從網絡中獲取,那麼符號表的分析將花費一些時間,比如說微軟的符號服務器。從Options菜單中,使用符號配置對話框,可以配置符號表。

如果你在符號配置對話框中指定了源文件路徑,那麼棧對話框中的Source按鈕會變爲有效對於那些有符號表的行號,並且源文件存在於你所設置的路徑。點擊Source按鈕,打開了一個文本瀏覽器並且高亮了引用到的源代碼行。

瀏覽更多的關於棧記錄框中羅列出的鏡像的信息,可以雙擊幀或者選擇要查看的幀,然後按下方的Properties按鈕。

從事件菜單中選擇棧菜單可以直接打開事件屬性對話框中的棧標籤頁。

 

5.過濾和高亮

Process Monitor提供了幾種方式來配置過濾器和高亮

引入和排除過濾器(Includeand Exclude Filters)
你可以指定事件的屬性,這樣Process Monitor將僅僅顯示你的指定。或者用屬性值做對比來排除一些事件。所有的過濾器都是無害的,意思就是它們的作用僅僅是在Process Monitor中把事件顯示出來,而不作用與下面的數據。

在Event菜單中選擇Include和Exclude子菜單,可以簡單的添加一個事件屬性到Include或者Exclude過濾器。例如:選擇Include子菜單中的Process Name選項來顯示特定進程所發生的事件。你也可以選擇多個事件並且爲所選取事件包含的所有唯一值同時配置一個屬性過濾器。Process Monitor在所有過濾器中取“OR”,與相關特定的屬性類型。並在不同的屬性類型中取“AND”。例如:如果你指定進程名包括Notepad.exe和Cmd.exe,並加一個路徑Include filter爲C:\Windows,Process Monitor將顯示Notepad.exe或者Cmd.exe中的包含特定路徑C:\Windows的事件。

你可以選擇Filter菜單下的Filter項,或者點擊Filter工具欄按鈕來配置更復雜的過濾器選項。過濾器條目由一個屬性域組成(例如:Authentication ID,Process Name等),一個比較操作,一個屬性值,還有過濾類型包括Include或Exclude。爲了方便,Process Monitor將自動的用已加載的trace data來填充屬性值下拉列表,但你可以輸入任意值。複選框中你可以禁止指定的過濾條目而不用刪除它們。

過濾器上下文菜單(Filter Context Menu)
如果你在某一項上右擊鼠標,Process Monitor顯示一個上下文菜單來讓你查看所選項的屬性或者基於所選項的屬性來配置一個過濾器。而且,你所點擊列的值已經添加到了quick-filter條目中了。

有損的過濾(Destructive Filtering)
默認情況下,Process Monitor過濾器應用於它所顯示的數據,而不作用域它保存了的數據。那麼你可以改變過濾器來獲取不同的數據視圖,而不影響已排除的數據。然而,你可以配置Process Monitor通過一個過濾器來任意刪除那些被排除的數據,當數據在togglingdestructive filtering模式下已經被捕獲,通過選擇Filter菜單下的Drop Filtered Events選項。

從窗口中選取進程(Include Process from Window)
工具欄中包含了一個像靶子一樣的按鈕,你可以拖出並拖入某個窗口中來使Process Monitor添加這個進程的ID到Include filter中。

基礎vs高級模式(Basic vs. Advanced Mode)
Filter菜單的Enable Advanced Output菜單項控制着ProcessMonitor是在基礎模式下進行操作還是在高級模式下進行操作。當在基礎模式下Process Monitor配置內置的過濾器來排除系統相關的活動,併爲內部文件系統操作分配直觀的名字。例如:在基礎模式下,Process Monitor顯示內部的IRP_MJ_READ操作爲Read。基礎模式使得輸出變得容易閱讀並且省略與應用程序錯誤分析(troubleshooting)不相關的事件。

保存和加載過濾器(Saving and Loading Filters)
你可以選擇Filter菜單下的Save Filters菜單項來保存你已經配置好的過濾器。Process Monitor可以通過Load Filter菜單來加載過濾器,你可以使用Organize Filters對話框來改變過濾器顯示的規則,通過Filter菜單下的Organize Filters可以打開。你可以使用Organize Filter 對話框來重命名已經保存了的過濾器,也可以導出過濾器到一種格式然後你也可以使用Organize Filter對話框在另外一個系統中導入進來。

高亮(Highlighting)
Process Monitor的高亮過濾器使你可以指定事件屬性來使得事件用高亮的顏色來顯示。Event菜單下的Highlight子菜單提供了快速的方式來定義高亮過濾器條目,選取Filter菜單下的Highlight菜單項後會彈出Highlight Filter對話框,這裏的操作與Include/Exclude Filter對話框類似。

 

6.進程樹(The Process Tree)

在Tools菜單中選擇Process Tree菜單項可以打開“進程樹對話框”,它通過層次級別來顯示所有的進程並反映他們的父子關係。相同父進程下的子進程根據他們的啓動時間來進行排序。進程靠窗口的左邊對齊。

當你在樹種選擇一個進程,Process Monitor獲取到的數據的一個子集講顯示在對話框的下方,其中包括鏡像路徑,用戶賬戶和開始時間。點擊Go To Event按鈕可以查看該進程的更多的信息,它將定位並選擇該進程發生並被記錄的事件的第一條項目上。注意,過濾器排除指定進程的事件之後,這個操作會被禁止。

 

信息概要工具(Trace Summary Tools)

Process Monitor包含了很多對話框來讓你可以在事件記錄中執行簡單的數據挖掘技術。

系統詳細信息(System Details)
Process Monitor捕獲一些關於系統的信息,包括機器名,系統根目錄,還有操作系統的版本是32位的還是64位的。你可以通過Tools菜單中的System Details對話框來把這些信息存儲到記錄文件中。

發生次數(Count Occurrences)
在Tools菜單中可以打開Count Occurrences對話框。它顯示了某個屬性類型的某一個值在記錄中的有多少條事件中包含了這個值,或者發生了多少次某個指定的事件。

進程概要(Process Summary)
這個對話框總結了記錄中看到的進程,包括他們的進程ID,鏡像名,還有命令行。

文件概要(File Summary)
文件概要對話框羅列了已經被記錄的每一個文件系統路徑,還有對該文件執行I/O操作所用的時間總和,一共有多少事件引用到了該路徑,有多少種操作類型。

註冊表概要(Registry Summary)
註冊表概要對話框羅列了已經記錄的信息中每個註冊表路徑,還有對該註冊表路徑執行I/O操作所用的時間總和,引用到了該註冊表路徑的事件總數,有多少種操作類型。

網絡概要(Network Summary)
網絡概要對話框羅列了已經記錄了的信息中的每個目標IP地址和有多少種事件類型,包括髮送和接收到的對於每個地址。

棧概要(Stack Summary)
使用棧概要對話框來查看每個進程棧信息的單個實例,包括棧記錄重現的次數,並顯示同一個記錄集中事件所花費的總時間。

對照索引概要(Cross Reference Summary)
這個對話框顯示一個進程寫入而另外一個進程也讀過的路徑。

 

7.選項

在Options菜單中有很多設置可以改變Process Monitor的行爲。

總是在最上(Always On Top)
選擇這個選項後可以使Process Monitor窗口保持在其他窗口的上方。

字體(Font)
這個選項打開了一個字體選擇對話框來讓你選擇ProcessMonitor所使用的字體。

高亮顏色(Highlight Colors)
選擇這個選項打開一個對話框來選擇ProcessMonitor爲那些高亮過濾器中相符條目所使用的文本和背景顏色。

設置符號表(Configure Symbols)
Process Monitor可以使用符號信息,如果符號表是有效的,在事件棧中會顯示函數的引用。你可以在 Microsoft Debugging Tools for Windows 網頁上找到一些關於配置符號表的信息。

來歷的深度(History Depth)
Process Monitor查看已經提交了的內存的使用情況並在虛擬內存不足的情況下關掉他們,而來歷深度(History Depth)對話框可以讓你來限制保存的條目的數量,這樣就可以使得ProcessMonitor長期的運行並且確保總是保存了最近發生的事件。

性能分析事件(Profiling Events)
使用這個選項來打開性能分析配置(ProfilingEvents)對話框,通過該對話框,你可以啓用線程性能分析並估算線程性能分析事件發生的數量。如果線程性能分析已經啓用,Process Monitor將捕獲線程棧記錄和CPU使用率,你可以用這些數據來判定CPU相關資源的性能分體。

啓用根記錄(Enable Boot Logging)
通過這個選項來配置Process Monitorboot logging

 

8.保存和記錄(Saving and Logging)

文件格式(File Formats)
你可以通過File菜單下的Save子菜單來保存Process Monitor數據爲原生的(PML),CSV或XML格式。PML格式保存所有捕獲到的數據,所以你可以在原始的系統或者一個不同的系統上重載這些數據到ProcessMonitor中。CSV文件對導入Excel或其他數據分析應用程序非常有用。最後,XML格式的數據可以被操作XML的工具所解析。

記錄
默認情況下,Process Monitor使用虛擬內存來保存捕獲到的數據。在File菜單下打開支持文件(Backing Files)對話框來配置Process Monitor保存捕獲到的數據到磁盤上的文件。ProcessMonitor會使用原生的PML格式來保存捕獲到的數據。

支持文件(Backing Files)對話框也顯示了診斷信息,包括捕獲了多少個事件,明確的進程和捕獲線程的加載狀態。

 

9.啓動記錄

Process Monitor 可以再啓動過程很早的時候就開始記錄系統的活動,早到啓動設備驅動程序初始化的時候。可以通過"Options"菜單下的Enable Boot Logging 選項來配置Process Monitor 從而記錄下一次啓動過程。Process Monitor的驅動將記錄下一次啓動過程中記錄到的活動保存到 %Windir% 下的一個文件中,並將繼續記錄活動直到關機或者是你再次運行ProcessMonitor。因此,如果你在一個會話中沒有運行Process Monitor,那麼你將截獲從啓動到關機這麼一個過程中的所有活動。

在Windows Vista或更高的版本中,Process Monitor支持在啓動記錄過程中捕獲線程概要信息。當你在所支持的操作系統中啓用了啓動記錄,Process Monitor將彈出一個對話框來詢問啓動記錄是否包含了線程概要信息。值得注意的是線程概要信息將顯著的增加啓動記錄文件的大小。

當你運行Process Monitor ,它將會查看之前是否有啓動記錄信息生成,如果有,則詢問你想把處理過的啓動記錄文件保存到哪裏。等轉化完畢之後Process Monitor將顯示這些記錄。如果想查看System進程的活動,這個啓動過程中最早的進程,你可以再Options菜單下選擇Enable Advanced Output。

如果你配置了啓動記錄,並且系統在啓動的早期崩潰了,那麼你可以通過選擇Windows啓動菜單中的“最後已知完好的設置”來取消啓動記錄。(需要在啓動過程中按F8鍵)

注意:基於ETW(Event Tracing forWindows)的網絡事件,沒有在啓動記錄的日誌中。

 

10.配置的導入和導出

如果你配置好了過濾器,你可以通過Tools菜單下的Save Filters菜單項來保存你進行的配置。Process Monitor添加你保存的過濾器配置到Load Filter菜單中,使你可以方便的應用,並且你還可以使用OrganizeFilters對話框來更改過濾設置顯示的次序,該對話框要在Tools菜單下打開。你可以用Organize Filter對話框來給保存的過濾器改名,不但可以以某種格式導出過濾器設置並且還可以再其他的系統中通過本對話框來導入配置。

你也可以導出Process Monitor的全部配置信息,包括過濾器,列的選擇,列的次序和大小,日誌文件的設置和調試幫助文件的路徑配置到一個Process Monitor Configuration文件(.PMC)。這個操作需要使用File菜單下的Export Configuration菜單。使用File菜單的Import Configuration來加載一個保存了的配置文件或者通過命令行選項/LoadConfig。

 

11.命令行選項

Process Monitor支持一些命令行選項:

/Openlog <保存了的PML日誌文件>

讓Process Monitor打開並加載指定的日誌文件

/Backingfile <日誌文件名>

讓Process Monitor創建和使用指定的文件名命名日誌文件

/Pagingfile

保存事件到頁文件。

/Noconnect

當選中了這個選項,Process Monitor不會自動記錄活動

/Nofilter

在啓動的時候清除過濾器

/AcceptEula

自動接收許可並繞開EULA(最終用戶許可協議)對話框。

/Profiling

啓用線程概要事件。

/Minimized

Process Monitor將以最小化的方式啓動。

/WaitForIdle

等待一個Process Monitor實例準備好。

/Terminate

結束所有的Process Monitor實例並退出。

/Quiet

不在啓動的時候確認過濾器的設置。

/Run32

使用此指令讓32位版本的Process Monitor運行在64位的Windows中,並打開在32位系統下生成的日誌。

/HookRegistry

此開關只在32位的Vista和Server2008中有效,讓Process Monitor使用system-call hooking 來代替Registry callback mechanism來監控註冊表活動,在這些操作系統中通過啓用本指令來查看虛擬應用程序的虛擬註冊表操作。這個選項必須在Process Monitor在系統中運行的第一次中啓用,而且只能用來爲虛擬應用程序(SoftGrid)查找錯誤。

/SaveAs, /SaveAs1, /SaveAs2

使用這些開關配合/OpenLog來讓Process Monitor導出一個日誌文件到CSV,XML或者PML格式。/SaveAs1選項包括棧信息導出到XML格式,/SaveAs2選項添加符號信息。

/LoadConfig

加載指定的過濾器和設置文件。

 

12.Process Monitor腳本

你可以使用Process Monitor命令行指令來集合到一個批處理文件。下面這個示例是一個用來捕獲notepad.exe執行信息的批處理文件:

set PM=C:\sysint\procmon.exe
start %PM% /quiet /minimized /backingfile C:\temp\notepad.pml
%PM% /waitforidle
start /wait notepad.exe
%PM% /terminate

Process Monitor第一次調用start是要確保進程從控制檯窗口中分離,從而允許他執行後面的指令。start的第二次調用配合了/WaitForIdle指令,這是因爲批處理文件需要等到Process Monitor的第一個實例啓動完畢並且開始捕獲事件的時候才能運行notepad.exe。最後一次調用使用了/Terminate 來告知實例停止捕獲,提交所有數據到備份文件最後完全退出。

 

13.注入應用程序調試信息

如果你是一位應用程序的開發者,那麼包含你自己的調試輸出信息到Process Monitor的事件流中可能會很有好處,因爲你可以更好的關聯應用程序操作與其他事件。Process Monitor允許無特權級的應用程序來注入寬字符串信息,最大的長度爲2048。下面的示例代碼展示瞭如何去打開Process Monitor調試接口,並且寫入信息到事件流。字符串並不需要以null結尾,但這個示例中是這樣用的。下面的示例代碼展示瞭如何來生成Process Monitor調試輸出。John Robbins寫了一個helper classes,你可以在你本地上使用,或者方便的支持託管應用,你可以到這裏下載它:http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/04/13/see-the-i-o-you-caused-by-getting-your-diagnostic-tracing-into-process-monitor.aspx

注意:你必須顯示Profiling events來看下面的事件。

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

#define FILE_DEVICE_PROCMON_LOG0x00009535
#define IOCTL_EXTERNAL_LOG_DEBUGOUT (ULONG) CTL_CODE( FILE_DEVICE_PROCMON_LOG,0x81, METHOD_BUFFERED, FILE_WRITE_ACCESS )

int main( int argc, char * argv[] )
{

HANDLE hDevice = CreateFile(L"\\\\.\\Global\\ProcmonDebugLogger", GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL );

if ( hDevice !=INVALID_HANDLE_VALUE ) {

WCHAR text[] = L"Debugout";

DWORD textlen = (_wcslen(text)+1)*sizeof(WCHAR)
DWORD nb = 0;

BOOL ok = DeviceIoControl( hDevice,IOCTL_EXTERNAL_LOG_DEBUGOUT, text, textlen, NULL, 0, &nb, NULL );

if ( ok ) {

printf( "wrote %d\n", i);

} else {

printf( "error 0x%x\n",GetLastError() );

}

} else {

printf( "error %d openingProcess Monitor\n", GetLastError() );

}

return 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章