アプリケーションが使用するリソースをキャプチャして調査してみた

目次


概要

アプリケーションがどんなファイルを使用して、どのレジストリをアクセスして、どんな挙動しているのかを調べたくなる時があります。
今回は、Sysinternals の Process Monitor を便利に使用できたので、その時の手順をメモしておきます。

準備

Sysinternals のページから Process Monitor をダウンロードします。

実行

  1. [Procmon.exe]もしくは[Procmon64.exe]を実行します。

  2. 初回起動時は、ライセンス認証の画面が開きます。
    f:id:HopStepLab:20200315192858p:plain

  3. キャプチャーが始まっている場合は、いったん停止します。
      メニューバー[File]→[Capture Events] のチェックをOFFにします。もしくは [Ctrl]+[E]
    f:id:HopStepLab:20200315192901p:plain

  4. キャプチャー中は、虫眼鏡が有効、キャプチャー停止中は 虫眼鏡が × されます。
    f:id:HopStepLab:20200315192905p:plain   f:id:HopStepLab:20200315192909p:plain

調査対象のアプリケーションを特定する

  1. すべてのアプリケーションのイベントを表示させてもよいのですが、とてもたくさんのログが出力されます。
    ここでは例として Windows標準の [ペイント] の挙動を調査する想定でフィルター設定します。

    • 調査するアプリケーションのプロセス名が分かっている場合は、フィルター設定します。
        メニューバー[Filter]→[Filter] を選択し、[Process Monitor Filter]画面で、
          [Process Name] [contains] [mspaint] then [Include]
        もしくは
          [Process Name] [is] [mspaint.exe] then [Include]
        とし、[Add]を押して追加します。
        is を選択する場合は、プロセス名は拡張子まで書きます。 大/小文字の区別はしないようです。
      f:id:HopStepLab:20200315192915p:plain

    • 画面が表示されるタイプのアプリケーションを調査する場合は、[Include Process From Window] アイコンで指定します。
      ツールバー [Include Process From Window] アイコンを、マウスで対象のアプリケーションのタイトルバーまでもっていき離すと、自動的に[Process Monitor Filter]画面に登録されます。
      ※ただし、プロセスIDで登録されるため、ペイントを再度実行した場合はフィルターされない場合があるので注意。
      f:id:HopStepLab:20200315192918p:plain

  2. それでもまだたくさんのイベントが表示されていると思いますので、ここでは処理に時間(0.00002ms以上)がかかったイベントをハイライトして見つけやすくしてみます。

    • メニューバー[Option]→[Select Columns]で、[Duration]を ON にする。
    • メニューバー[Filter]→[Highlight...] を選択。
        [Process Monitor Highlighting]画面で、
          [Duration] [more than] [0.0000200] then [Include]
         とし、[Add]を押して追加します。
      f:id:HopStepLab:20200315192923p:plain
      f:id:HopStepLab:20200315192927p:plain

追加の設定など

  • Filter設定で対象としたものだけをキャプチャーしたい場合
    メニューバー[Filter]→[Drop Filtered Events]を ONにします。

  • いろいろフィルター設定したのをファイルに保存したい場合
    メニューバー[File]→[Export Configuration] でファイル(~.pmc)に保存できます。
    復元するときは、[Import Configuration]で保存した設定を読み込み、定義を適用します。

  • フィルター設定などを読み込んだ状態で Process Monitor を起動したい場合
    コマンドラインから、
      Procmon64.exe /LoadConfig "(保存した設定ファイル名).pmc"

  • Windows 起動時の状態をキャプチャーしたい場合

    • メニューバー[Enable Boot Logging] をONにする
    • [Enable Boot Logging]画面で、
      f:id:HopStepLab:20200315192931p:plain
      実行中のすべてのアプリケーションの状態を保存する場合はチェックする。
    • パソコンを再起動し、再度管理者ユーザでログオンする
    • 再度、[Procmon64.exe]を起動する
      f:id:HopStepLab:20200315192934p:plain
      [はい]クリックし、保存するファイル名(標準では Bootlog.pml)を指定する。

そのほかの画面など

  • [File]→[Backing Files...]
    f:id:HopStepLab:20200315195518p:plain

  • [Tools]→[Process Tree...]
    f:id:HopStepLab:20200315192938p:plain

  • [Tools]→[Process Activety Summary...]
    f:id:HopStepLab:20200315192942p:plain

  • [Tools]→[File Summary...]
    f:id:HopStepLab:20200315192946p:plain

  • [Tools]→[Registry Summary...]
    f:id:HopStepLab:20200315192950p:plain

  • [Tools]→[Stack Summary...] f:id:HopStepLab:20200315192954p:plain

  • [Tools]→[Network Summary...] f:id:HopStepLab:20200315192958p:plain

  • [Option]→[Configure Symbols...]
    f:id:HopStepLab:20200315193001p:plain

  • [Option]→[Select Columns...]
    f:id:HopStepLab:20200315193005p:plain

  • [Help]→[Command Line Options...]
    f:id:HopStepLab:20200315193009p:plain

記事内の環境について

  • Windows 10 Pro バージョン 1909