如何找到使用.NET在Windows中创建文件的用户?

Dan*_*ris 5 .net windows filesystems

我需要找出谁使用.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);
Run Code Online (Sandbox Code Playgroud)

所有这些返回的是"BUILTIN\Administrators"

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

哪个甚至不是域名和用户名,我认为它是一个安全组.

任何帮助赞赏.

Tim*_*son 5

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

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

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

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