Windows 中的功能锁定
Windows 中的功能锁定是在 Microsoft Windows 新版本开发期间使用的一种措施。Microsoft 曾多次使用各种机制在 Microsoft Windows 的预发布版本正式推出新功能之前将其隐藏起来。
Windows 7
Windows 7 的开发标志着第一次有意识地引入集中工作来隐藏新功能。围绕 Build 6608 引入了两种单独的机制:
- Redpill,是一系列注册表检查,通常存在于实现隐藏功能的可执行文件中。用于启用 Superbar、桌面幻灯片、“开始”菜单固定、跳转列表、Internet Explorer 8 增强功能、Aero Peek 和 Aero Shake。
- Bluepill,在应用程序兼容性引擎中实现。它仍然会导致注册表检查,尽管是间接的。用于启用新版本的计算器、画图、便笺和写字板。
Build 7022 是已知的最后一个包含 Redpill 和 Bluepill 的版本。
Windows 8
在 Windows 8 的开发过程中引入了一种更复杂的功能锁定系统,称为 Redpill 或 SuperPill,它现在利用了许可子系统以及基本系统中未包含的组件。隐藏在 Redpill 后面的值得注意的功能包括开始屏幕、重新设计的登录 UI、新的 OOBE、资源管理器中的功能区、新的 Aero 资源和模式登录(后来成为图片密码登录)。然而,虽然大多数隐藏功能都使用 Redpill 锁定,但在某些区域,简单的注册表检查仍然是首选方法。
产品策略(通常用于确定特定版本可以做什么或不能做什么的一组值)现在也用于控制 shell 功能。这使得克服保护变得更加困难,因为大多数许可数据主要在内核级别进行签名和处理。将 Redpill 策略传送到现有安装中的预期方法(全新安装不附带它们)是使用参数 configextension=rpp
针对内部 win8act
服务器进行激活。手动解锁功能意味着需要牺牲部分许可功能。除了产品策略来源的值外,Redpill 隐藏的相当大块行为还依赖于一个名为 shsxs.dll
的外部库,此库不包含在基本 Windows 安装中,仅在激活 Redpill 时复制。此库包含大量图像和 DirectUI 标记资产,以及用于初始化 Metro 各个部分的少量函数,例如超级按钮栏(Charms bar)、“开始”屏幕搜索和 PC 设置应用。
从 Milestone 1 到 Developer Preview 之后不久(目前为 7779 到 8118)的几乎所有版本都实施了 Redpill。豁免是来自 fbl_eeap
和 winmain_win8m3_eeap
分支的版本,例如 Build 8064,它们没有实施任何形式的 Redpill,因为在编译时从操作系统中删除了 Metro 用户界面组件的所有痕迹。这些版本通过生态系统工程访问计划(EEAP)发布给 Microsoft 合作伙伴。唯一开箱即用解锁 Redpill 的可用版本是 Build 8102,即原始 Developer Preview。由于此机制的复杂性,以前在其他版本上解锁 Redpill 的一种广泛方法是使用 Build 8102 中修改后的一组组件,尽管这种方法的可靠性随着早期版本的增加而降低。直到引入 Redlock 并从头开始重新实现自定义版本的 shsxs.dll
后,Redpill 才能在 Build 7927 之前的版本中解锁。
解锁程序
已经开发了几个工具来启用 Redpill 隐藏的功能:
- RedPill Enabler(也称为 MDL Redpill Enabler,以其首次发布的论坛命名)是首批旨在启用受 Redpill 限制的功能的公共应用程序之一。它由 My Digital Life 论坛成员 Vizion 开发,并于 2011 年 6 月 17 日首次发布。
- Metro Unlocker 由 YouTuber 兼开发者 MetroFetro 开发。它是第一个允许启用所有受限功能(包括“开始”屏幕)的公共应用程序,并且从 2016 年的初始版本到 2020 年 Redlock 的发布,它仍然是唯一能够执行此类任务的应用程序。
- Redlock 由 lucasm 和 gus33000 开发,他们是两位 BetaWiki 成员和软件开发者。初始版本于 2020 年 1 月 29 日发布。此工具旨在尽可能接近地复制 Microsoft 的原始 Redpill 实现。
Windows 10 及以上版本
自 Windows 10 周年更新以来的 Windows 版本使用简化的功能锁定机制,此机制使用内部称为 Velocity 暂存密钥的数字字符串。这些值由 Windows\System32
目录中的动态链接库 fcon.dll
(功能配置,Feature Configuration)控制,此库负责管理 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FeatureManagement
键(和相关子项,如 Overrides
和 EnterpriseTempControls
)中的功能启用。如果库检测到现有覆盖的问题,还可以通过使用上次已知良好存储(位于 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FeatureManagement\LastKnownGood
)从其以前的状态恢复功能。内置功能覆盖早在 Windows 11 Build 22606 中就引入了。
某些功能的可用性可能取决于关联暂存密钥的当前状态。在大多数情况下,如果优先级数据返回 8(User
),则可以修改功能状态。在某些情况下,如果某个功能的优先级返回 ImageDefault
,则可以在代码中强制启用或禁用此功能。这种类型的功能锁定还引入了一种称为“variants”的数据类型,此数据类型为同一暂存密钥提供多个实现方法。处理方法可能因设备和安装而异。
目前,在较新 Windows 版本中引入的大多数功能都采用此方法来隐藏和/或测试尚未准备好向一组有范围的用户广泛发布的功能。使用这种新功能锁定机制的第一个已知功能是“集”(Sets),它首次在 Windows 10 Build 17618 中引入,具有暂存密钥 13849566
和 10727725
。通过 Windows 注册表进行的传统功能启用检查仍然是操作系统某些方面的常态选择。
工具
有四个可用工具可用于管理 Velocity 暂存密钥的状态:
- ViVeTool —— 由 Albacore 开发,推荐用于在 Windows 10 和 11 的更高版本中启用功能。
- mach2 —— 由 Rafael Rivera 开发,用于启用旧版 Windows 10 中的功能,例如 Build 17618 的集(Sets)和 18946 的新“开始”菜单。自 2020 年 12 月起停止开发。
- 设置中的“实验性功能”下拉菜单(“Windows 更新”>“Windows 预览体验计划”);Velocity 暂存密钥
40062046
—— 作为内部 Windows 版本的一部分包含在内(例如:Build 25267,rs_wdatp_edr 分支)。它是 Microsoft 员工内部用于启用各种暂存密钥的两种官方方法之一,例如来自 Microsoft 安全响应中心(MSRC)的安全修复、非公共 shell 功能以及内部 Windows 功能(如 DirectX 图形堆栈)的 bug 修复或改进。它可能不会列出当前未完成的要素。 - Staging Tool(
StagingTool.exe
,版本10.0.25910.1000
):这是 Microsoft 员工使用的另一个官方内部工具,通过使用基于命令行的用户体验来管理和配置 Velocity 暂存密钥的状态,无意中分发在 2023 年 8 月 2 日公开的两个内部反馈中心任务中。此链接后来被删除,尽管网上存在此工具的存档版本。
Staging Tool 帮助命令
StagingTool [version 10.0.25910.1000 (WinBuild.160101.0800)] [StagingTool.exe] Controls the feature configurations for this device Usage: StagingTool.exe [/enable <featureId>] [/disable <featureId>] [/query [featureId]] [/reset <featureId>] [/testmode] [/setvariant <featureId> <variantId> [payload]] [/serialize] [/setlkg] [/restorelkg] [/trace <featureId1> [<featureId2> ... <featureIdN>]] [/setbootconfigs <jsonFile> <registryPath>] /enable Enable the specified feature /disable Disable the specified feature /query Query the specified feature (or all features, if featureId is omitted) for enablement and variant information /v Optional parameter to also print ImageDefault and ImageOverride features /reset Reset the specified feature to its default state <featureId> Specifies a feature by its feature Id Example: Enable features with Id 1 StagingTool.exe /enable 1 /testmode Used in conjunction with /enable /disable /reset Applied feature configs will revert after reboot /telemetry Used in conjunction with /enable /disable /reset Enables sending additional telemetry /setvariant Select a feature variant to use (note: the feature must be enabled for variants to be expressed). Use /query to list configured variants. <featureId> Specifies a feature by its feature Id <variantId> Specifies a feature variant by id. [payload] (Optional) Unsigned int payload for the variant (for variants that support fixed payload) /serialize Rather than apply changes to the local machine, use this option to print out (in reg.exe/hex format) a new config with all of the requested changes. This can be used for offline updates to VHDs prior to first boot. /setlkg Set Boot time feature override states as LKG Configurations /restorelkg Restore Boot time LKG configurations states Feature Configurations /trace Realtime ETW trace for the specified feature(s) usage in code E.g. enable trace for the feature with ID 1235441: StagingTool.exe /trace 1235441 /? Show command usage
图库
-
在 Windows 11 Build 25267(rs_wdatp_edr)中启用了“实验功能”下拉列表的 Windows 预览体验计划页面