我需要找出谁使用.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”
哪个甚至不是域名和用户名,我认为它是一个安全组。
任何帮助表示感谢。
答案 0 :(得分:5)
如果用户是管理员,则他们创建的文件将被视为归整个管理员组所有,而不是个人用户。
您可以在资源管理器的属性对话框中看到相同的行为。令人讨厌的是,除了没有让用户管理员之外,我认为没有任何解决方法。
修改 This Technet article更详细地解释了这种行为。理由是Windows将所有管理员视为单个实体;系统上的任何管理员都可以执行其他管理员可以执行的任何操作。
答案 1 :(得分:1)
更新:我错了,文件对象有一个所有者描述符! (我的脑袋在哪里)。看看this MSDN article。
可能是因为文件对象没有定义创建者或所有者,而是由系统本身拥有(内置\管理员)。 “组或用户名”列表仅指定有权访问该文件的组和用户的列表,但不是特定的创建者。
您可以做的最好是遍历“组或用户名”列表,并最好地猜测哪一个是创建者。