Поскольку File / Process Monitor терпит неудачу с точки зрения фильтрации и ненужного дублирования при ведении журнала , я хочу воссоздать то, что делает эта программа, и записывать все операции с файлами Windows в реальном времени.
Я хочу записать различные атрибуты, такие как время, имя процесса, исходный путь, целевой путь, операция, результат и детали, точно так же, как Process Monitor делает .
Как я могу получить C #извлечь эту информацию из ОС?
РЕДАКТИРОВАТЬ: Как указал zett42, FileSystemWatcher
не будет работать, как, например, файловые события, созданные из самих процессов, не будут перехватываться.Например, ни одна из этих транзакций не отображается, хотя я добавил события: Changed
, Created
, Renamed
и Deleted
в FileSystemWatcher
и установил EnableRaisingEvents
установить значение true.
РЕДАКТИРОВАТЬ 2: Используя предложение SimonMourier для пакета nuget Microsoft.Diagnostics.Tracing.TraceEvent, мне удалось добавить код ниже.
Этот раздел помещенв фоновый рабочий:
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