プロセスによって行われる特定のシステムコール、主にファイルI/Oコールを監視できるようにしたいと思います。 Linuxでは、おそらく strace と適切なパラメータを使用して回避できますが、Windowsではどうすればよいですか?
私は主にプロセスを実行し、プロセスが読み書きしたファイルを特定することに興味があります。
これを別のプロセスからプログラムで実行したいと考えています。 Process Monitor は知っていますが、さらに分析するために別のプログラムにインポートできる形式でデータを受け取りたいです。
要件をさらに絞り込む場合は、おそらくCreateFile()の呼び出しを監視するのに十分です。私は本当にどのファイルが開かれているか、そしてそれらが読み取り/書き込みまたは単に読み取られるように開かれているかにのみ興味があります。私が実際に述べなかったもう1つの要件は、speedがかなり重要であることです。 C++ファイルのコンパイルなどの目的でこれを行うことを計画していましたが、20 MBのログファイルを生成する完全なGUIをプルアップすると、非常に大きなオーバーヘッドが発生します。
また、管理者権限を必要としないのもいいでしょう。
Windowsにはいくつかのオプションがあります。
Windows Performance Toolkit は、ファイルI/Oを含むさまざまなシステムイベントのトレースを有効にするために使用でき、これらのイベントを処理および表示するためのツールが含まれています。 xperfを使用して、イベントのさまざまなクラスのトレースを開始し、ETLファイルに保存して、後で同じツールを使用して処理または表示できます。
プロセスモニター from Sysinternals は別の非常に使いやすいオプションであり、システム上のプロセスが実行しているすべてのファイルとレジストリアクセスをすばやく確認できます。 http://blogs.msdn.com/carloc/archive/2008/10/31/how-to-automate-process-monitor.aspx は、プロセスモニターを自動化して実行する方法も示しています。
プログラムでこれを完全に実行したい場合は、ETW関数(StartTrace、EnableTraceなど)を使用してファイルI/Oイベントをスナップし、ETLファイルに保存できます。サンプルコード here 。
Windowsでは、 Process Monitor を使用して、プロセスアクティビティ(I/Oおよびレジストリ)を監視できます。システムコールを知りたくない場合は、これで十分でしょう。
また、 winapioverride32 を使用して、API呼び出しを監視できます。
API Monitor Rohitab Batraによるシステムコールには非常に適しています。
別の方法は Deviare API Hook を使用して、必要なすべてのユーザーモードシステムコールをインターセプトすることです。このフレームワークを使用すると、COMインターフェイスを使用してパラメーターを読み取ることができるため(たとえば、各パラメーターはINktParamであり、INktParam.Valueを使用して値を取得できるため)、すべての呼び出しの汎用ハンドラーをコーディングできます。
別の代替手段ですが、多少の費用がかかりますが、同じ会社の SpyStudio を使用することです。この製品には、GUIなしでログを収集するのに役立つコマンドラインオプションがあります。
FileMon を使用します(現在は Process Monitor に統合されています)。
別のWindows APIトレースツール: logexts.dll
( Debugging Tools for Windows )の一部で、内部から実行できます WinDbg /ntsd/cdbまたはスタンドアロンlogger.exe
プログラム。