Dan*_*n W 11 c# winapi interop file-monitoring procmon
由于文件/进程监视器在进行日志记录时无法进行过滤和不必要的重复,因此我希望重新创建该程序的功能并实时记录所有Windows文件操作.
我想记录各种属性,如时间,进程名称,源路径,目标路径,操作,结果和详细信息,就像Process Monitor一样.
如何让C#从操作系统中提取此信息?
编辑:正如zett42指出的那样,FileSystemWatcher例如,从进程本身创建的文件事件不会被拦截.举例来说,没有这些交易显示出来,即使我添加的事件:Changed,Created,Renamed,和Deleted到FileSystemWatcher和设置EnableRaisingEvents标志设置为true.
编辑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