【问题标题】:How to gain read access to all files on windows system no matter what?无论如何,如何获得对 Windows 系统上所有文件的读取权限?
【发布时间】:2015-12-14 20:26:17
【问题描述】:

我希望能够扫描所有逻辑驱动器并获取所有 exe/dll 文件,以便在当前 Windows 机器上的所有程序集中输出所有 .net 类型/类,无论操作系统版本如何。我运行 WINDOWS 7,我有管理员权限(在代码中检查它),但仍然被拒绝访问 C:\Documents and Settings

我做错了什么?

bool aaa = AmIAdmin();
GetAllNet();

static Dictionary<string, object> GetAllNet()
{
    List<string> binaries = new List<string>();
    string[] drives = Directory.GetLogicalDrives();
    foreach (string dir in drives)
    {
        binaries.AddRange(Directory.GetFiles(dir, "*.dll", SearchOption.AllDirectories));
        binaries.AddRange(Directory.GetFiles(dir, "*.exe", SearchOption.AllDirectories));
    }

    return null;
}
static bool AmIAdmin()
{
    return new WindowsPrincipal(WindowsIdentity.GetCurrent())
                .IsInRole(WindowsBuiltInRole.Administrator);
}

【问题讨论】:

  • 不完全是重复的,但这个文件夹(和其他几个)是 C# 看到的特殊文件夹。要了解如何联系他们,请参阅stackoverflow.com/questions/16752534/…
  • 在这种情况下,他已经有了(可能是正确的)物理路径。
  • 建议您发布最少的代码来重现该问题。让代码检查管理员权限(与您的程序相同),尝试读取有问题的文件夹。这样您就可以看到问题与这两件事无关,并且其他人可以重现该问题。

标签: c# file-permissions


【解决方案1】:

拥有管理员权限并不能保证可以访问特定资源。事实上,可以创建一个主动拒绝管理员用户/组访问资源的 ACL。

管理员可以做的是take ownership 资源,然后修改 ACL 以使访问可用。如果你想这样做,你可以,但这会改变你文件的访问规则。

【讨论】:

  • 怎么做,是否适用于所有windows版本?
  • 知道它适用于 windows 98 -> win7,我非常有信心它适用于 8 和 10。看看链接的答案看看怎么做,或者看here.
  • 除非有一个非常非常好的理由,否则我建议不要修改系统上每个 DLL/EXE 文件的 ACL,并尝试“以管理员身份”运行您的程序(是的,即使您属于“管理员”组)。我可以看到这导致频繁的系统重建,因为文件的原始所有者不再被允许修改某些东西......
  • @RonBeyer - 是的,我同意这种劝阻,我确实说过这涉及更改文件访问规则,但如果这确实是要求,则没有其他(明智的)方法。一种可行的方法是获得对驱动器的低级直接字节访问,并实现完全忽略凭据的文件系统读取器。
  • 好的,你能告诉我如何检查文件是否可以读取并允许/拒绝它,这样我就可以读取我的东西,而不是恢复访问级别
猜你喜欢
  • 1970-01-01
  • 2017-07-21
  • 2011-10-14
  • 2015-12-23
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 2018-08-31
  • 2013-04-12
相关资源
最近更新 更多