Process Monitor についての Tips
こんにちは。Windows テクノロジー サポートの吉井です。
今日は弊社より提供している以下の Process Monitor ツールに関して、いくつかの Tips をご紹介しようと思います。
Process Monitor
https://technet.microsoft.com/ja-jp/sysinternals/bb896645.aspx
Process Monitor はファイル システム、レジストリ、プロセス、スレッド、およびネットワークの活動をリアルタイムで表示、記録する監視ツールです。
ファイル、レジストリに対するアクセスエラー発生箇所の特定や、書き換えを行ったプロセスの特定などが行える便利なツールでして、私たちも日常のトラブル シュートでよく利用しています。
非常に強力かつ汎用的なツールで、普通に使うだけでも重宝するのですが、以下により活用いただくために便利機能をいくつかご紹介させていただこうと思います。
Tip 1. システム起動時に情報を取る方法
システム起動時などで、Process Monitor の対面操作が間に合わない場合にも [Enable Boot Logging] オプションを利用することでシステム起動時のアクティビティを記録することができます。
起動の初期段階で発生する問題等の調査の場合にご利用ください。
- 使用手順
1. Procmon.exe を実行し、[Option] から [Enable Boot Logging] をクリックします。
2. [Process Monitor is configured to log activity during the next boot.] のポップアップで [OK] をクリックします。
3. システムを再起動し、ログオンします。
4. システムの起動後、再度 Procmon.exe を実行すると、以下の内容のポップアップが表示されますので、[はい] をクリックすると、イベントを保存できます。
A log of boot-time activity was created by a previous instance of Process Monitor. Do you wish to save the collected datat now?
Tip 2. イベントの保存をフィルターする方法
Process Monitor では、プログラム起動時などにイベントをフィルターする設定が表示されますが、このフィルターは表示上のフィルターであり、実際にはフィルターされたイベントも記録しています。
そのため、後からフィルターされていたイベントについてもフィルター設定を変えることで参照できます。
ただ、PML ファイルに保存するときなどに莫大な量になる場合もあるので、場合によってはすべてのイベントを保存したくない場合もあると思います。
その場合には [Filter] - [Drop Filtered Events] のチェックをオンにすると、フィルターされたイベントは保存されず破棄 (Drop) されます。
破棄することで過去のイベントは見えなくなりますので、その点についてはご注意ください。
Tip 3. コマンド ラインからフィルター設定した状態で開始/停止する方法
Process Monitor ではフィルター設定や上記 Drop Filtered Events のオン/オフ等を含む設定状態をエクスポートすることができます。
このエクスポートしたファイルを指定して起動することで、フィルターを適用した状態で Process Monitor を開始することができます。
- 設定のエクスポート方法について
1. Process Monitor を開始し、フィルターなどの設定を行います。
2. [File] - [Export Configration...] を選択します。
3. 保存ダイアログが表示されますので、設定ファイル名前をつけて保存します。
設定されたファイルは PMC (Procmon Configuration) 形式で保存されます。
この設定エクスポートしたファイルを /loadconfig オプションで指定して起動することでフィルターを適用した状態で起動できます。
これらを利用して、コマンドラインから Process Monitor をある程度制御することが可能です。
コマンドでフィルターを指定した上で自動で採取を開始し、かつ、任意のファイルにログするには以下のコマンドを利用します。
> procmon.exe /AcceptEula /quiet /backingfile <ファイル名> /minimized /loadconfig <PMC ファイル名>
<ファイル名> にはログファイル名を指定します。(なお、/AcceptEula オプションは EULA へ同意いただく意味になります。)
例 > Procmon.exe /AcceptEula /quiet /backingfile c:\log.pml /minimized /loadconfig c:\ProcmonConfiguration.pmc
Process Monitor をコマンド ラインから停止するには以下のコマンドを利用します。
> procmon.exe /terminate
PMC ファイルを作成した上で、上記コマンドとタスク スケジューラ等を組み合わせることで指定期間の自動採取等も可能です。
ただし、頻繁なアクティビティがある状況で Process Monitor を使用した場合、ログ ファイルが巨大になる危険性がありますので、十分にご注意ください。
Tip 4. スタックを確認する方法
Process Monitor 上で、イベントをダブル クリックするとプロパティ画面が表示されますが、ここに "Stack" タブがあります。
このタブではこのイベントが記録された際のスタックについての情報を参照できます。
ただ、通常ですとモジュール名 + オフセットとなってしまい、細かな情報は取得できません。
これにデバッグ シンボル情報を組み合わせると処理関数名 + オフセットまで知ることができます。
シンボルを設定するには、以下の手順を実行します。
1. Debugging Tools for Windows をインストールします。
シンボルを利用するには以下の Debugging Tools for Windows が必要ですので、
下記の URL から Debugging Tools for Windows をインストールします。
Windows 用デバッグ ツール: 概要
https://www.microsoft.com/japan/whdc/DevTools/Debugging/default.mspx
2. Process Monitor で設定を行います。
メニューから [Options] - [Configure Symbols] を選択します。
設定画面が表示されますので、以下を設定します。
Dbghelp.dll path : <Debugging Tools for Windows のインストール フォルダ>\dbghelp.dll
Symbols path : srv*https://msdl.microsoft.com/download/symbols
"Dbghelp.dll path" には、Debugging Tools for Windows のインストール
フォルダ配下にある dbghelp.dll を指定してください。
例 : C:\Program Files\Debugging Tools for Windows\dbghelp.dll
Symbols path の https://msdl.microsoft.com/download/symbols は弊社のシンボル サーバーです。ローカルに シンボル ファイル (pdb ファイル) がある場合などには、; (セミコロン) で区切って追加することもできます。
以下にシンボルを解決した場合の表示サンプルをご紹介します。
サンプルとして、SampleProgram.exe の SampleFunction() から CreateFile 関数を読んだイベントを使っています。
シンボル利用後
シンボル利用前