我需要找出谁使用.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文章 。
可能是因为文件对象没有定义创建者或所有者,而是由系统本身(内置\管理员)拥有。 “组或用户名”列表仅指定可以访问该文件的组和用户的列表,但不具体指定创建者。
最好你可以做的是遍历“组或用户名”的列表,并最好地猜测哪一个创建者。