Windows 中的预配工作原理

Windows 客户端中的预配包为 IT 管理员提供了一种将配置设置应用于 Windows 客户端设备的简化方法。 Windows 配置设计器是一种可以简化预配包创建过程的工具。 可以从 Microsoft Store 安装 Windows 配置Designer。

预配程序包

预配包包含可通过可移动媒体提供或下载到设备的特定配置/设置和资产。

若要实现添加多组设置或配置,应通过包含单独的预配包的多个配置源生成预配引擎使用的配置数据。 每个预配包包含来自不同源的预配数据。

预配包 (.ppkg) 是一系列配置设置的容器。 该包具有以下格式:

  • 包元数据 - 元数据包含有关包的基本信息,例如包名称、说明、版本、排名等。

  • XML 描述符 - 每个描述符定义包中包含的自定义资产或配置设置。

  • 资产有效负载 - 自定义资产的有效负载,或者与应用或数据资产关联的配置设置的有效负载。

可以通过访问附加到设备的可移动媒体上的包、通过近场通信 (NFC) 或从远程源位置下载来使用预配包进行运行时设备预配。

预配包的优先级

当多个预配包可用于设备预配时,包清单中定义的包所有者类型和包排名级别组合用于解决设置冲突。 下面按照从低到高的所有者类型优先级列出了预定义的包所有者类型:

  1. Microsoft

  2. 芯片供应商

  3. OEM

  4. 系统集成商

  5. 移动运营商

  6. IT 管理员

包排名级别的有效值范围为 0 至 99。

遇到设置冲突时,设备上预配的最终值由包含设置的包的所有者类型优先级和排名级别决定。 对于具有相同所有者类型的包,包排名级别决定了通过哪个包中的设置值对设备进行预配。

Windows 预配 XML

Windows 预配 XML 是一个框架,它允许 Microsoft 和 OEM 组件声明最终用户可配置设置和设备上的基础结构,从而使组件所有者能够通过最少的工作应用设置。

可以在该组件的包清单文件内声明每个组件的设置。 这些声明转变为 Windows 配置设计器使用的设置架构,以便向用户公开潜在的设置,从而在映像或预配包中创建自定义项。 Windows 配置设计器将通过 Windows 预配应答文件声明的用户配置转换为设备上的预配格式。

当预配引擎选择某个配置时,Windows 预配 XML 包含在所选预配数据中,并传递到配置管理器,然后传递到 Windows 预配 CSP。 然后,Windows 预配 CSP 获取预配并将其应用到适当的位置,以供实际组件使用。

预配引擎

预配引擎是在运行 Windows 10/11 的设备运行时管理预配和配置的核心组件。

预配引擎提供以下功能:

  • 在设备运行的任何时间(包括首次启动和设置或 OOBE)预配配置。 它还可以在设备运行时期间扩展到其他点。
  • 读取和合并多个配置源中的设置,可以由 Microsoft、OEM 或系统集成商将其添加到某个映像中,也可以由 IT/教育管理员或用户在运行时添加到设备中。 配置源可以内置到映像中,也可以从预配包添加到设备中。
  • 响应触发器或事件以及启动预配阶段。
  • 对预配包进行身份验证。
  • 选择一组配置(基于阶段)和一组映射到特定配置的项(如 SIM、MCC/MNC、IMSI 范围等),然后将该配置传递到配置管理基础结构进行应用。
  • 当无法确定特定的匹配时,使用 OOBE 和控制面板 UI 允许用户选择配置。

配置管理器

配置管理器提供管理 Windows 10/11 设备的统一方法。 配置主要通过开放移动联盟 (OMA) 设备管理 (DM) 和客户端预配 (CP) 协议完成。 配置管理器通过不同的通道处理和解析这些协议请求,然后将其向下传递到配置服务提供程序 (CSP),以执行特定的管理请求和设置。

预配引擎依赖于配置管理器进行所有的实际处理和所选配置的应用。 预配引擎决定预配的阶段,并且基于一组键来确定要发送到配置管理器的配置集。 配置管理器进而解析并调用 CSP,以便应用设置。

CSP 在配置管理器之下。 配置的每个部分都转换为一个特定的 CSP,以处理解释为设备上的操作的过程。 每个 CSP 转换配置中的指令,并调用相应的 API 和组件来执行请求的预配操作。

策略和资源管理器

策略、资源和上下文管理器组件管理在企业环境中注册和注销设备。 向企业中注册的过程在本质上是预配企业希望在设备上强制执行的配置和设备管理策略的过程。 这通常是通过将设备注册到企业的设备管理服务器中(通过网络连接)来完成的。 这样,用户就能够通过设备访问企业的资源,而企业能够管理和控制访问以及设备本身。

企业注册和预配引擎执行的配置之间的主要区别在于:

  • 注册在用户可能没有完全控制权限的设备上强制执行一组受限和受控的策略。 预配引擎公开一个较大设置集,该设置集可配置设备的更多方面并且通常可由用户进行调节。
  • 策略管理器管理来自多个实体的策略设置,并基于实体的优先级执行选定的设置。 预配引擎应用设置,但不提供区分来自不同源的设置的方法。 更具体的预配是最后一个应用的预配,即所使用的预配。
  • 会存储通过不同注册实体应用的各个策略设置,这样可以在注销过程中删除它们。 因此,用户可以删除企业策略并将设备返回到没有企业限制和任何敏感数据的状态。 预配引擎不维护各个预配设置或回滚所有已应用的设置的方法。

