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

时间:2010-07-30 09:19:10

标签: .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);

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

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

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

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:5)

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

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

修改 This Technet article更详细地解释了这种行为。理由是Windows将所有管理员视为单个实体;系统上的任何管理员都可以执行其他管理员可以执行的任何操作。

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

答案 1 :(得分:1)

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

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

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