2010-03-30 47 views
6

我需要知道哪些用户从c#代码中删除了文件系统中的文件。 只有一个想法是使用审计,但它似乎很慢......我如何获得删除文件的用户?

+0

你说的这个“审计”是什么? – BlueMonkMN 2010-03-30 11:10:40

+1

@BlueMonkMN:这可能是这样的:NTFS访问审计 - http://support.microsoft.com/kb/310399;这似乎是最简单的选择 - 毕竟,它比内核更接近用户空间,所以它应该捕获所有文件访问事件(不确定低级别磁盘访问,但这可能不需要)。虽然我没有经过微调。 – Piskvor 2010-03-30 11:25:53

+0

我不想使用审计功能,因为我将拥有大量文件,事实上,它实际上会将系统日志 – user295518 2010-03-30 11:46:41

回答

2

您可以使用FileSystemWatcher.Deleted事件捕获在文件系统上发生的删除。

根据应用程序的不同,您可能在此时也能够找出导致此事件发生的用户(它不是FileSystemEventArgs的一部分)。

+0

发送给其他人。我使用监视器,但是当我尝试获取像这样的用户名: System.Security.AccessControl.FileSecurity sec = new FileSecurity(Path,System.Security.AccessControl.AccessControlSections.Owner); return sec.GetOwner(typeof(System.Security.Principal.NTAccount))。Value; 由于无法确定用户而引发异常 – user295518 2010-03-30 11:10:20

+0

@user:尝试'WindowsIdentity.GetCurrent()。Name' http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity。 aspx – 2010-03-30 12:32:06

1

我不知道这是否可以从filsystem中检索,但一种可能的方法是使用av FileSystemWatcher对象来触发Deleted上的事件。缺点是您需要让观察器应用程序始终运行。一个好处是,如果可行的话,你可以监控一个特定的文件夹。

+0

似乎FileSystemWatcher不提供有关用户删除文件的信息... – user295518 2010-03-30 11:13:59

+0

不,但我也许可能可以通过文件访问。你必须得到更改文件的用户,而不是所有者。但无论如何,该文件可能已被删除。这就是为什么你会得到我想的例外。 – 2010-03-30 13:15:31

+0

也许你可以想出如何从这个源代码访问被删除文件的文件信息? http://ntfsundelete.com/downloads/ – 2010-03-30 13:22:18