在 Windows 10 中,需要通过预配来应用策略和注册,以支持企业或教育机构没有用于全面设备管理的 DM 服务器的情况。 预配引擎支持通过其配置以及与现有策略和资源管理器组件的集成来直接预配注册和策略,或者通过配置管理器进行预配。

触发器和阶段

触发器是在系统的生存期中发生的能够启动预配阶段的事件。 触发器的一些示例包括:启动、OOBE、更改 SIM 卡、添加用户、添加管理员,用户登录、更新设备和各种手动触发器(如通过 USB 部署或通过电子邮件附件或 U 盘启动)。

触发器发生时,会针对特定的预配阶段启动预配。 阶段基于设置的作用于分组为不同的集合:

  • 静态:针对预配运行的第一阶段,用于将配置设置应用于系统,以设置 OOBE 或应用在创建映像时无法实现的设备范围的设置。
  • 系统:在 OOBE 期间运行,配置系统范围的设置。
  • UICC:针对设备中的每个新 UICC 运行的 UICC 阶段,用于基于 UICC 或 SIM 卡的标识处理配置和品牌。 这可以启用运行时配置方案,其中 OEM 可以维护一个可以针对多个运营商配置的映像。
  • 更新:在更新之后运行,用于应用潜在的更新设置更改。
  • 用户:在用户帐户首次运行期间运行,用于配置每用户设置。

OOBE 期间的设备预配

预配引擎始终应用保留在 OS 分区上的 C:\Recovery\Customizations 文件夹中的预配包。 当预配引擎应用 %ProgramData%\Microsoft\Provisioning 文件夹中的预配包时,某些运行时设置应用程序(如用于安装和配置 Windows 应用的设置)可能会超越 OOBE 阶段,在设备到达桌面时在后台继续处理。 用于配置策略和某些关键系统配置的设置始终在其必须生效的第一点之前完成。

当设备首次启动到 OOBE 时,设备用户可以应用远程源中的预配包。 仅在配置第一个 OOBE UI 页面上的语言、区域设置、时区和其他设置之后,才会触发 OOBE 期间的设备预配。 触发设备预配之后,会在 OOBE 页面中显示预配 UI。 预配 UI 允许用户选择从远程源(例如通过 NFC 或可移动媒体)获取的预配包。

下表显示了如何在用户首次启动到 OOBE 时启动设备预配。

包传递 启动方法 支持的设备
可移动媒体 - USB 驱动器或 SD 卡
(包必须放置在媒体根)
五次快速点击 Windows 键以启动预配 UI 所有 Windows 设备
从管理员设备通过计算机到计算机 NFC 或 NFC 标记
(管理员设备必须运行可以通过 NFC) 传输包的应用
五次快速点击 Windows 键以启动预配 UI Windows IoT 核心版设备

预配引擎始终先将获取的预配包复制到 %ProgramData%\Microsoft\Provisioning 文件夹中,然后再在 OOBE 期间处理它们。 在 Windows 安装程序 OOBE 阶段期间,预配引擎始终应用嵌入在已安装的 Windows 映像中的预配包,无论该包是否已签名且受信任都是如此。 当预配引擎在 OOBE 期间在最终用户设备上应用加密的预配包时,用户必须首先提供有效的密码才能解密该包。 预配引擎还会检查预配包是否已签名且受信任;如果不是这样,则必须经过用户同意才能将该包应用到设备。

当预配引擎在 OOBE 期间应用预配包时,它仅将该包中的运行时设置应用到设备。 运行时设置可以是系统范围的配置设置,包括安全策略、Windows 应用安装/卸载、网络配置、启动 MDM 注册、文件资源预配、帐户和域配置、Windows 版本升级,等等。 预配引擎还会检查设备上是否存在配置设置(例如区域/区域设置或 SIM 卡),并应用符合条件的多变量设置。

在运行时的设备预配

在设备运行时,可以通过用户启动应用独立的预配包。 下表显示在设备运行时可以启动预配的时间。

包传递 启动方法 支持的设备
可移动媒体 - USB 驱动器或 SD 卡
(包必须放置在媒体根)
设置>帐户>访问工作单位或学校>添加或删除预配包 所有 Windows 设备
通过网络连接下载并复制到本地文件夹中 双击包文件 桌面版设备的 Windows 客户端
从通过 USB 叠接连接到目标设备的管理员设备 将包文件拖放至目标设备 Windows IoT 核心版设备

当从附加到设备的可移动媒体应用预配包时,在选择包进行预配之前,“设置”UI 允许查看包的内容。 若要最大程度地降低设备通过应用来自未知来源的预配包而收到垃圾邮件的风险,可对预配包进行签名和加密。 合作伙伴还可以设置用于限制在设备运行时应用预配包的策略。 在设备运行时应用预配包需要具有管理员权限。 如果包未进行签名或不受信任,则必须经过用户同意才能将包应用到设备。 如果包已加密,则需要使用有效密码解密包,然后才能将其应用到设备。

当将多个预配包应用到设备时,通过使用在包元数据中定义的包所有者类型和包排名级别的组合评估包排名,预配引擎可解决具有来自不同包的冲突配置值的设置。 从具有最高包排名的预配包应用的配置设置将是应用到设备的最终值。

将独立的预配包应用到设备后,该包将保留在设备上的 %ProgramData%\Microsoft\Provisioning 文件夹中。 管理员可以通过使用设置>帐户>访问工作单位或学校下提供的添加或删除预配包删除预配包。