ما المستخدم الذي تسبب في أحداث ملفات filesystemwatcher؟
-
18-09-2019 - |
سؤال
على سبيل المثال، يمكنني التقاط حدث حذف لمختلف الملفات في شجرة مجلد، ولكن كيف سأذهب حول تحديد المستخدم الذي تسبب في حذف الحذف؟
لم أستطع العثور على أي شيء واضح في وثائق MSDN ل FileSystemWatcher، لذلك ربما لم يكن ذلك ممكنا. سأكون فضوليا إذا كان هناك حل ولكن.
المحلول
هذا ليس ممكنا حاليا مع التطبيقات الحالية لملفات filesystemWatcher لأنه لا يتلقى هذا النوع من المعلومات عند حذف ملف، أو أي شيء عن تغييرات الملفات.
نصائح أخرى
من الممكن استخدام مجلد تدقيق (خصائص المجلد> الأمان> خيارات متقدمة> التدقيق) ثم البحث عن سجل الأحداث الأمان بعد حرائق حدث FileSystemWatcher.
string GetUser(string path) {
object nowDate = Now;
GetUser = "Unknown";
Threading.Thread.Sleep(1000);
// # Search user in the security event log
object secLog = new EventLog("Security", EVENTLOGSERVER);
EventLogEntry entry;
for (int i = (secLog.Entries.Count - 1); (i <= Math.Max((secLog.Entries.Count - 1500), 0)); i = (i + -1)) {
entry = secLog.Entries(i);
if (IsValidEntry(path, nowDate, entry)) {
GetUser = entry.ReplacementStrings(11);
break;
}
}
}
bool IsValidEntry(string path, DateTime nowDate, EventLogEntry entry) {
return ((entry.EntryType == EventLogEntryType.SuccessAudit)
&& ((entry.InstanceId == 560) || (entry.InstanceId == 564))
&& !entry.UserName.EndsWith("SYSTEM")
&& (Math.Abs(nowDate.Subtract(entry.TimeGenerated).TotalSeconds <= 20)
&& (entry.ReplacementStrings.GetUpperBound(0) >= 11)
&& (entry.ReplacementStrings(2).Length >= 4)
&& path.EndsWith(entry.ReplacementStrings(2).Substring(4)));
}
لا يبدو أن هناك أي وظيفة مدمجة في .NET التي يمكن أن تساعدك في ذلك، ولكن بمساعدة الوظيفة NetFileGetInfo
في Netapi32.dll، يجب أن يكون ذلك ممكنا.
إلقاء نظرة على هذا الموضوع حيث سجل المستخدم dave4dl نموذجا رمز يوضح كيفية القيام بذلك.