由于文件/进程监视器在记录时在过滤和不必要的重复方面不足,我想重新创建该程序的功能并实时记录所有 Windows 文件操作。
我想记录各种属性,例如时间、进程名称、源路径、目标路径、操作、结果和细节,就像Process Monitor 一样。
如何让 C# 从操作系统中提取此信息?
编辑:正如 zett42 指出的那样FileSystemWatcher
,例如,从进程本身创建的文件事件不会被拦截。例如,这些事务都没有显示,即使我添加了事件:、、、Changed
和,Created
并将标志设置为 true 。Renamed
Deleted
FileSystemWatcher
EnableRaisingEvents
编辑 2:使用 SimonMourier 对 Microsoft.Diagnostics.Tracing.TraceEvent nuget 包的建议,我设法敲出下面的代码。
这部分被放入一个后台工作者中:
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 拾取的东西,例如(例如),非常常见的 Chrome 内容,例如写入C:\Users\Dan\AppData\Local\Google\Chrome\User Data\Default\Cookies-journal
或C:\Users\Dan\AppData\Local\Google\Chrome\User Data\Default\Current Session