DriveInfo.GetDrives() 以管理员身份运行时不返回映射的驱动器



我正在创建一个 WPF 应用程序,除其他事项外,还应检查是否存在多个映射驱动器。代码很简单:

DriveInfo[] systemDrives = DriveInfo.GetDrives();
foreach (DriveInfo i in systemDrives)
{
     if ((i.Name.Contains("V")) && (i.IsReady))
     {
          result = true;
          break;
     }
 }
映射的

驱动器映射给所有用户。上面的代码在以普通用户身份运行时工作正常,但是Visual Studio 2010以管理员身份运行,GetDrives方法仅返回固定驱动器和DVD驱动器,而不返回映射驱动器。如果可执行文件以管理员身份运行,也会发生同样的情况。 知道为什么会发生这种情况吗?

从 http://www.vistaheads.com/forums/microsoft-public-windows-vista-general/125180-run-administrator-loses-access-mapped-drives.html,

(通过 http://social.technet.microsoft.com/Forums/en-US/w7itpronetworking/thread/31c9eff2-ece3-4430-886d-19b54796e411/):

这实际上是正常行为。正如您在XP上看到的那样,驱动器映射 特定于用户上下文。因此,如果用户 1 有一个驱动器 H:映射到 \服务器\共享 1,用户 2 不会自动获得对此的任何访问权限 H:驱动器映射;它仅存在于用户 1 的会话中。如果用户 2 想要 访问\服务器\共享1,他们需要创建自己的映射,要么 H:驱动器或任何其他适合的驱动器。

好吧,在Vista中也是如此....仅此而已。

与以前版本的 Windows 不同,当管理员登录到 运行 Windows Vista 的计算机,用户的完全管理员访问权限 令牌分为两个访问令牌:完全管理员访问权限 令牌和标准用户访问令牌。在登录过程中, 用于标识 管理员被删除,从而生成标准用户访问令牌。 然后使用标准用户访问令牌启动桌面,即 资源管理器.exe进程。因为所有应用程序都继承其访问权限 从桌面初始启动开始控制数据,它们都作为 标准用户也是如此。管理员登录后,完整 在用户尝试调用管理员访问令牌之前,不会调用管理员访问令牌 执行管理任务。

因此,当管理员"eleva"执行某种操作时 这需要管理访问权限,他们的"拆分令牌"被替换, 临时,具有完整的管理令牌。实际上,这意味着 它们现在具有不同的用户上下文。所以驱动器映射是 也变了。所以 H: 驱动器,不再有有效的映射 当前上下文。

我使用的解决方法是打开管理命令提示符 - 您始终拥有提升的令牌 - 并从那里创建匹配的驱动器映射(净使用 h:\server\share1)。因为 标准用户和提升的管理员具有共同点 了解"H:"驱动器的含义,一切正常。

我理解(嗯,有点!)为什么这个设计到位。我不会的 试图批评或捍卫它。但是,你有它。

在理想情况下,管理员将能够配置 "全局"映射,自动应用于每个用户上下文 在机器上(几乎像真实设备一样)。但是,这并没有发生。 大多数操作系统都有杂乱无章的妥协,在 不同程度。

您可以启用管理员通过注册表项对管理员可见映射的驱动器:

HKEY_LOCAL_MACHINE/软件/Microsoft/Windows/当前版本/政策/系统

创建值为 1 的 DWORD 启用链接连接

如下所述:http://www.winability.com/how-to-make-elevated-programs-recognize-network-drives/

这在 Win 10 上对我有用。

相关内容

  • 没有找到相关文章

最新更新