【问题标题】:How do I get the offline Windows drive letter from a Windows PE?如何从 Windows PE 获取脱机 Windows 驱动器号?
【发布时间】:2016-11-03 16:51:35
【问题描述】:

如果我从我的在线 Windows 中使用GetWindowsDirectory,我可以获得安装操作系统的目录,例如 C:\Windows。

如果我在 Windows PE 中使用相同的功能,我会得到 X:\Windows(如屏幕截图),这意味着来自 Windows PE 本身的 Windows 目录。如何获取脱机 Windows 目录?就像D:\Windows,或者它有的任何字母。

有什么功能可以推荐吗?

【问题讨论】:

  • 您能定义一下您所说的“离线 Windows 目录”吗?
  • 我的意思是。当您在 Windows PE 环境中时,您使用的是小型操作系统,而 Windows 将获得另一个驱动器。所以通常有两个驱动器包含所有操作系统文件夹,如 Windows 和 Program Files。我需要从离线系统中获取驱动器或目录,而不是正在运行的系统。
  • 我正在使用 WinPE 将 WIM 映像部署到无屏幕 x86 目标,并且 Windows 目录指向 X:\Windows 虚拟文件夹...这是活动操作系统。
  • 我知道,但是如何获取离线操作系统的文件夹?如果您从 PE 切换到其他字母,您会发现另一个驱动器具有您正在启动的脱机操作系统。
  • 你在谈论 离线操作系统,好像只有一个。但是,可以有任意数量。听起来像一个 XY 问题,真的。

标签: c winapi winpe


【解决方案1】:

有一个名为mountvol.exe 的实用程序(在WinPE 和/或Windows 中可用)将列出所有已安装的卷。您的 winpe 驱动器始终为 x:,并且“离线”安装通常(但不总是)安装在 d:

还有用于枚举卷的 Windows API - FindFirstVolumeFindNextVolume。这将包括未安装的卷,您可以为未安装的卷分配驱动器号。

一旦您有了一个卷列表,您需要查看每个卷以确定它是否是您感兴趣的“目标”卷 - 诸如卷标之类的东西 - \Windows 的存在,和/或检查 bcd数据库以确定哪些卷是可引导的。这不是微不足道的,但它是可能的。 bcd 数据库实际上是一个 Windows 注册表配置单元,您可以将其以只读方式挂载...并且从中提取信息是一项工作。

即使未挂载脱机卷(这很不寻常),您仍然可以使用 Windows API 检查卷内容 - 但您必须使用 \\?\ 前缀和卷 ID(而不是驱动器号) .只挂载卷更容易。

如果您确实找不到脱机卷,请检查以确保物理磁盘是否存在。如果不是,您可能需要将特定硬盘驱动器的驱动程序添加到您的 winPE 映像。通常,您可以从使用该驱动器的正在运行的操作系统中获取这些信息。 DISM 中有一个/addDriver 子命令,用于从驱动程序存储中复制驱动程序。人们通常只是指向您正在构建.wim 的计算机上的现有驱动程序存储。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    相关资源
    最近更新 更多