C# Treesize可以查看它不显示的文件夹和文件';我无法访问

C# Treesize可以查看它不显示的文件夹和文件';我无法访问,c#,windows,permissions,C#,Windows,Permissions,我在一台工作机器上运行的程序有问题 Treesize pro是一个程序,它将扫描一个区域(C:\、\\nasdrive\home等),并为您提供一个树状视图以及该区域的其他信息 现在,我在一个具有管理员权限的帐户上运行这个程序,当我使用午餐时,它会弹出用户帐户控制窗口 但是,如果我搜索一个我的管理员帐户无法访问的区域(有几个),它将正常工作,并向我显示文件、文件夹、大小、修改和创建日期的所有信息。我无法打开这些文件,但我可以看到它们的名称并进入子文件夹。如果我在资源管理器中尝试此操作,我将获得访

我在一台工作机器上运行的程序有问题

Treesize pro是一个程序,它将扫描一个区域(C:\、\\nasdrive\home等),并为您提供一个树状视图以及该区域的其他信息

现在,我在一个具有管理员权限的帐户上运行这个程序,当我使用午餐时,它会弹出用户帐户控制窗口

但是,如果我搜索一个我的管理员帐户无法访问的区域(有几个),它将正常工作,并向我显示文件、文件夹、大小、修改和创建日期的所有信息。我无法打开这些文件,但我可以看到它们的名称并进入子文件夹。如果我在资源管理器中尝试此操作,我将获得
访问被拒绝

我试着用我自己编写的脚本来实现这一点,但是如果我尝试使用
Directory.getDirectories()
目录.GetFiles()但即使我以管理员身份运行程序(右键单击以管理员身份运行),它也会在Catch块中发出
拒绝访问
命令

我真的很想知道Treesize是如何列出我的帐户无权访问的文件夹、子文件夹和文件的


谢谢

TreeSize通过NTFS备份API读取数据(请参阅)

从treesize的注释中:

访问控制列表 用户访问文件和文件夹的方式可能会受到限制。可以授予或拒绝其他用户或组某些权限[…]。这样,甚至可以拒绝管理员访问文件和文件夹。如果管理员试图访问Windows资源管理器中的某个文件夹,而该文件夹的所有者拒绝了任何其他用户的读取权限,则将显示“拒绝访问”错误消息。但是,如果您以管理员身份或有权执行备份的用户身份登录,TreeSize可以扫描此类文件夹(此选项可以在“控制面板>管理工具>本地安全策略”和Windows的用户编辑器中更改)

有关访问权限的详细信息,请参见

SE_BACKUP_NAME和SE_RESTORE_NAME访问权限是专门为备份应用程序而创建的。如果已在备份应用程序进程的访问令牌中授予并启用了这些权限,则它可以调用CreateFile打开文件或目录进行备份,并将标准读取控制访问权限指定为dwDesiredAccess参数的值。但是,要将调用进程标识为备份进程,对CreateFile的调用必须在dwFlagsAndAttributes参数中包含FILE_FLAG_backup_语义标志。这将允许备份应用程序进程打开您的文件并覆盖标准安全检查

你可以找到更多关于


我认为这是一个权限问题。您的帐户有权列出文件夹的内容,但不能打开文件。也许资源管理器做了一些聪明的技巧来隐藏无法打开文件的文件夹等等。只是一个提示,对此不确定。。。在的德语wiki页面(遗憾的是没有英文版本)中解释了TreeSize使用并读取其包含的元数据。这些可能不受非管理员用户的保护。。。再说一遍:只是猜测而已。第二个链接值得一读。答案很好。需要明确的是,除非程序以管理员权限运行,或者登录用户碰巧被授予了备份整个文件系统的特殊读取权限,否则FILE_FLAG_BACKUP_SEMANTICS FLAG不会有任何用处。另一方面,Microsoft Store版本的TreeSize在默认情况下(无管理会话)确实可以访问通常禁止列出的文件夹,例如C:\Program Files\Windows Apps\。这可能是应用程序清单中声明的“runFullTrust”功能的副作用。
HANDLE hFile = CreateFile( fileName,                   // lpFileName
                       READ_CONTROL,               // dwDesiredAccess
                       0,                          // dwShareMode
                       NULL,                       // lpSecurityAttributes
                       OPEN_EXISTING,              // dwCreationDisposition
                       FILE_FLAG_BACKUP_SEMANTICS, // dwFlagsAndAttributes
                       NULL );                     // hTemplateFile