我怎样才能找出谁在Windows中使用.NET创build一个文件?

我需要找出谁使用.NET创build了一个文件

我已经尝试了以下内容:

string FileLocation = @"C:\test.txt"; FileInfo droppedFile = new FileInfo(FileLocation); FileSecurity fileSecurity = droppedFile.GetAccessControl(); IdentityReference identityReference = fileSecurity.GetOwner(typeof(NTAccount)); string userName = identityReference.Value; Console.WriteLine(userName); 

所有这些返回是“BUILTIN \ Administrators”

我在这里做错了什么? 因为当我在资源pipe理器中查看C:\,所有者显示正确的用户名,当我执行上面的代码时,它返回“BUILTIN \ Administrators”

这甚至不是一个域和用户名,我认为这是一个安全组。

任何帮助赞赏。

如果用户是管理员,则他们创建的文件被认为是由整个管理员组拥有,而不是由个人用户拥有。

您可以在资源管理器的属性对话框中看到相同的行为。 令人烦恼的是,我不认为有任何解决方法,除了不让用户管理员。

编辑: 本Technet文章更详细地解释了这种行为。 理由是Windows将所有管理员视为一个单一的实体; 系统上的任何管理员都可以执行其他管理员可以执行的操作。

  • 如果一个管理员在一个文件上被授权,所有其他管理员也是如此
  • 如果一个管理员被拒绝访问,那么其他管理员也是如此
  • 如果一个管理员拥有一个文件 – 该文件的所有者被授予对该文件的特权访问权 – 那么所有其他管理员也必须拥有该文件。

更新:我错了,有一个文件对象的所有者描述符! (我的头在哪里)。 看看这个MSDN文章 。

可能是因为文件对象没有定义创建者或所有者,而是由系统本身(内置\管理员)拥有。 “组或用户名”列表仅指定可以访问该文件的组和用户的列表,但不具体指定创建者。

最好你可以做的是遍历“组或用户名”的列表,并最好地猜测哪一个创建者。