簡體   English   中英

如何在 C# 中記錄低級操作系統文件事務?

[英]How can I log low-level OS file transactions in C#?

由於文件/進程監視器在日志記錄時的過濾和不必要的重復方面存在不足,我想重新創建該程序的功能並實時記錄所有 Windows 文件操作。

我想記錄時間、進程名稱、源路徑、目的路徑、操作、結果、細節等各種屬性,就像Process Monitor一樣

我怎樣才能讓 C# 從操作系統中提取這些信息?


編輯:正如 zett42 指出的那樣, FileSystemWatcher將無法正常工作,例如,不會攔截從進程本身創建的文件事件。 例如,這些交易都沒有出現,即使我添加了事件: ChangedCreatedRenamedDeletedFileSystemWatcher並將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-journalC:\Users\Dan\AppData\Local\Google\Chrome\User Data\Default\Current Session

您永遠無法捕獲 Process Monitor 在 C# 中捕獲的所有內容。 ProcMon 如此擅長捕獲所有這些事情的原因之一是因為 ProcMon 包含一個在內核模式下加載的驅動程序並掛鈎自身並偵聽這些事件。 如果你想復制進程監視器,你將不得不編寫你自己的驅動程序來捕獲你想要的所有東西。 Windows 驅動程序不能用 C# 編寫,您必須用 C/C++ 編寫驅動程序。

另一種選擇是讓 Process Monitor 記錄所有內容以歸檔並自行過濾事件。

您是否嘗試使用 WMI? ManagementEventWatcher可以提供您需要的所有信息,即使它不像 FileSytemWatcher 那樣方便。 我不確定它是否會起作用,不幸的是目前不能自己嘗試,但這是我要開始的地方。

看看這個線程中 RRUZ 的答案,它完全符合您的要求。 您只需要查明 WMI 是否提供了所有必需的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM