繁体   English   中英

我如何找出谁使用.NET在Windows中创建了文件?

[英]How can I find out who created a file in Windows using .NET?

我需要找出谁使用.NET创建文件

我已经尝试了以下方法:

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”

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

我什至都不是域和用户名,而是安全组。

任何帮助表示赞赏。

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

您可以在资源管理器的属性对话框中看到相同的行为。 令人讨厌的是,除了不让用户成为管理员之外,我认为没有其他解决方法。

编辑: 此Technet文章更详细地说明了此行为。 原因是Windows将所有管理员视为一个实体。 系统上的任何管理员都可以执行其他管理员可以执行的任何操作。

  • 如果一个管理员被允许访问一个文件,那么其他所有管理员也被允许
  • 如果一个管理员被拒绝访问,那么其余的管理员同样
  • 而且,如果一个管理员拥有一个文件(文件所有者被授予对该文件的特权访问权限),那么所有其他管理员也必须拥有该文件。

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

可能是因为文件对象未定义创建者或所有者,而是由系统本身(builtin \\ administrators)拥有。 “组或用户名”列表仅指定有权访问文件的组和用户的列表,但没有专门指定创建者的列表。

最好的办法是遍历“组或用户名”列表,并最好地猜测是哪个创建者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM