File/Process Monitor はフィルタリングとロギング時の不必要な複製の点で不十分なので、そのプログラムが行うことを再現し、すべての Windows ファイル操作をリアルタイムで記録したいと考えています。
Process Monitorと同じように、時間、プロセス名、ソース パス、宛先パス、操作、結果、詳細などのさまざまな属性を記録したいと考えています。
C# でこの情報を OS から抽出するにはどうすればよいですか?
編集: zett42 が指摘したように、FileSystemWatcher
プロセス自体から作成されたファイル イベントは傍受されないなど、まったく機能しません。たとえば、 、、、およびのイベントを に追加し、フラグを trueに設定しても、これらのトランザクションは表示されません。Changed
Created
Renamed
Deleted
FileSystemWatcher
EnableRaisingEvents
編集 2: Microsoft.Diagnostics.Tracing.TraceEvent nuget パッケージに関する SimonMourier の提案を使用して、以下のコードをノックアップすることができました。
このセクションは、バックグラウンド ワーカーに配置されます。
Console.CancelKeyPress += (sender, e) => session.Stop();
session.EnableKernelProvider(KernelTraceEventParser.Keywords.All);
session.Source.Kernel.FileIOWrite += Kernel_FileIOWrite;
session.Source.Process();
そして、作成された FileIOWrite イベントは、(自動的に) 呼び出されたときに次を実行します。
private void Kernel_FileIOWrite(Microsoft.Diagnostics.Tracing.Parsers.Kernel.FileIOReadWriteTraceData obj)
{
string filename = obj.FileName;
string processpath = "";
if (obj.ProcessID == 0) processpath = "System Idle Process";
else if (obj.ProcessID == 4) processpath = "System";
else
{
try { processpath = "ID: " + obj.ProcessID + ": "+ Process.GetProcessById(obj.ProcessID).MainModule.FileName; }
catch { processpath = "error ID: "+ obj.ProcessID; }
}
richTextBox1.AppendText(filename + " ............."+ processpath +"\n");
}
残念ながら、FileIOReadWriteTraceData.FileName
Procmon がピックアップするもの (たとえば) をピックアップしていませんC:\Users\Dan\AppData\Local\Google\Chrome\User Data\Default\Cookies-journal
。C:\Users\Dan\AppData\Local\Google\Chrome\User Data\Default\Current Session