DanielLMcGuire/XboxSeries
GitHub: DanielLMcGuire/XboxSeries
一份通过官方开发者模式对Xbox Series S完整架构进行的深度逆向研究文档,揭示了从hypervisor到应用层的虚拟化隔离机制、安全边界与跨分区通信模型。
Stars: 20 | Forks: 2
# Xbox Series:内部架构研究
| 字段 | 值 |
|-------|-------|
| **日期** | 2026年3月9-12日 |
| **硬件** | Xbox Series S (代号:Lockhart) |
| **系统版本** | `26100.7010.amd64fre.xb_flt_2602ge.260212-1010` |
| **访问方式** | 开发者模式 + SSH + REST API + NTFS 文件共享联合 |
## 概要
本报告记录了对 Xbox Series S 内部架构的静态和动态分析,完全通过微软官方的开发者模式基础设施进行。未使用任何漏洞利用或违反策略的手段;所有访问均在个人开发者计划的权限范围内。
本文包含从用于游戏游玩的最高层组件,到最低层系统驱动组件的详细信息。预计其中大部分细节同样适用于 Xbox One。
## 说明
```
ERA = GameOS Partition
SRA = SystemOS Partition
HT = Kinect (possibly "Human Tracking")
Arden = Xbox Series X/S GPU Stack
NewBe = Arden shader compiler
```
### 关键发现
**主机 OS 对驱动的管理存在于已知的 SRA/ERA 模型之外,参见信任模型(第 4.2、17.5 节)。** `XVIO.SYS` 和 `XSraFlt.sys` 由 hypervisor 在 Windows 初始化之前直接加载,且在所有可访问的卷中均不存在。即使在拥有完整内核访问权限的情况下,它们也无法被篡改,这是主要的安全边界。
**HVCI 被有意禁用(第 18 节)。** `IsSecureKernelRunning = 0x0` 确认 Secure Kernel (VTL1) 未运行。代码完整性仅限加载时检查,一旦二进制文件被映射,就会留下 TOCTOU 漏洞窗口。这是一种刻意的性能权衡;安全边界是 hypervisor 分区,而非分区内的内存保护。
**NTFS 联合通过网络暴露完整的 SystemOS 文件系统(第 1.2 节)。** 从 SSH shell 执行的单个 `mklink /J` 命令可以将 `C:\` 或其他任何路径映射到设备门户文件共享中,使得除开发者模式 PIN 外无需额外身份验证即可远程读取所有系统二进制文件。
**跨分区架构已近乎完全映射(第 4、14、26-28 节)。** ERA 游戏分区仅通过 hypervisor 介导的通道与 SystemOS 通信:用于 I/O 的 XVIO 环形缓冲区、用于共享内存的 GPA 转换、用于 IPC 的 HvSocket,以及由父级“Host OS”授予的用于零拷贝帧缓冲传输的 ALPC 端口部分。
**`Deploy:\` 联合绕过本地访问限制(第 25 节)。** 本地受限制的 Windows 更新卷,完全可以通过网络共享路径经由 `S:\Deployment\SoftwareDistribution\` 处的联合(如 `\\XBOX\DevelopmentFiles\S\` 路径)进行访问,考虑到同一用户账户无法通过 SSH 访问该路径,这一点颇为奇怪。
### 范围与限制
所有测试均在处于开发者模式的单台零售版 Xbox Series S 主机上完成。结果反映的是版本 `26100.7010`(2026年2月12日)。在不同硬件版本(Series X、Xbox One)和固件版本上,结果可能有所不同。部分内核级表面无法触及:实时内核转储被 `NoKernelDumps` 限制所阻止,且 `xvmctrl.sys` IOCTL 表面未完全枚举。未解决的问题记录在第 12 节中。
## 方法论
### 使用的工具
| 工具 | 用途 |
|------|---------|
| Windows 资源管理器 | Xbox 网络驱动器 (DevToolsUser) |
| SSH (`DevToolsUser` + VS PIN) | SystemOS 的 Shell 访问权限 |
| `mklink /J` | 创建 NTFS 联合以通过网络共享暴露驱动器 |
| 设备门户 (`https://XBOX:11443`) | REST API、文件浏览器、进程列表、实时转储 |
| `dumpbin /IMPORTS`, `dumpbin /EXPORTS` | 通过网络共享对 PE 二进制文件进行静态分析 |
| [PowerShell](https://github.com/PowerShell/PowerShell) | 通过网络共享对编录文件进行二进制分析 |
| [Python](https://github.com/python/cpython) | [自动化 REST API 的脚本](https://github.com/DanielLMcGuire/xboxtools/blob/master/wdp_rest.py) |
| [Phasor](https://github.com/DanielLMcGuire/Phasor) | 用于主机上的脚本运行时 |
| `reg query` | 从 SSH shell 枚举注册表 |
| `WdApp.exe` | 包管理器和 ERA 生命周期控制(命令表面枚举) |
| `WdConfig.exe` | 主机设置 API 枚举 |
| ETL 跟踪分析 | 通过 `S:\Deployment\SoftwareDistribution\` 联合进行 Windows 更新管道分析 |
| 实时进程转储 | `GET /api/debug/dump/usermode/live?pid=` |
| [Ghidra](https://github.com/NationalSecurityAgency/ghidra) | COM 接口/驱动分析 |
| [XboxTools](https://github.com/DanielLMcGuire/xboxtools) | 我自己收集的用于各种用途的实用程序 |
### 方法
通过官方文档中记载的 Dev Mode SSH 接口建立访问权限。NTFS 联合技术(第 1.2 节)将读取访问权限从 `D:\DevelopmentFiles` 临时空间扩展到了完整的 `C:\` 系统卷及所有其他盘符卷。所有分析均为只读;未修改任何系统设置(未使用 `WdConfig.exe set`)。Xbox 可以通过 SSH shell 直接运行标准的 x86_64 Windows 控制台二进制文件(使用 /MT 编译),这被用于在本地运行分析工具。
内核转储不可用:`NoKernelDumps` 设备门户限制在零售版开发者模式上阻止了此功能。用户模式实时进程转储可用,并在相关处进行了使用。
## 1. 远程访问
### 1.1 Shell 访问
Xbox 开发者模式支持 Visual Studio,许多人可能不知道它使用的是 SSH:
- 用户名:`DevToolsUser`
- 密码:Dev Home 中显示的 Visual Studio PIN
### 1.2 文件系统访问
位于 `https://XBOX:11443` 的设备门户向 `D:\DevelopmentFiles` 暴露了一个未公开文档的 NTFS 文件共享。从 SSH shell 执行:
```
mklink /J D:\DevelopmentFiles\C C:\
```
这将创建一个从开发者临时空间到系统 C: 驱动器根目录的联合点,将整个 SystemOS 文件系统作为可读的网络共享暴露在:
```
\\XBOX\DevelopmentFiles\C
```
这允许直接从 PC 上通过网络针对 Xbox 系统二进制文件运行 `dumpbin` 等工具。
## 2. OS 身份
| 字段 | 值 |
|--------------------|-------------------|
| 产品名称 | Xbox Series S |
| OS 版本 | SystemOS |
| Windows NT 版本 | 10.0 |
| 版本号 | 26100 |
| 版本字符串 | `26100.7010.amd64fre.xb_flt_2602ge.260212-1010` |
| 分支 | `xb_flt_2602ge` |
| 构建日期 | 2026年2月12日 |
| 架构 | x64 |
| UEFI 安全启动 | `NotCapable` |
| 主机代号 | Lockhart |
| 主机模式 | Default |
| 沙盒 ID | `XDKS.1` |
OS 标识为 **SystemOS**,而非 Windows。构建分支 `xb_flt_2602ge` 似乎是 Windows 代码库的一个独特 Xbox“分支”,但仍与 Windows 11 非常相似。某些 Windows 系统二进制文件与桌面版完全一致,使用相同的 MSVC 工具链构建,可能源自相同的 UUP 包。这与尚不明确的“Host OS”是分离的。
### 2.1 被刻意擦除的注册表身份
几个 `CurrentVersion` 字段已被有意剥离或冻结:
| 键 | 值 | 注释 |
|-----|-------|-------|
| `CurrentVersion` | `6.3` | 内部报告为 Windows 8.1,以保持兼容性 |
| `BuildGUID` | | 归零/擦除 |
| `InstallDate` | `0` | 无安装时间戳 |
| `EditionID` | `SystemOS` | 从未更新 |
| `ReleaseId` | `2009` | 冻结在 Windows 10 20H2 时代;从未递增 |
## 3. 卷布局
主机暴露了 13 个驱动器盘符,大多数未公开文档:
| 驱动器 | 标签 | 内容 | 注释 |
|-------|-------|----------|-------|
| `C:` | System Boot | Windows OS 文件 | 标准 SystemOS 分区 |
| `D:` | *(无)* | `DevelopmentFiles\` | 开发者模式临时空间 |
| `G:` | *(无)* | `GameDVR_VideoBuffer` (272MB), `GameDVR_AudioBuffer` (16MB), `GameDVR_AudioBuffer_SysLoopback` (3MB) | 原始环形捕获缓冲区,ERA 与 SystemOS 间的共享内存 |
| `J:` | Sys Tools | XTF 工具链、驱动程序、QuickActions | 见第 5 节 |
| `M:` | System OS Misc | 包含主机特定的 NTFS 覆盖层,用于库和驱动程序 |
| `N:` | *(无)* | `BlackBox\`, `EtwPlus\`, `CMS\`, `errorstrings\`, `usersettings\` | 诊断和遥测卷,见第 3.2 节 |
| `Q:` | *(无)* | `Users\DevToolsUser\` | 用户主目录 |
| `S:` | *(无)* | `apps\`, `Clip\`, `Deployment\`, `Prefetch\`, `Microsoft\`, `ProgramData\` | 可能是 Host OS 卷(也包含默认应用和其他资源) |
| `T:` | *(无)* | `GameDVR\`, `Update\`, 指向 Harddisk16 的联合 | GameDVR 元数据 + 更新管道 |
| `U:` | *(无)* | `ShellState\`, `BackCompatLicenses\`, `UserDataCache\` | Shell 和用户状态 |
| `V:` | *(无)* | *(空)* | 用途不明 |
| `X:` | SystemAux | `Apps\`, `Catalog000.bin` (2.3MB) | 系统应用二进制文件:63 个应用,包括 `AdsLauncher`, `Xbox.DiscordComponent`, `Xbox.SingleUserProxy`, `Xbox.NTSCaptivePortal`, `Xbox.Xmap`, `Xbox.XboxIDP`,见第 3.3 节 |
| `Y:` | SystemAuxF | `Apps\`, `Catalog000.bin` (6.5MB) | 次级系统应用二进制文件 |
此外,存在 `\\.\HarddiskVolume10` 但未分配驱动器盘符。有一个隐藏的 WER (Windows 错误报告) 卷,包含 `CrashDumps\`, `ReportArchive\`, `ReportQueue\`, 和 `Temp\`。至少存在 **18 个物理磁盘设备对象**(`PhysicalDrive0` 至 `PhysicalDrive17`),均作为内核对象存在,但在用户态的原始级别无法访问。`HarddiskVolume16` 和 `HarddiskVolume18` 作为真实可访问卷存在,但被 `DevToolsUser` 阻止访问。
### 3.1 隐藏的内核设备路径
以下路径作为内核设备对象存在,但无法从用户态访问:
- `\??\Deploy:\` Xbox 更新/部署管道卷(通过 `S:\Deployment\` 中的联合引用)
### 3.2 N:\ 诊断卷
`N:\` 上的几个目录在内核级别被文件系统过滤驱动程序主动隐藏,因为它们对所有用户态工具显示为空,但已确认在运行时被写入:
| 路径 | 状态 | 注释 |
|------|--------|-------|
| `N:\EtwPlus\` | **内核隐藏** | 内容被文件系统过滤驱动程序隐藏 |
| `N:\BlackBox\` | 可访问 | 包含 Xbox 特有的 ETL 崩溃报告遥测数据 |
| `N:\errorstrings\en-US.json` | 可访问 | 完整的 Xbox 错误字符串数据库,包含 797 个条目,见第 3.4 节 |
| `N:\usersettings\18\public\` | 可访问 | 以无扩展名 PNG 格式存储的高清玩家图片 (1080×1080 RGBA, 标准 PNG 格式) |
`N:\usersettings\18\public\` 同时存储 `AppDisplayPic` 和 `GameDisplayPic` 作为无扩展名文件。SHA256 哈希确认它们字节级完全相同,应用显示图片和玩家图片是写入两个路径的同一文件。
### 3.3 X:\ SystemAux
`X:\ht\versions\` 包含一个活动的 Kinect 视觉堆栈,**三个版本同时安装** (1.0.0, 1.0.1, 1.0.2),总计119MB。这些对应 `vvtechs.dll` 构建版本,大小分别为 1.67MB->1.70MB->1.85MB。
**身体追踪 ML 模型**(按版本目录):
| 文件 | 大小 | 用途 |
|------|------|---------|
| `exemplardb.xmplr` | 36.7MB | 全身姿态样本数据库 |
| `FernsModel.bin` | 932KB | 深度关键点检测器(随机蕨分类器) |
| `HeadPosition.mshdf` | 262–393KB | 头部关节估计器(因版本而异) |
| `LSVMGripReleaseRight.gbd` | 7.5KB | 潜在 SVM 握持/释放分类器,右手 |
**面部追踪 ML 模型**(系统级,`C:\Windows\System32\ht\`):
| 文件 | 大小 | 用途 |
|------|------|---------|
| `FaceDetector.bin` | 3.0MB | 在帧中定位人脸 |
| `FaceRecognition.bin` | 3.4MB | 深度/红外身份识别 |
| `FaceRecognition_Color.bin` | 5.9MB | 彩色通道身份识别 |
| `ExpressionRandomForest.model` | 150KB | 情绪分类器 |
| `EyeLeftRandomForest.model` | 55KB | 左眼状态 |
| `EyeRightRandomForest.model` | 65KB | 右眼状态 |
| `LookingAwayRandomForest.model` | 42KB | 视线/注意力检测 |
| `MouthOpenRandomForest.model` | 58KB | 张嘴状态 |
| `MouthMovedRandomForest.model` | 35KB | 嘴唇运动 |
| `FacialHairIRRandomForest.model` | 126KB | 面部毛发(仅限红外传感器) |
| `GlassesIRRandomForest.model` | 206KB | 眼镜检测(仅限红外传感器) |
所有面部属性分类器均为 **Random Forest** 模型。输出涵盖身份、表情、视线、嘴唇状态和外观属性。
堆栈中的 `vvtechs.dll` 导出单个函数:`NuiVisionCreateFactory`。它导入 `EtwPlus.dll` 和 `D3D11`,确认 Kinect 视觉管道运行在 GPU 上并使用 Xbox 特有的遥测路径。这在没有连接物理 Kinect 的硬件上也是活动的(另见第 6 节中的 `KinectSensorEnabled=true`,以及第 33 节中完整的 `nuiservice.exe` 管道)。
### 3.4 N:\errorstrings\en-US.json 错误代码数据库
797 个 Xbox 错误字符串条目。具有安全或架构相关性的值得注意的代码:
| 错误代码 | 字符串 | 注释 |
|------------|-----------------|-------|
| `0x887E0002` | D3D12.X 运行时/驱动不匹配 | 确认 D3D12.X 是 Xbox 特有的 D3D12 变体,而非通用 D3D12 |
| `0x80A40406` | 开发者模式下已启用增强版 Microsoft 遥测 | 开发者模式明确选择让主机进入增强的遥测收集状态 |
## 4. Hypervisor 架构
Xbox 使用定制的基于 Hyper-V 的 hypervisor,运行两个分区:
- **SystemOS** SRA 分区
- **ERA 分区** GameOS / Title OS 执行环境
### 4.1 驱动堆栈
```
User space: xpal.dll
↓
Kernel: xpalk.dll
↓
xvmctrl.sys (364KB)
↓
Hypervisor: XVIO.SYS
```
### 4.2 关键 Hypervisor 驱动
| 驱动 | 大小 | 用途 |
|----------------|-------|---------|
| `xvmctrl.sys` | 364KB | VM 控制,主要 hypervisor 接口,IOCTL 表面 |
| `XVIO.SYS` | 未知 | Xbox 虚拟 I/O,直接 hypervisor ABI(不在 SystemOS 文件系统上) |
| `xvioc.sys` | 未知 | XVIO 客户端,SystemOS 端的 XVIO 接口 |
| `xvbus.sys` | 73KB | 虚拟总线根 + HvSocket XVIO 提供者 |
| `hvsocket.sys` | 185KB | Hyper-V 套接字实现 |
| `VMNP.SYS` | 106KB | VM 命名管道,跨分区模拟 |
| `Xrfs.sys` | 135KB | Xbox 运行时文件系统 |
| `XRmnt.sys` | 49KB | Xbox 运行时挂载驱动 |
| `XRo.sys` | 95KB | Xbox 运行时对象/覆盖层 |
**关键发现:** `XVIO.SYS` 和 `xpalk.dll` **没有注册表服务条目**,并且**从 SystemOS 文件系统中缺失**。它们很可能是在 SystemOS 启动之前由 Host OS 在引导时加载的,完全处于本地驱动模型之外。这是真正的安全机制;即使拥有完整的 SystemOS 内核访问权限,这些组件也无法被篡改。
### 4.3 XVIO API 表面(从导入重构)
来自 `xvmctrl.sys`、`xviomonc.sys` 和 `srakmd_arden.sys` 对 `XVIO.SYS` 的导入:
```
XvioInitialize / XvioCleanup
XvioCreateEvent
XvioPostMessage
XvioGetCurrentPartitionId (identifies active partition, from xviomonc)
XvioGetReservedMemory (hypervisor carve-out RAM access, from srakmd_arden)
XvioRegisterGpaMdl / XvioUnregisterGpa (Guest Physical Address mapping)
XvioSfrMapPages / XvioSfrUnmapPages (Shared Frame Region, cross-partition GPU memory)
XvioSfrCounterGet / XvioSfrPerfCounterSet
XvioSfrReadEvent
XvioSetFocus (switches input focus between partitions)
XvioSetSystemTime
XvioSaveProvidersState / XvioRestoreProvidersState
XvioPerfMonitoringEnabled
XvioCreateRingBuffer / XvioDestroyRingBuffer
XvioGetRingBufferContext
XvioReadRingBuffer / XvioReadRingBufferEx / XvioWriteRingBuffer
XvioAcquireRingBufferRundown / XvioReleaseRingBufferRundown
```
`XvioRegisterGpaMdl` 和 SFR 函数是 hypervisor 内存共享机制,原始 RAM 和 GPU 帧缓冲页跨分区边界映射。
### 4.4 HvSocket 跨分区服务
`hvsocket.sys` 暴露用于跨分区套接字通信的服务:
- `HvSocketGetPartitionConnections` / `HvSocketGetPartitionListeners` 枚举活动通道
- `HvSocketGetVmIdFromVmbusHandle` VMBus 句柄解析
- `HvSocketUpdateServiceTable` 所有跨分区服务的注册表
一个 GUID 命名的 DLL `[已编辑]_hvsocket.dll` 注册了一个 HvSocket 服务提供者。该 GUID 已被编辑,以防其可能被识别。
四个通配符 HvSocket 端点 GUID 已通过 SHA1 服务 SID 计算解析,完整详情见第 20 节,包括 DiagTrack、RpcSs 和 EventLog 跨分区通道。
## 5. J:\ "Sys Tools" XTF / 开发卷
本研究最重要的发现。`J:\` 卷(标签为 "Sys Tools")包含 **Xbox 工具框架 (XTF)**,即微软内部开发者套件工具链,它显然存在于每一台零售版 Xbox 上。完整枚举:该卷上共 **132 个文件,52MB**。
### 5.1 XTF 扩展注册表 (`J:\tools\xtfextensions.txt`)
所有 20 个 XTF 扩展均注册了 COM CLSID:
| DLL | CLSID |
|----------------------------|------------------|
| `XtfApplicationServer.dll` | `{10B16182-...}` |
| `XtfConsoleControl.dll` | `{5B45D0E0-...}` |
| `XtfConnectedStorage.dll` | `{9D610BBD-...}` |
| `XtfDebugMonitor.dll` | `{9141933C-...}` |
| `XtfDebugCaptureServer.dll` | `{F306F5C7-...}` |
| `XtfFileIO.dll` | `{8A8B4D4C-...}` |
| `XtfInput.dll` | `{7CC4D09B-...}` |
| `XtfPix.dll` | `{9BD151A3-...}` |
| `XtfGameStreaming.dll` | `{AA627F22-...}` |
| `XtfDiagInfo.dll` | `{FD21AC23-...}` |
| `XtfStressServer.dll` | `{6B5B0C75-...}` |
| `XtfSymbolProxyServer.dll` | `{69ABF3A1-...}` |
| `XtfPerf.dll` | `{F82AF734-...}` |
| `XtfRemoteRun.dll` | `{D77FE8B8-...}` |
| `XtfUser.dll` | `{2E302BAA-...}` |
| `XtfAuditioning.dll` | `{B91F5206-...}` |
| `XtfCleanup.dll` | `{9CF818E5-...}` |
| `XtfCredentialsServer.dll` | `{8582A384-...}` |
| `XtfEventServer.dll` | `{749FDEFA-...}` |
| `XtfUpdateT_s.dll` | `{DCDD4E77-...}` |
### 5.2 Visual Studio 远程调试器 (`J:\tools\debugmon\`)
```
msvsmon.exe
vsdebugeng.dll (1.5MB)
vsdebugeng.impl.dll (1.6MB)
msdia120.dll
diagnosticsscripthost.dll
vsdebuglaunchnotify.exe
```
VS 2015 到 VS 2022 的版本化调试负载(`debugmondev14payload` 到 `debugmondev16payload`)。**三个世代的 Visual Studio 远程调试器同时存在并已注册:VS2015、VS2017 和 VS2019** 共存于同一个零售版主机文件系统上。
### 5.3 其他值得注意的工具
| 二进制文件 | 用途 |
|---|---|
| `agent-xbox.exe` (1.5MB) | 主 XTF 代理 |
| `xtfrtservice.exe` (1.3MB) | XTF 运行时服务宿主 |
| `xstudioserviceexe.exe` | Xbox Studio 服务 |
| `xperf.exe` | Xbox 性能分析器,存在且功能正常,但 **ETW 内核追踪被完全阻止,无论使用何种工具**(见第 5.5 节) |
| `videoserver.exe` (RTSP) | 独立的 RTSP 屏幕流媒体服务器 |
| `wdapp.exe`, `wdconfig.exe` | Wave 调试器/配置工具 |
| `wdcapture.exe` | 截图/视频捕获 |
| `wdgamestream.exe` | 游戏流控制 |
| `xboxnetapidiagsystem.exe` | Xbox Live 网络诊断 |
| `xbtp.dll` (503KB) | Xbox 宽带传输协议 |
| `xraytool.exe` | Xbox 主机性能工具(揭示了 Host OS 存在的事实) |
| `xstudioclient.dll` | Xbox Studio 客户端库 |
| `unattendedsetuphelper.exe` | 完整的主机管理工具包,见第 5.6 节 |
### 5.4 QuickActions `.xboxunattend` 格式
`J:\QuickActions\` 包含 `.xboxunattend` 格式的自动化脚本。这些是通过设备门户触发的普通 Windows 批处理脚本。可用操作:
- `Capture_Screenshot.xboxunattend` 调用 `wdcapture.exe screenshot`
- `Capture_Video.xboxunattend`
- `Toggle_ConsoleMode.xboxunattend` 通过 `WdConfig.exe` 循环切换硬件仿真模式
- `Toggle_HDR.xboxunattend`
- `Toggle_Resolution.xboxunattend`
- `Launch_DevHome.xboxunattend` / `Launch_RetailHome.xboxunattend`
- `Suspend_Title.xboxunattend`
`Toggle_ConsoleMode.xboxunattend` 揭示了传递给 `WdConfig.exe` 的完整性能分析模式标识符列表:`AnacondaProfiling`、`LockhartProfiling` 和 **`Scarlett 40 GB`**。
### 5.5 xperf / WPR
`xperf.exe` 和 WPR 完全存在且功能正常,包括一个 `NeuralProcessing` WPR 配置文件。然而,所有 ETW 内核追踪都被两个不同的错误代码阻止:
| 错误代码 | 含义 |
|------------|---------|
| `0x80070005` | `拒绝访问`,标准 Windows ACL 拒绝 |
| `0xc5585011` | `Xbox 策略阻止`,**此代码不存在面向用户的错误字符串**(`N:\errorstrings\en-US.json` 中不存在);从未预期会到达最终用户 |
ETW 提供者枚举在标准 ETW 命名空间中显示 **零个 Xbox 特有的提供者**。所有 Xbox 遥测通过 `EtwPlus.dll` 使用 `Etx` 前缀的函数流动,这是一条与标准 Windows ETW 完全分离的管道(见第 19.3 节)。
### 5.6 unattendedsetuphelper.exe 主机管理工具
`unattendedsetuphelper.exe` 是一个主机管理可执行文件,涵盖:
- 恢复出厂设置
- 基于网络的固件更新
- Toast/通知注入
- 设备门户管理
它也作为 `.xboxunattend` 脚本的运行时引擎(第 5.4 节中记录的 QuickActions 格式)。
## 6. WdConfig 设置表面
`J:\tools\WdConfig.exe` (构建版本 `10.0.26100.7010`) 暴露了完整的主机配置 API。值得注意的设置:
### 调试类别
| 设置 | 值 | 注释 |
|---||---|
| `ConsoleType` | `Lockhart` | 硬件标识符 |
| `ConsoleMode` | `Default` | `AnacondaProfiling`, `LockhartProfiling`, `Scarlett 40GB` |
| `EraGraphicsDriverMode` | `Title Configured` | 选项:`Retail`, `Instrumented`, `Validated`。SRA 对应项为 `SraGraphicsDriverMode = Retail`,ERA 和 SRA 使用独立的驱动模式设置 |
| `EnableKernelDebugging` | `false` | 阻止 ERA 崩溃拆除以附加内核调试器 |
| `EnablePixMemory` | `false` | 在 Lockhart 性能分析模式下额外预留 6048MB 用于 PIX |
| `CrashDumpType` | `None` | 选项:`Triage`, `Mini`, `Heap` |
| `TitlePerformanceOverlay` | `false` | 运行中游戏的实时 GPU/CPU HUD 覆盖层 |
| `ExtraTitleMemory` | `0` | Lockhart 性能分析模式下最大 6048MB |
| `LastShutdownReason` | `Console crash` | 重启后保留,我的主机上次关机时崩溃了 |
| `KinectSensorEnabled` | `true` | **在没有连接 Kinect 的硬件上设置为 true**,无论硬件是否存在,堆栈均已配置 |
### 网络类别
| 设置 | 值 | 注释 |
|---|---|---|
| `UseDebugNicForAllTraffic` | `false` | 存在独立的调试 NIC,与零售 NIC 分离。 |
### 存储类别
| 设置 | 值 | 注释 |
|---|---|---|
| `DevkitUseRetailConnectedStorage` | `false` | 如果启用,开发者模式将使用零售版连接存储分区。未测试。 |
| `RunFromPcDataCacheSizeInGB` | `100` | **默认为 Run-From-PC 游戏缓存预留 100GB;已锁定,用户无法更改** |
### 无人值守类别
| 设置 | 值 | 注释 |
|---|---|---|
| `AllowUsbUnattendScript` | `true` | USB 上的 `.xboxunattend` 脚本自动运行 |
| `RunUnattendScriptImmediately` | `false` | 如果为 true,USB 脚本在开机时运行,无需取消提示 |
### 安全说明
**Microsoft 账户电子邮件以明文存储。** 开发者模式 WdConfig 存储区包含以明文形式存储的已关联 Microsoft 账户电子邮件地址。这可能可以被任何拥有 SRA 访问权限的进程读取。
## 7. XCRDAPI.dll Xbox 内容分发 API
`XCRDAPI.dll` 是 Xbox 平台的内容管理内核。它在单个库中处理 DirectStorage、渐进式安装、DRM、xCloud 和 blob 存储。
### 7.1 DirectStorage
```
DStorageGetFactory
DStorageGetMappedControlPage
```
Xbox 的 DirectStorage 实现嵌入在 XCRDAPI 中,而非独立的 SDK。
### 7.2 XVD 生命周期
```
XCrdOpenAdapter / XCrdCloseAdapter
XCrdMount / XCrdMountContentType / XCrdUnmount / XCrdUnmountEx
XCrdCreateXVD / XCrdDeleteXVD / XCrdResizeXVD / XCrdGrowDynamicXvd
XCrdSetEraLaunchMapping associates XVD with ERA partition pre-launch
XCrdUpdateXvc / XCrdUpdateXvcEx
XCrdDefragXvc / XCrdTrimXvc / XCrdTrimXvd
XCrdRepairXvc
```
### 7.3 渐进式流式安装
```
XCrdStreamingStart / XCrdStreamingStop
XCrdStreamingQueryActiveInstanceId
XCrdStreamingQueryInformation / InformationByPath / InformationEx
XCrdStreamingQueryRegionInformation / ByPath
XCrdStreamingQueryRegionSpecifiers / ByPath
XCrdStreamingQueueInsertRegion
XCrdStreamingQueueQueryRegionList / ByPath
XCrdStreamingAdjustStreamingFlags
XCrdStreamingQueryRegionIdByOffset
```
完整的优先级队列渐进式安装管道。区域是游戏内容的可寻址块。
### 7.4 XCloud 集成
```
XCloudQueryFeatureBits
XCloudSetFeatureBits
```
xCloud 流媒体功能标志通过与本地内容相同的 API 进行控制。
### 7.5 DRM / 认证
```
XCrdQueryAttestationBlob
XCrdQueryEncryptedInfo / XCrdQueryUnlockInfo
XCrdIsSideloadedKeyPresent
XCrdEnableSharedPls / XCrdSetExternalPlsMapping
```
### 7.6 存储 Blob 系统
```
XCrdStorageCreateBlob / DeleteBlob / MoveBlob / CopyBlob
XCrdStorageReadBlob / ReadBlobEx / WriteBlob / WriteBlobEx
XCrdStorageQueryBlobAttributes
XCrdXBlobCreate / Delete / Copy
XCrdFindFirstBlob / FindNextBlob / FindCloseBlob
```
### 7.7 XVD 传输管道
```
XCrdXvdXferInitialize / Uninitialize
XCrdXvdXferStart / Stop
XCrdXvdXferRead
XCrdXvdXferGetResult
```
### 7.8 路径系统
```
XCrdXasBuildPath / XasBuildPathEx / XasKeyQueryValue (XAS App Store paths)
XCrdXdsGetVolumeMapping / XdsSetVolumeMapping (XDS Delivery Service volumes)
XCrdBuildPath / XCrdParsePath / XCrdUpdatePath
XCrdQueryDevicePath / QueryDevicePathByPath
XCrdSetFlatContentPath
```
## 8. xpal.dll Xbox 平台抽象层 (50 个导出)
此前未公开文档的 API,用于硬件身份、功能和电源管理。
### 硬件身份
```
XpalGetConsoleCertificate hardware certificate
XpalGetConsoleIdCch console hardware ID
XpalGetConsoleSerialNumberCch serial number
XpalGetSmcFirmwareId SMC firmware version
XpalGetSouthBridgeType chipset variant
```
### 代际 / SKU 检测
```
XpalIsGen8 Xbox One
XpalIsGen9 Series X/S
XpalGetGenerationType
XpalIsHyperV hypervisor active
XpalIsExternalDevkit / XpalIsInternalDevkit
XpalGetVmType
XpalGetSystemType / XpalGetServerType / XpalGetConsoleMode
```
### 功能标志
```
XpalIsCapabilityEnabled
XpalIsCapabilityEnabledByVm
XpalIsFactorySettingEnabled
XpalGetFactorySettings
XpalGetCapabilities
XpalIsFeatureEnabled
```
### 电源管理
```
XpalInitiateDump trigger crash dump on demand
XpalInitiatePowerStateToggle
XpalInitiateSystemShutdown
XpalSetWakeupTimer
XpalQueryPowerToggleSource
XpalIsInForcedCs / XpalIsTransitioningToConnectedStandby
XpalIsSilentBootMode
XpalNotifyForcedCsHeartbeat
XpalIsRebootRequested
XpalRefreshPowerChimeMode
```
### 配置
```
XpalGetXConfig / XpalSetXConfig Xbox config store (modern EEPROM equivalent)
XpalSetSystemTime
XpalSetInformation
XpalReportUem trigger UEM (Universal Error Message / BSOD equivalent)
```
### ERA / 游戏 VM
```
XpalQueryTitleVmInfo
XpalWaitForTitleVmTermination
XpalBackgroundActivityRequest
```
## 9. eracontrol.exe ERA 分区生命周期管理器
`C:\Windows\System32\eracontrol.exe` 以 LocalSystem 身份运行(手动启动),管理完整的 ERA 游戏分区生命周期。完整的导入分析见第 28 节。关键导入摘要:
- `NtOpenPartition` 直接打开 Hyper-V ERA 分区句柄
- `RtlSetProcessIsCritical` 将自身标记为关键(如果崩溃则系统 BSOD)
- `XCRDAPI.dll` 通过 `XCrdSetEraLaunchMapping` 挂载/卸载游戏 XVD
- `RIMAddInputObserver` / `RIMRemoveInputObserver` 拦截原始手柄输入以路由到 ERA
- `XblaInitialize` 引导主机 Xbox Live 认证上下文
- `LogonUserExExW` 为 ERA 会话创建用户登录令牌
- `UMgrOpenProcessHandleForAccess` 用户管理器进程句柄访问
- `PsmQueryBackgroundActivationType` 后台激活状态
同一目录下还发现:`eraproxyapp.exe` (339KB),即 SystemOS 端的合成器以及 ERA 与 shell 之间的 IPC 桥接。完整的导入分析见第 29 节。
## 10. BlackBox ETL 跟踪 (N:\BlackBox\)
`N:\BlackBox\` 目录包含实时 ETW 飞行记录器跟踪。根据捕获的跟踪分析:
**注意:** Xbox ETL 格式只能用 'tracerp' 解析
### 内部源码树路径(嵌入在调试工具中)
```
onecoreuap\xbox\xblauth\lib\authmanagerimpl.cpp
onecoreuap\xbox\xblauth\lib\authmanagertokens.cpp
onecoreuap\xbox\xblauth\lib\xstsauthorizer.cpp
onecoreuap\xbox\xblauth\util\httprequest.cpp
```
### Xbox Live 认证依赖方
```
http://xdes.xboxlive.com/ Xbox Dev/Engineering Services
http://xboxlive.com Standard XBL
http://mp.microsoft.com/ Microsoft Passport (MSA)
http://instance.mgt.xboxlive.com Instance/session management
```
### 捕获的崩溃
1. **`XboxUI.exe` BEX64** 仪表板 shell 在 `XboxUI.Data.dll` 偏移 `0x13eb0` 处遇到堆栈缓冲区溢出 (`STATUS_STACK_BUFFER_OVERRUN`, `0xc0000409`)
2. **`MoAppHang`** 包 `REDACTED_GUID` 的 UWP 应用挂起
## 11. 其他值得注意的发现
### Xbox 上存在 WSL
`LxssManager` 和 `lxcore` 服务存在,带有 `LaunchProtected: 0x2`(受保护进程)和 `SeTcbPrivilege`。Xbox 上的 WSL 以 OS 级信任运行,根据用途几乎可以确定是为 `Xbox.ConsoleXCloudPlayer` (xCloud 游戏流客户端) 提供支持。
### Xbox 独有的 System32 二进制文件
标准 Windows 中不存在的值得注意的 DLL:
- `XCRDAPI.dll` 内容分发(见第 7 节)
- `XBBlackbox.dll` 飞行记录器(见第 30 节)
- `XBCastRecv.dll` Xbox Cast / Miracast 接收器(见第 30 节)
- `XVMAudioServer.dll` 跨分区 VM 音频服务器
- `Xbox.Shell.Api.dll` / `Xbox.Shell.OneStoreServices.dll` shell API(见第 30 节)
- `XboxCommandService.dll` 命令/自动化
- `XboxUserSim.dll` UI 测试自动化
- `xboxgipsynthetic.dll` / `xboxsynthetickm.dll` 合成 GIP 虚拟手柄注入(见第 30 节)
- `AppXDeploymentExtensions.xbox.dll` Xbox 特有的 AppX 部署
- `xvnapi.dll` Xbox 虚拟网络 API
- `xbsc_xs.dll` Xbox Series 着色器编译器(见第 16.2 节)
### 存在但未文档化的服务
- `EraControlService` ERA 分区生命周期
- `XvdStreamSvc` (`xnetsharedservice.exe`) XVD 流式传输/渐进式安装
- `XUpdMgr` Xbox 更新管理器(独立于 Windows 更新)
- `XSraFlt` Xbox SRA 过滤驱动
- `Manufacturing Broker` 出厂配置服务
- `TestSirepSvc` SIREP 内部测试协议
- `GameCoreController` GDK 游戏核心控制服务
- `ConnectedStorage` Xbox 云存档服务
- `VideoManagerService` 视频输出管理
- `XBBlackbox` 飞行记录器服务
- `xbdiagservice` Xbox 诊断服务
- `XtfRtService` XTF 运行时服务
服务注册表中确认存在的其他传统/底层驱动(见第 11.2 节):
- `Zurich` 电视调谐器解码器堆栈(已禁用)
### `xvnc` / `xvncbus` Xbox 虚拟网卡
`xvnc.sys` 和 `xvncbus.sys` 是 **虚拟 NIC 堆栈**,`xvnc` 服务枚举显示:
```
ROOT\xvnc\0000 root/loopback virtual NIC
{e720983a-...}\wifi\01
{e720983a-...}\wfd\01 Wi-Fi Direct
{e720983a-...}\wfd_role0\01
```
`xvncbus` 是一个 WDF 1.15 总线驱动,在物理无线适配器之上枚举虚拟 NIC。ERA 分区不直接访问网络堆栈,它通过 `NetXVmService` 通信,该服务拥有 `xvnc` 虚拟 NIC 层。GUID `{e720983a-...}` 标识 Xbox 无线适配器硬件。
### `xviomonc.sys` XVIO 监视器客户端
启动启动驱动 (`Start: 0x1`),管理显示分区焦点。导入分析:
```
XVIO.SYS: XvioInitialize, XvioCleanup, XvioPostMessage,
XvioSetFocus, XvioGetCurrentPartitionId - new XVIO export
VMNP.SYS: NpSetupVmImpersonation
xpalk.dll: XpalIsCapabilityEnabled
```
`xviomonc` **不**处理帧缓冲数据,它只是一个信号和焦点管理驱动。`XvioSetFocus` 切换哪个分区拥有显示/输入焦点;`XvioGetCurrentPartitionId` 标识活动分区。实际的帧捕获由 `srakmd_arden.sys` 处理。
来自 `VMNP.SYS` 的 `NpSetupVmImpersonation` 允许监视器驱动在跨分区边界访问 ERA 显示资源时模拟 ERA 分区的安全身份。
### G:\ GameDVR 缓冲区
G:\ 上的三个文件是 ERA 和 SystemOS 之间共享的原始环形内存映射缓冲区:
- `GameDVR_VideoBuffer` 272MB 滚动视频捕获
- `GameDVR_AudioBuffer` 16MB 游戏音频
- `GameDVR_AudioBuffer_SysLoopback` 3MB 系统/UI 音频(独立流)
## 11.1 注册表发现
### 仅限开发套件的 K:\ 驱动器引用
`HKLM\SOFTWARE\Microsoft\Durango\XTF` 包含一个硬编码路径:
```
K:\TDK\Tools\XtfJuno.dll
```
### `HKLM\SYSTEM\ResourcePolicyStore`
| 层级 | 内存预算 |
|------|--------------|
| `BackgroundSmall` | 40MB |
| `Background` | (标准后台) |
| `Balloon` | 5120MB |
CPU 策略层级:
| 策略 | CPU 分配 |
|--------|---------------|
| `Paused` | 1% |
| `SoftCapLow` | 10% |
| `SoftCapFull` | 100% |
| `HardCap0` | 0% - 完全冻结 |
**BeanHog 策略**(可能是前台游戏进程预算?):
- 内存:前台层级
- CPU:100%
- `DoNotKill`:true
- 优先级:最高重要性
## 11.2 Xbox One 遗留考古
Xbox One 时代的三个驱动在 Series S 的服务注册表中留存下来。两个已禁用;一个正在主动运行。
### `Zurich` 电视调谐器解码器堆栈
`zurichs.sys` 是 Xbox One 电视调谐器功能(已停用的 HDMI 直通 / OneGuide 调谐器)的残留。状态:**已禁用**,但仍已注册。
关键发现:`zurichs.sys` 导入 `XVIO.SYS` 环形缓冲区。电视调谐器在架构上设计为通过 XVIO hypervisor 环形缓冲区传输其解码后的视频流。调谐器还使用 `ZwUpdateWnfStateData` 通过 Windows 通知设施 (WNF) 发布调谐器状态,这是 SystemOS 中仍然活跃的同一系统级状态通知总线。
### `PetraXC` Kinect 传感器控制设备
一个 WDF 虚拟设备驱动,现已确认为 **KinectSensorControl 设备**,即 Kinect 摄像头传感器的内核侧硬件抽象。状态:**禁用,直到设备到达**(WDF 按需启动模型)。
值得注意的特征:
- 基于 **WDF 1.11** 构建,对应 Windows 8,将其起源定位于最初的 Xbox One 内核基础
- 导入 `XVIO.SYS`,意味着它通过 hypervisor 环形缓冲区传输进行通信
- 将 `\\.\KinectSensorControl` 作为其设备接口呈现,由 `KinectMediaSource.dll` 在 nuiservice 管道中通过 `DeviceIoControl` 使用(见第 33 节)
- 位于硬件链中 `ciumd_wddm.dll`(一个 WDDM 用户模式摄像头驱动)之上:摄像头传感器输入到 `ciumdddm.dll`,再输入到 `PetraXC.sys`
`XC` 后缀解读为“Xbox Console”或特指“Xbox Kinect Controller”。该驱动在服务注册表中处于禁用状态,直到物理 Kinect 设备到达,届时它将枚举为 `KinectSensorControl` 设备对象。这解释了为什么 WdConfig 中的 `KinectSensorEnabled=true` 在没有物理 Kinect 的硬件上也有意义:驱动基础设施已准备就绪并在等待,`nuiservice.exe` 无论如何都在运行和轮询(见第 33 节)。
### `pspsra.sys` AMD PSP 到 SRA 的桥接
状态:**主动运行**(`Start: 0x0`,启动启动)。在内核级别访问被拒绝,驱动被锁定且无法进一步检查,但其位于启动堆栈中的位置现在有了架构背景。
`pspsra.sys` 在启动链中直接位于 SRA 分区之下,作为 **AMD 平台安全处理器 (PSP) 与 SRA 层之间的桥接**。AMD PSP 处理 fTPM 认证和裸机级别的认证,`pspsra.sys` 是将该信任链提升到 SRA 的桥接。这将其置于与 `XVIO.SYS` 和 `XSraFlt.sys` 相同的信任层级,在 SystemOS 之前初始化,对 SystemOS 不透明,即使在完整内核访问下也无法触及。“pspsra”名称现在直接解读为“PSP->SRA”。
## 12. 未解决的问题
1. **XVIO.SYS 位置** 不在任何可访问的文件系统上;由 hypervisor 在启动时加载
2. **WSL 用途** 确认存在并使用,但在 Xbox OS 中的具体角色未完全映射
3. **`XCrdXpfOp`** 未识别的 XCRDAPI 函数(XPF = ?)
4. **`XSraFlt.sys` 位置** 确认在所有可访问的文件系统上缺失;由 Host OS 与 XVIO.SYS 一并加载
5. **`xvnc` GUID `{REDACTED_GUID}`** 无线适配器 GUID,完整驱动链未映射
6. **`S:\Shares\TitleScratch` 重解析点目标** 在目录列表中被 OS 主动编辑;需要在 cmd.exe 层之下使用 `FSCTL_GET_REPARSE_POINT`。几乎可以肯定是 `\Device\Xrfs\`(见第 26 节)
7. **`xvmctrl.sys` IOCTL 表面** 实时内核转储被阻止(零售版开发者模式上的 `NoKernelDumps` 限制);IOCTL 分发表尚未枚举
8. **ERA 分区 GUID** 未通过任何可访问的注册表路径暴露;将在内核转储中可见(被阻止)
9. **`N:\EtwPlus\` 内容** 被内核文件系统过滤驱动主动隐藏;尽管确认有写入活动,目录列表返回空。过滤驱动身份尚未确定(见第 3.2 节)
10. Host OS 作为一个整体,甚至不完全确定它的功能。
## 13. 虚拟化 I/O 和远程访问 (XVIO/SRA)
近期对 `xboxcloudstreaming.dll` 导出和 `CurrentControlSet\Services` 注册表的分析揭示了用于远程交互的深层内核级集成,利用“合成”硬件模型而非标准软件仿真。
### 13.1 XVIO(虚拟 I/O)堆栈
XVIO 框架似乎是将硬件级事件从外部或跨分区源注入 SystemOS 的主要方法。
| 服务 | 类别 | 功能 |
| --- | --- | --- |
| `hvsocketxvio` | 传输 | 将 Hyper-V 套接字连接到 XVIO 协议的桥接服务。 |
| `InputXVIOClient` | 协调器 | 管理远程输入包到虚拟设备节点的映射。 |
| `xviokbdbus` / `xviomoubus` | 总线驱动 | 在合成内部总线上枚举虚拟 HID 设备。 |
| `xviokbd` / `xviomou` | 设备驱动 | 虚拟化键盘和鼠标的特定功能驱动。 |
### 13.2 合成控制器管道
`xboxcloudstreaming.dll` 二进制文件利用 `XboxgipSynthetic.dll` 创建 OS 视为物理连接的本地外设。
* **音频虚拟化:** 通过 `SyntheticController_AddAudioHeadset`,系统可以将远程网络音频作为硬件绑定设备通过管道传输到主机的本地音频堆栈。
* **输入注入 (RIM):** 对远程输入管理器 (`ext-ms-win-ntuser-rim-l1-1-0.dll`) 的使用确认 xCloud 和远程游玩会话使用与 Windows 远程桌面相同的高权限注入方法,特别是 `InjectKeyboardInput` 和 `InjectPointerInput`。
### 13.3 SRA(系统远程访问)与“Arden”驱动
SRA 堆栈的存在为主机的低延迟帧抓取提供了一个很好的解释。
### 13.4 HvSocket 桥接 (GUID `4545ffe2-...`)
此前未识别的 HvSocket GUID 已匹配到 `hvsocketxvio` 服务。这确认 XVIO 不是独立协议,而是运行在 Hyper-V 内部套接字传输之上的一层。
这表明 **ERA(游戏)分区** 不直接与网络通信以获取输入;相反:
1. **SystemOS** 通过 `XboxNetApiSvc` 接收网络包。
2. **`xboxcloudstreaming.dll`** 处理流。
3. **`hvsocketxvio`** 通过 **HvSocket** 将原始输入数据通过管道跨分区边界传输。
4. Hypervisor/Host 层将其作为硬件事件注入目标分区。
## 14. M:\ 卷 | 覆盖架构
M:\(标签为 "System OS Misc")充当 **覆盖卷**,一个包含在基础 C:\ 映像上挂载的组件的树。此架构允许微软交付单个 OS 映像,并在挂载时通过覆盖应用特定功能集。
### 14.1 卷结构
```
M:\
├── Catalog000-003.bin volume-specific code integrity catalogs
└── windows\
├── system32\
│ ├── drivers\ kernel drivers
│ ├── ht\ Kinect support (see section 33)
│ └── [~120 DLLs] userspace components
├── SystemApps\ system apps
├── DefaultApp\
├── Fonts\
├── Speech_OneCore\
├── textinput\
└── WebManagement\
```
### 14.2 文件系统符号链接
C:\ 通过 NTFS 符号链接引用 M:\ 组件。符号链接存在于两个级别:
**System32 驱动级别:**
```
C:\Windows\System32\drivers\srakmd_arden.sys -> M:\windows\system32\drivers\srakmd_arden.sys
```
**Windows 目录级别**
```
C:\Windows\DefaultApp -> M:\Windows\DefaultApp
C:\Windows\Fonts -> M:\Windows\Fonts
C:\Windows\SystemApps -> M:\Windows\SystemApps
C:\Windows\WebManagement -> M:\Windows\WebManagement
```
M:\ 覆盖比简单的驱动/DLL 替换更普遍,核心 Windows 子系统目录(包括字体存储、系统应用和 Web 管理界面)完全驻留在 M:\ 上。这可能意味着特定的覆盖层不仅控制 GPU 和捕获驱动,还在一定程度上控制整个系统应用和 UI shell 层。
尚未完成指向 M:\ 的 C:\ 符号链接的完整递归枚举。
### 14.3 硬件特定驱动 (M:\windows\system32\drivers\)
| 驱动 | 大小 | 用途 |
|---|---|---|
| `srakmd_arden.sys` | 274KB | SRA 捕获 KMD -> Arden 硬件特定的帧抓取器 |
| `acpi.sys` | 873KB | ACPI -> 硬件特定构建(比通用版大) |
| `spaceport.sys` | 1MB | 存储端口 -> XVD 加密 + 许可证检查 |
| `spacedump.sys` | 304KB | 存储转储驱动 |
| `buttonconverter.sys` | 90KB | 电源/弹出 HID -> 主机事件转换 |
| `qwavedrv.sys` | 90KB | QoS/网络质量驱动 |
| `acpiex.sys` | 181KB | ACPI 扩展 |
| `AcpiDev.sys` | 61KB | ACPI 设备扩展 |
| `acpitime.sys` | 57KB | ACPI 计时器 |
**发现:** `XSraFlt.sys` 在 M:\ 驱动以及 C:\ 中均不存在。它不存储在任何可访问的文件系统卷上,表明它是由 Host OS 在启动时与 `XVIO.SYS` 一并加载的。
### 14.4 硬件特定用户态组件 (M:\windows\system32\)
M:\ 独有的值得注意的 DLL/EXE:
**GPU / 着色器堆栈:**
- `umd12ddi_arden.dll` (1.56MB) D3D12 用户模式驱动 DDI,Arden 硬件
- `umd12ddi_d.dll` (1.5MB) D3D12 UMD,调试/PIX 检测构建
- `umd12ddi_i.dll` (1.14MB) D3D12 UMD,收件箱/回退构建
- `newbe_xs.dll` (26MB) "NewBe" Arden GPU 着色器编译器后端
- `xbsc_xs.dll` (3.9MB) Xbox Series 着色器编译器前端
- `dxcompiler_xs.dll` (17.8MB) Xbox Series HLSL 编译器
- `dxbc2dxil_xs.dll` (2.9MB) DXBC 到 DXIL 字节码转换器
- `pixrtddi.dll` (679KB) PIX 渲染/调试 DDI
**开发者 / PIX 工具链:**
- `VsGraphicsRemoteEngine.exe` (4.75MB) PIX GPU 分析器远程引擎
- `VsGraphicsCapture.dll` (225KB) PIX 帧捕获
- `VsGraphicsExperiment.dll` (327KB) PIX 实验框架
- `DXCaptureReplay.dll` (18MB) GPU 捕获重放引擎
- `DXCap.exe` (1.19MB) GPU 捕获工具
- `DXToolsMonitor.dll` / `DXToolsOfflineAnalysis.dll` / `DXToolsReporting.dll` PIX 分析堆栈
- `DXGIDebug.dll` (151KB) DXGI 调试层
- `d3d12SDKLayers.dll` (4.8MB) D3D12 验证/调试层
- `d3d11_3SDKLayers.dll` (1.19MB) D3D11 调试层
- `d2d1debug3.dll` (618KB) D2D 调试层
- `VSD3DWARPDebug.dll` (155KB) WARP 软件光栅化器调试构建
- `plmdebug.exe` (204KB) PLM(进程生命周期)调试器
**流媒体 / 远程访问:**
- `rdpbase.dll` (1.8MB) RDP 基础库
- `rdpserverbase.dll` (2.3MB) RDP 服务器基础
- `XboxDevService.exe` (3.7MB) Xbox 开发服务宿主
- `XboxDevService.ProxyStub.dll`
**社交 / 插件堆栈:**
- `DiscordPlugin.dll` (139KB) Discord 集成
- `TwitchPlugin.dll` (639KB) Twitch 流媒体集成
**其他值得注意的:**
- `XboxSyntheticKM.dll` (36KB)
- `xrmntcl.exe` (90KB) Xbox 运行时挂载客户端
- `xtfupdateT_s_i.dll` (98KB) ?
- `xtcapi.dll` (57KB) XTC API (Xbox Title Communications?)
- `wusys.dll` (308KB) Windows Update 系统集成
## 15. GPU 堆栈 | 着色器编译管道
完整的 Xbox Series S/X 着色器编译管道位于 M:\ 上,不存在于 C:\。如果没有挂载硬件特定的覆盖层,则无法进行着色器编译。
### 15.1 `newbe_xs.dll`
26MB DLL。Arden GPU 着色器编译器后端。仅 6 个导出:
```
NB_CompileShader compile individual shader stage
NB_CompilePipeline compile full pipeline state object
NB_CreateOptimizer create register allocator / instruction scheduler
NB_GetRegPressure register pressure analysis (PIX-facing)
NB_GetShaderStats hardware shader statistics
NB_CreatePixDwarfApi generate DWARF debug info for GPU shaders
```
`.pass` 部分可能暗示类似 LLVM 的 pass 管道。`NB_CreatePixDwarfApi` 为 PIX 生成源码级着色器调试信息。
### 15.2 `xbsc_xs.dll`
41 个导出,涵盖完整的编译 API:
```
XBSC_PipelineCompile / XBSC_GetPipelineCompileOutput
XBSC_CompileRootSignature / XBSC_GetCompiledRootSignature
XBSC_AssembleShader / XBSC_GetAssembledShader
XBSC_DisassembleHwPipeline / XBSC_DisassembleHwPipelineWithCallback
XBSC_DisassembleRawShader / XBSC_GetDisassembly
XBSC_GetRegPressure / XBSC_GetShaderStats / XBSC_DumpShaderStats
XBSC_CompressBuffer / XBSC_DecompressBuffer (shader cache compression)
XBSC_Serialize* / XBSC_Deserialize* (pipeline state serialization)
SCCompileMultiShadersXbox / SCDumpHwShader* (batch compilation)
SC_ConvertRootSignatureToSCInputs
```
`_mmddu` 和 `_MMDDT0` PE 部分包含 **Microsoft 机器相关驱动数据**,即烘烤在编译器中的硬件微架构表(指令延迟、寄存器堆拓扑、Arden 的执行单元计数)。
### 15.3 `dxcompiler_xs.dll`
17.8MB。DXC HLSL 编译器的 Xbox Series 分支。4 个导出:
```
DxcCreateInstance / DxcCreateInstance2 standard DXC factory (compatible with public API)
CreateXdxrCompiler / CreateXdxrCompiler2 Xbox DXIR compiler (Xbox-specific IR format)
```
### 15.4 `dxbc2dxil_xs.dll` 字节码转换器
2.9MB。单个导出:
```
SCDxil_ConvertDxbcToDxil convert DX11 DXBC bytecode to DXIL for DX12 pipeline
```
使向后兼容的 DX11 着色器能在仅支持 DX12 的 Arden 管道上运行。
### 15.5 完整着色器编译链
```
Game/App submits HLSL or legacy DXBC shader
↓
[HLSL path] [DXBC legacy path]
dxcompiler_xs.dll dxbc2dxil_xs.dll
(DxcCreateInstance -> DXIL) (SCDxil_ConvertDxbcToDxil -> DXIL)
↓ ↓
└──────────┬──────────────────┘
↓
xbsc_xs.dll (XBSC_PipelineCompile)
calls newbe_xs.dll NB_ backend
uses _MMDDT0 Arden microarch tables
↓
umd12ddi_arden.dll
(submits compiled ISA via D3D12 DDI)
uses xg_xs.dll for texture layout
↓
srakmd_arden.sys (kernel)
XvioGetReservedMemory -> hypervisor carve-out RAM
zero-copy framebuffer -> ERA partition
```
## 16. `xg_xs.dll` Xbox 图形纹理布局库
位于 **C:\**(而非 M:\)。包含 27 个导出,涵盖纹理分块、光线追踪 BVH 布局和 DCC 压缩。
### 16.1 导出表面
### 16.2 关键发现
**光线追踪 BVH 布局是硬件特定的。** `XGCreateBVHComputer2` 暴露了第二代 BVH 布局 API,表明 Arden 架构具有不同于通用 DXR 的独特 BVH 节点格式。
**AMD DCC 压缩被暴露。** `XGEncodeDCC` / `XGDecodeDCC` 实现了 AMD 的 Delta Color Compression,即 RDNA GPU 上使用的硬件无损帧缓冲压缩。`XGDecodeDCCSurface` 是 PIX 在读回 DCC 压缩的捕获帧缓冲时使用的 API。
**DirectStorage 分块。** `XGShuffleTextureBufferForDirectStorage` 执行 GPU 端的洗牌操作,将磁盘上的纹理布局转换为 GPU 解压期间的 Arden 硬件分块格式,实现零拷贝加载到 VRAM。
**`XGSetHardwareVersion` 控制所有布局算法。** 该库包含针对多个硬件修订版的布局实现。使用 Series S 与 Series X 标识符调用 `XGSetHardwareVersion` 会产生不同的分块结果,反映了不同的内存总线宽度和缓存几何结构。
### 16.3 `.xbld` 构建元数据部分
`xg_xs.dll` 包含一个所有其他 Xbox 二进制文件中均不存在的 `.xbld` PE 部分,表明它源自单独的 GDK CI 构建管道,而非 Xbox OS 构建系统。OS 构建系统将时间戳归零并剥离元数据部分;GDK CI 不会。
```
_xbld_edition_build = GXDK, 0x65F41B62
_xbld_edition_full_productbuild = GXDK, 10.0.26100.7010
_xbld_edition_sdktype = GXDK, 260400
_xbld_edition_name = GXDK, April 2026 GXDK
_xbld_edition_mscver = GXDK, 193833145.100
```
**"April 2026 GXDK"** 的 `edition_name` 值早于该 SDK 版本的公开发布(撰写本文时为 2026 年 3 月 9 日),确认零售版 OS 附带了针对下一个未发布 SDK 周期构建的 GDK 组件。`sdktype=260400` 版本号遵循 `YYMMRR`(年/月/修订)模式。
`edition_build` 时间戳 `0x65F41B62` 解码为 **2024 年 3 月 13 日**,比 OS 构建日期(2026 年 2 月 12 日)早一年多,表明纹理布局算法在至少 5 个 GDK 发布周期中保持稳定且未修改。
`mscver=193833145.100` 将编译器标识为 **MSVC 19.38** (Visual Studio 2022 17.8.x)。
### 16.4 构建管道推断 (UUP?)
```
GDK CI pipeline builds xg_xs.dll (with .xbld metadata intact)
↓
┌─────────────────────────┐
↓ ↓
Xbox OS image ingests April 2026 GDK SDK package
artifact directly ships same binary to developers
↓
Ships on every retail console
```
这意味着零售版主机上的 `xg_xs.dll` 与开发者在 GDK 中收到的二进制文件完全一致。一旦可用的 2026 年 4 月公开 GDK 发布,通过哈希验证即可确认这一点。
## 17. 基于编录的代码完整性信任模型
### 17.1 PE 容器格式
每个卷上的 `Catalog*.bin` 文件是 **子系统为 `0x11` ("Xbox Code Catalog") 的 PE32+ 可执行文件**,这是一个在任何公开文档中均未出现的未公开子系统。关键 PE 头特征:
```
Magic: PE32+ (64-bit)
Subsystem: 0x11 ("Xbox Code Catalog", obtained from strings inside MSVC link.exe)
Entry point: 0 (never executed)
Code size: 0 (no executable code)
DLL Chars: IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY <- critical
IMAGE_DLLCHARACTERISTICS_NX_COMPAT
Sections: 1 unnamed read-only section (raw payload)
```
`FORCE_INTEGRITY` 强制 Windows 内核在映射映像之前验证 Authenticode 签名。如果没有有效的 Microsoft 签名链,编录无法被加载或信任。
### 17.2 信任链
```
Hypervisor/Host OS validates Catalog*.bin PE Authenticode signature at boot (FORCE_INTEGRITY)
↓
Catalog payload contains hashes of protected binaries on that volume
↓
Code Integrity checks each binary's hash against catalog at load time
↓
Individual binaries carry no Authenticode signatures of their own
```
这是一个 **基于编录的信任** 模型。单个 Microsoft 签名覆盖每个卷上的大量文件。单个二进制文件和可能的其他文件类型是未签名的;其完整性由编录中的成员身份保证。
**条目计数和大小:**
| 卷 | 编录 | 负载大小 | 条目 (÷32) |
|---|---|---|---|
| C:\ | Catalog000.bin | 5,533,696 字节 | 172,928 |
| C:\ | Catalog001.bin | 253,952 字节 | 7,936 |
| C:\ | Catalog002.bin | 57,344 字节 | 1,792 |
| C:\ | Catalog003.bin | 176,128 字节 | 5,504 |
| M:\ | Catalog000.bin | 5,537,792 字节 | 173,056 |
| M:\ | Catalog001.bin | 258,048 字节 | 8,064 |
| M:\ | Catalog002.bin | 61,440 字节 | 1,920 |
| M:\ | Catalog003.bin | 180,224 字节 | 5,632 |
每个编录的负载长度(在 PE 部分内)均可被 32 整除且无余数,且不一致地可被 36、40 或其他常见记录大小整除。这强烈暗示负载是一个 **32 字节记录** 的平面数组。
**哈希算法:** 在编录中未找到已知二进制文件的全文件 SHA-256 和 SHA-1,排除了简单的全文件哈希。最可能的格式是 **Authenticode 页哈希**,即 Windows CI 标准,对 PE 文件映射部分的每个 4KB 对齐页进行单独哈希。这将产生每页一个 32 字节 (SHA-256) 的条目,解释了巨大的条目计数(仅 C:\ 就有 172,928 个条目)。
**排序:** 负载未按哈希值排序。排序方案尚未确定,可能性包括按文件路径哈希、安装包、卷文件集内的页偏移排序,甚至某些 NTFS 特征。
**无头:** 负载的前 128 字节不包含可识别的 ASCII 魔数,没有可能指示计数或版本的小整数字段,也没有与标准头一致的结构。哈希数组从负载的字节 0 开始,没有前言。
### 17.3 仅加载时强制执行
代码完整性强制执行 **仅限加载时**。一旦二进制文件通过编录哈希验证且页面映射到内存,CI 不再参与。如果在 SystemOS 上激活,HVCI(虚拟机监控程序保护的代码完整性)将通过在 hypervisor 页表级别使加载的代码页硬件只-only 来关闭由此产生的 TOCTOU(检查时间到使用时间)窗口。**确认 SystemOS 上 HVCI 已关闭**,`IsSecureKernelRunning = 0x0`(见第 18 节)。因此 TOCTOU 窗口存在。
### 17.5 Host OS 组件
确认有两个驱动在所有可访问的文件系统卷上缺失,并由 Host OS 在 SRA 初始化之前直接加载:
- `XVIO.SYS` Xbox 虚拟 I/O 核心(无注册表服务条目,不在任何卷上)
- `XSraFlt.sys` SRA 显示捕获过滤器(存在服务条目,任何卷上均无对应文件)
这些组件完全存在于编录信任模型之外。即使拥有完整的 SystemOS 内核访问权限,它们也无法被篡改,因为它们是由引导加载程序在 HostOS(父级 System OS)开始加载之前映射的。
## 18. HVCI 状态
`HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\KeyGuard\Status`
```
IsSecureKernelRunning = 0x0
```
Secure Kernel (VTL1) 未在 SystemOS 上运行,确认 HVCI 无法激活。这是刻意的性能权衡,在游戏循环中不对内核活动征收 VTL1 税。安全边界是 hypervisor 分区本身,而非分区内的内存保护。因此,代码完整性模型(第 17 节)仅限加载时,没有 TOCTOU 保护。
## 19. sevpipe Hypervisor IPC 命名空间
一个自定义的 Windows 命名管道设备命名空间(`\\.\sevpipe\`),充当所有 Xbox 特有进程间和跨分区通信的主要 IPC 骨干。在协议级别不是 hypervisor 构造,底层是标准 Windows 命名管道语义,注册在自定义设备命名空间下以将其隐藏于普通管道枚举工具。
### 19.1 完整管道清单
```
EtxForwarder <- telemetry data
EtxForwarderToUploaderControl <- telemetry control
XrfsPipe <- cross-partition filesystem
ERASwapChainPipe <- ERA framebuffer (dynamic)
ERAPresentPipe <- ERA present signals (dynamic)
XvioAudioPipe <- ERA audio (dynamic)
XvioAudioEventPipe <- ERA audio events (dynamic)
XboxOneAudioStatePipe <- system audio state
XTF_SYSTEM_TO_TITLE <- XTF command channel (dynamic)
XTF_TITLE_TO_SYSTEM <- XTF response channel (dynamic)
CloudStreamingServer <- xCloud (dynamic)
\SEVPipe\epmapper <- Xbox RPC endpoint mapper
\SEVPipe\epmapperX <- extended RPC endpoint mapper
```
动态管道仅在 ERA 处于活动状态、XTF 会话正在运行或 xCloud 正在流式传输时存在。
任何卷上均无驱动提供者,确认在所有可访问卷(C、J、M、S)的 `System32\drivers` 中缺失。无注册表服务条目。可能完全由 Host OS 在启动时构建。
### 19.2 访问控制映射
```
EtxForwarder <- DevToolsUser WRITE
EtxForwarderToUploaderControl <- DevToolsUser WRITE
XrfsPipe <- SYSTEM only
ERASwapChainPipe <- SYSTEM only
ERAPresentPipe <- SYSTEM only
XvioAudioPipe <- SYSTEM only
XTF_SYSTEM_TO_TITLE <- SYSTEM only
```
### 19.3 遥测管道
```
Process calls EtxEventWrite()
↓
EtwPlus.dll
↓ writes to
\\.\pipe\EtxUploader
↓
EtwUploader.exe (PID 1808, SYSTEM)
↓ forwards to
\\.\sevpipe\EtxForwarder <- data
\\.\sevpipe\EtxForwarderToUploaderControl <- control
↓
NetworkTransferManagerService.exe (PID 2040, SYSTEM)
↓
[unknown endpoint, dynamic library load]
↑
DevToolsUser can inject at EtxForwarder and control pipe
```
`EtwPlus.dll` 是 Xbox 特有的(`FileDescription: Xbox ETW Plus API`),版本 `10.0.26100.7010`。挂起/恢复导出在零售版构建中可能是桩,三个导出共享相同的 RVA。
### 19.4 videoserver.exe RTSP 屏幕捕获
端口:11442(二进制文件中硬编码)。依赖项:
```
Windows.Xbox.Graphics.Display.Internal.DisplayManager
Windows.Xbox.System.Internal.GameStreaming.GameStreamingAgent
Windows.Xbox.Media.Capture.ApplicationClipShell
```
**关键发现:** 似乎无法正常工作。未找到从主机内部或外部访问视频流的方法。
硬编码路径/标志:
```
DisableXboxDevToolsTelemetry <- env var to suppress its telemetry
VideoServerMaxPacketSize <- configurable via env var
EnableVideoServer <- WdConfig flag confirmed here
OSDATA\...\DevkitProperties <- reads devkit properties at runtime
```
### 19.5 OneSettings / Windows Update 架构
Xbox 携带完整的 Windows Update 目标架构,包括 `XBOXMOBILE` 目标条目和 `WCOS` 注册表配置单元路径,确认 Xbox Series S 运行在与 HoloLens 和 Surface Hub 共享的 Windows Core OS (WCOS) 基础上。该 OS 是轻度定制的 Windows 11 24H2,而非专用平台 OS。
## 20. Hypervisor 分区拓扑
`HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\HvSocket\Addresses`
```
LocalAddress = {REDACTED_GUID} SystemOS partition GUID
ParentAddress = {REDACTED_GUID} null parent
```
SystemOS 认为它是 **根分区**(错误,Host OS 是根)。ERA 游戏分区是 SystemOS 的子级。ERA 分区 GUID 未通过任何可访问的注册表路径暴露给 SystemOS,可能是随机的。
### HvSocket 跨分区通配符端点
`HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\HvSocket\WildcardDescriptors`
通过 SHA1 服务 SID 计算解析的四个服务 GUID:
| GUID | 服务 | 用途 |
|------|---------|---------|
| `REDACTED_GUID` | DiagTrack | 遥测管道 1 |
| `REDACTED_GUID` | DiagTrack | 遥测管道 2 |
| `REDACTED_GUID` | RpcSs | 分区间 RPC |
| `REDACTED_GUID` | EventLog | 跨分区事件转发 |
DiagTrack、RpcSs 和 EventLog 是一等跨分区公民。游戏遥测、RPC 调用和事件通过专用的 hypervisor 套接字通道从 ERA 管道传输到 SystemOS,对 ERA 内部运行的任何内容不可见。
## 21. 图形配置
`HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers`
```
WddmVersion_Max = WddmVersion_Min = 0x9C4 (WDDM 2.5) pinned, not negotiated
DisableCcdDatabase = 1
DisableHpdHandling = 1
DisableUsingMonitorPowerForSimulatedMonitor = 1
DirectFlipMemoryRequirement = 0x40 (64MB)
PinnedMemoryLimit = 0x59 (89MB)
AdapterMPO_3 = 1 MPO tier 3 enabled
```
WDDM 版本是固定的而非协商的,显示管道由固件和 hypervisor 拥有,WDDM 不参与监视器处理。MPO 层级 3 (`AdapterMPO_3`) 是 ERA 游戏帧缓冲和 SystemOS UI 在分区之间没有软件 blit 的情况下合成的方式:每个表面占据单独的硬件覆盖平面。
## 22. WdApp.exe 包管理器和应用生命周期工具
`J:\tools\WdApp.exe` 是 Xbox 应用平台的完整包管理器和应用程序生命周期管理器。完整命令表面:
| 命令 | 用途 |
|---------|---------|
| `install` | 从 Web 服务器、网络共享或本地路径流式传输打包的构建 |
| `register` / `unregister` | 注册/注销松散文件应用包 |
| `registerdrive` | 一次注册整个驱动器上的所有应用程序 |
| `registernetworkshare` | 从 UNC 网络共享安装,可选凭据 |
| `registerscratch` | 从开发临时驱动器注册 |
| `registertitlescratch` | 从 ERA 游戏临时驱动器注册 |
| `launch` | 通过 AUMID、exe 路径或 URI 启动 |
| `terminate` / `suspend` | 停止或挂起正在运行的应用 |
| `uninstall` | 卸载应用或其部分 |
| `list` | 列出所有已注册的应用程序 |
| `listdlc` | 列出已安装的 DLC |
| `move` / `copy` | 移动或复制包 |
| `movedrive` / `copydrive` | 移动或复制驱动器上的所有包 |
| `applyconfig` | 使用指定设置或 `game.config`/`.xvd` 启动 ERA 游戏 OS |
| `queryconfig` | 打印运行中游戏 OS 的 4 部分版本号 |
| `queryversioninfo` | 查询给定包的游戏 OS 版本 |
| `collectxip` | 收集 XIP 跟踪 |
| `lastgamedetails` | 检索有关上次运行游戏的详细信息 |
| `installkey` | 在主机上安装密钥 |
| `installplan` | 在主机上安装计划 |
| `overlayfolder` | 管理包覆盖文件夹 |
### 值得注意的发现
**`applyconfiggame.config | ERA.xvd]`** 从命令行直接控制 ERA 分区启动。接受 `.xvd` XVD 磁盘映像或 `game.config` 设置文件。不带参数运行时,它启动最近使用的游戏 OS。在没有先前游戏上下文的系统上,这返回 `0x87E50002`(ERA 设施,未找到 XVD)。
**`/drive=Retail`** `install` 命令接受 `Retail`、`Development` 和 `Ext1-Ext7` 作为目标驱动器指定符,允许从开发 shell 直接将包安装到零售存储分区。
**`/WaitToExit`** 在 `launch` 上导致 WdApp 作为父进程拥有启动的进程并捕获退出代码。系统应用以 `0x8D160121`(Xbox PLM 设施,错误的生命周期父级)拒绝此操作。不带 `/WaitToExit` 启动会成功,因为 ShellCoreService 保留生命周期所有权。
**`launch` AUMID 编码** 系统 AUMID 需要匹配 `.xboxunattend` QuickActions 脚本中使用的模式的 base64 编码:
```
WdApp.exe launch
```
## 23. 设备门户 REST API
设备门户 Web 服务器(`WebManagement.exe`, PID 2344)从 `M:\windows\WebManagement\www\default\` 提供其前端。完整的 REST API 架构记录在 `js\RestDocumentation.json` (40KB) 中。
**身份验证:** HTTPS 端口 11443 上的 HTTP 基本认证。凭据是开发者模式激活期间设置的用户名和 PIN。
### API 命名空间
| 命名空间 | 基础 URI | 关键端点 |
|-----------|----------|---------------|
| 应用部署 | `/api/appx/packagemanager/` | 安装、卸载、列出包、内容组 |
| 设备管理器 | `/api/devicemanager/` | 完整的分层设备树 |
| 转储收集 | `/api/debug/dump/` | 实时进程转储、bugcheck 转储、崩溃控制 |
| ETW | `/api/etw/` | 通过 WebSocket 的实时 ETW,提供者枚举 |
| 文件资源管理器 | `/api/filesystem/` | 浏览、上传、下载、删除、重命名 |
| 网络 | `/api/networking/` | ipconfig |
| OS 信息 | `/api/os/` | 机器名、OS 信息 |
| 性能 | `/api/resourcemanager/` | 带有 CPU/内存的实时进程列表、系统性能统计 |
| 电源 | `/api/power/` | 电池、电源方案、睡眠研究报告 |
| 远程控制 | `/api/control/` | 重启、关机 |
| 任务管理器 | `/api/taskmanager/` | 启动/停止应用、终止进程 |
| 蓝牙 | `/api/bt/` | 枚举、配对、连接音频设备 |
| WiFi | `/api/wifi/` | 枚举接口/网络、连接、断开 |
| WER | `/api/wer/` | 枚举和下载 Windows 错误报告 |
| WPR | `/api/wpr/` | 启动/停止/下载 WPR 性能跟踪、自定义配置文件 |
### 限制标志
几个端点带有在零售版开发者模式主机上禁用它们的限制标志:
| 标志 | 受影响的端点 |
|------|--------------------|
| `NoKernelDumps` | 实时内核转储、bugcheck 转储下载 |
| `NoUserModeDumps` | 实时进程转储(按 PID) |
| `NoBugcheckDumps` | Bugcheck 转储列表/下载/控制 |
| `NoWPRBootTracing` | 启动时 WPR 跟踪 |
| `NoPowerSchemeAccess` | 电源方案读/写 |
用户模式实时进程转储(`/api/debug/dump/usermode/live?pid=`)是 `nonRestrictable` 且在零售版开发者模式下成功。
### 设备门户源码树
| 文件 | 大小 | 用途 |
|------|------|---------|
| `RestDocumentation.json` | 40KB | 完整的机器可读 REST API 架构 |
| `workspace-definitions.js` | 26KB | 门户工作区面板布局(二级 API 索引) |
| `common-xbox.js` | 21KB | 基础设备门户之上的 Xbox 特有门户添加 |
| `common.js` | 56KB | 基础设备门户框架 |
| `toolhost.js` | 7.8KB | 工具托管层 |
| `rest.js` | 19KB | REST 调用构造库 |
| `d3.js` | 570KB | D3 数据可视化 |
| `konva.js` | 676KB | Canvas 渲染 |
## 24. 实时进程列表
通过 `GET /api/resourcemanager/processes` 获取。选定的值得注意的进程:
| PID | 映像 | 用户 | 注释 |
|-----|-------|------|-------|
| 156 | *(隐藏)* | SYSTEM | 66MB 工作集,看不见映像名 |
| 1456 | `xbdiagservice.exe` | SYSTEM | Xbox 诊断服务 |
| 1808 | `EtwUploader.exe` | SYSTEM | ETW 遥测上传器 |
| 1832 | `StorageManagement.exe` | DefaultAccount | `Xbox.StorageManagement` UWP, `IsRunning: false` (已挂起) |
| 1904 | `ApplicationClipService.exe` | SYSTEM | GameDVR 剪辑管理,37MB 工作集 |
| 2032 | `xnetsharedservice.exe` | SYSTEM | 跨分区网络桥接 |
| 2040 | `NetworkTransferManagerService.exe` | SYSTEM | Xbox 内容下载管理器 |
| 2344 | `WebManagement.exe` | SYSTEM | 设备门户 Web 服务器 |
| 2416 | `XUpdMgr.exe` | SYSTEM | Xbox 更新管理器 |
| 2436 | `PRProvisioningService.exe` | NETWORK SERVICE | PlayReady 配置服务 |
| 2460 | `XNetConfig.exe` | SYSTEM | 网络配置 |
| 2468 | `toolsautoexec.exe` | SYSTEM | `.xboxunattend` 脚本 autoexec 运行器 |
| 2572 | `sihost.exe` | DefaultAccount | Shell 基础设施宿主,
| **输入** | `xboxcloudstreaming.dll`, `xboxsynthetickm.dll` |
| **输入焦点** | `xviomonc.sys`, `VMNP.SYS` (模拟) |
| **主机操作系统** | `xvmctrl.sys`, `XVIO.SYS` (不在文件系统中) |
| **跨分区文件系统** | `xrfs.sys`, `xbtplinkc.sys`, `xrmntcl.exe`, `xrfssvc.exe` |
| **显示** | `eraproxyapp.exe`, `xamapi.dll` (Win32 覆盖), MPO 第 3 层 |
| **GPU** | `umd12ddi_arden.dll`, `newbe_xs.dll`, `xbsc_xs.dll`, `xg_xs.dll` |
| **音频** | `XVMAudioServer.dll`, `XAudio2_8/9.dll`, 空间音频配置 |
| **网络** | `xvnc.sys`/`xvncbus.sys` (虚拟 NIC), `NetXVmService` |
| **诊断** | `XBBlackbox.dll`, `xbdiagservice.exe`, `EtwUploader.exe`, `EtwPlus.dll` (Etx 管道) |
| **更新** | `XUpdMgr.exe`, WU 客户端 (`wuauengcore.dll`), `Deploy:\` 卷 |
| **Shell** | `Xbox.Shell.Api.dll`, `XboxUI.exe`, `Guide.exe`, `sihost.exe` |
| **流媒体** | `xboxcloudstreaming.dll`, `XBCastRecv.dll` (Miracast) |
| **开发工具** | `WebManagement.exe` (Device Portal), XTF 栈 (132 个文件), `WdApp.exe`, `unattendedsetuphelper.exe` |
| **兼容性** | `xamapi.dll` (Win32 垫片), `dxbc2dxil_xs.dll` (DX11->DX12) |
| **视觉 / Kinect** | `nuiservice.exe` (3.8MB, SYSTEM, 常驻后台编排器), `KinectMediaSource.dll` (帧获取, `alignment.bin` 10.7MB, `alignment_color.bin` 5.7MB), `vvtechs.dll` (`NuiVisionCreateFactory`, 身体追踪), `speechwov.dll` (唤醒词/语音追踪), 人脸随机森林模型 (`FaceDetector.bin`, `FaceRecognition.bin`, `ExpressionRandomForest.model`, +8 个其他), 3 个活动版本 (`X:\ht\versions\`) |
| **广告** | `AdsLauncher` (系统应用), `Windows.Xbox.System.Internal.AdsContract` (WinRT) |
| **旧版 (已禁用)** | `Zurich` (TV 调谐器, XVIO 关联), `PetraXC` / `KinectSensorControl` (WDF 1.11, 在 Kinect 设备接入前禁用, 通过 `\\.\KinectSensorControl` 向 `KinectMediaSource.dll` 提供数据) |
## 31. WinRT 契约注册表
令人惊讶的是,`HDRGameCalibration` WinMD 包含了*看似* **完整** 的 Xbox WinRT 契约注册表,其中定义了平台上可用的所有第一方 WinRT API 接口的 100 多个契约。
### 值得注意的契约
| 契约 | 版本 | 备注 |
|----------|---------|-------|
| `Windows.Kinect.KinectContract` | v1 | Kinect 可能是为了支持游戏标题的向后兼容性 |
| `Windows.Xbox.TestAutomationContract` | | 测试自动化接口存在于 **零售版** 硬件上 |
| `Windows.Xbox.System.Internal.AdsContract` | | 广告系统是一个内部 WinRT 契约 |
| `Windows.Xbox.System.Internal.CopyOnLan.CopyOnLanContract` | | LAN 游戏复制,本地网络游戏传输 |
| `Windows.System.Internal.XboxLive.Auth.AuthContract` | v2 | 内部 Xbox Live 认证接口 (独立于公共 XBL API) |
### 影响与推论
**Kinect 作为受维护的契约。** `Windows.Kinect.KinectContract v1` 作为非弃用的一等契约存在,这与活动栈 (`C:\Windows\System32\ht`) 和 WdConfig 中的 `KinectSensorEnabled=true` 一致。即使在没有物理 Kinect 的硬件上,Kinect 视觉也是受积极维护的基础设施。完整的编排管道 (`nuiservice.exe`, `KinectMediaSource.dll`, 三个推理轨道,输出路由) 记录在第 33 节中。
**广告属于内部基础设施。** `AdsContract` 是一个 `Internal` 契约而非公共 SDK API,这意味着广告交付是构建在操作系统层面的,与认证和存储处于同一级别,而非第三方 SDK 集成。
**零售版设备上的测试自动化。** `Windows.Xbox.TestAutomationContract` 随零售版设备一同发布,这与开发者模式工具可访问 `Windows.Xbox.TestAutomationContract` 一致。
## 32. UserMgr2
`UserMgr2` 是拥有当前活动登录会话的交互式用户账户。`NTUSER.DAT` 处于锁定状态 (UserMgr2 处于活动状态)。从该配置文件中发现的关键信息:
### 配置文件结构
| 路径 | 内容 |
|------|----------|
| `ntuser.ini` | 3 个换行符 |
| `AccountPictures\UserImage.jpg` | 单张 1080x1080 Microsoft 账户照片,独立于玩家图标系统 (见第 3.2 节) |
| `AppData\Local\Packages\` | 仅存在旁加载的开发者应用配置,**Xbox 系统应用不使用标准的 UWP `LocalPackages` 存储路径** |
### 权限说明
Device Portal 连接点使用 `UserMgr2` 权限而非 `DevToolsUser` 权限进行解析 (见第 1.2 节和未解决问题 12)。`UserMgr2` 的权限级别高于 `DevToolsUser`,`UserMgr2` 是交互式会话所有者,而 `DevToolsUser` 是受限的开发者访问账户。
## 33. nuiservice.exe Kinect 视觉管道
`nuiservice.exe` (3.8MB,以 SYSTEM 身份运行,常驻后台) 是完整 Kinect/NUI 感知栈的编排进程。它承载三个并行推理轨道:身体、人脸和音频;每个轨道作为独立的处理管道运行,通过纤程图 协作调度,并由基于 D3D11 GPU 推理设备的 IOCP 泵供给帧数据。
### 架构
```
nuiservice.exe
├── D3D11CreateDevice <- GPU inference device
├── IOCP frame pump <- async frame dispatch
└── Fiber graph <- cooperative ML inference scheduling
```
### 输入: KinectMediaSource.dll
帧获取由 `KinectMediaSource.dll` 处理:
```
KinectMediaSource.dll
├── MFCreate2DMediaBuffer <- allocates 2D image frames (Media Foundation)
├── alignment.bin [10.7MB] <- depth -> 3D coordinate transform LUT
├── alignment_color.bin [5.7MB] <- depth/color registration
├── DeviceIoControl->\\.\KinectSensorControl <- talks to PetraXC.sys
└── CoCreateInstance {9178b0a6} <- self-registration CLSID
```
`alignment.bin` (10.7MB) 和 `alignment_color.bin` (5.7MB) 是预计算的查找表,分别用于将原始深度传感器数据转换为 3D 世界空间坐标,以及将深度像素配准到彩色像素。这些是特定于 Kinect 相机几何结构的硬件校准产物。
### 身体追踪
通过 `vvtechs.dll` (`NuiVisionCreateFactory`) 从 `X:\ht\versions\{1.0.0|1.0.1|1.0.2}\` 加载的模型:
- **输入:** 来自 `KinectMediaSource.dll` 的深度帧
- **输出:** 骨骼关节、头部位置、手部状态 (抓取/释放)
- 同时存在三个版本目录;活动版本在运行时选择
### 人脸
从 `C:\Windows\System32\ht\` 加载的模型 (完整模型清单见第 3.3 节):
- **输入:** 深度、红外和彩色帧
- **输出:** 身份 (是谁)、表情 (情绪)、视线 (注意力方向)、嘴唇状态 (张开/移动)、外观属性 (眼镜、面部毛发)
- 身份输出直接送入 `LogonUserExExW` 用于基于人脸的自动登录 (见下文输出路由)
### 音频
由 `speechwov.dll` 处理:
```
speechwov.dll
├── SpeechWov_Create / UpdateAcousticModels
├── SpeechWov_ProcessRecognition
└── Output->wake word events, speech recognition events
```
`speechwov.dll` 是一个唤醒词和语音识别引擎。`UpdateAcousticModels` 表示声学模型可以在运行时更新 (语言包或麦克风校准变更)。这是系统级的 "Hey Cortana" / 语音命令基础设施。
### 输出路由
nuiservice.exe 通过多个通道分发推理结果:
| 通道 | API | 用途 |
|---------|-----|---------|
| 系统广播 | `RtlPublishWnfStateData` | 向所有 WNF 订阅者发布身体/人脸/音频状态 |
| 人脸登录 | `LogonUserExExW` | 触发基于人脸的自动用户登录 |
| 每应用命名管道 | 命名管道服务器 + `GetNamedPipeClientProcessId` | 按进程门控输出;在传递数据前验证调用者身份 |
| 每调用者 RPC | RPC 服务器 + `RpcServerInqCallAttributesW` | 按调用者认证访问推理结果 |
| 持久化身份 | 状态存储库 (`SRDictionaryToPropertySet`) | 跨会话持久化识别出的身份 |
| 能力门控 | `RtlCapabilityCheck` | 所有对推理输出的访问均受 NT 能力检查门控 |
`RtlCapabilityCheck` 是访问控制机制:进程必须持有适当的 NT 能力才能接收任何 NUI 数据。这分别对游戏标题访问、Shell 访问和开发者访问进行门控。
### 消费者 (通过 WNF 订阅)
| 消费者 | 备注 |
|----------|-------|
| Xbox Shell | 表情感知的 UI 适配 |
| `Guide.exe` | 自动登录触发器 |
| `XboxUI.exe` | 注意力/视线感知 UI |
| 游戏标题 | 通过 `NuiVision` WinRT 契约 (`Windows.Kinect.KinectContract v1`, 零售版) |
| xCloud | 流媒体客户端接收 NUI 状态 |
WinRT 契约 `Windows.Kinect.KinectContract v1` (见第 31 节) 是游戏标题访问此管道的零售面向接口。xCloud 通过 WSL 接收 NUI 状态值得注意:这意味着即使在云游戏会话中,主机端的流媒体客户端也可以使用本地生物识别数据 (例如玩家在场、注意力)。
```
Camera Sensor Hardware
└── ciumd_wddm.dll <- WDDM user-mode camera driver
└── PetraXC.sys (KinectSensorControl) <- WDF 1.11, disabled until device arrives
└── \\.\KinectSensorControl
nuiservice.exe [always running, SYSTEM]
└── KinectMediaSource.dll->DeviceIoControl->\\.\KinectSensorControl
├── Track 1: vvtechs.dll (body)
├── Track 2: FaceDetector/FaceRecognition + RF models (face)
└── Track 3: speechwov.dll (audio)
└──->WNF / LogonUserExExW / named pipe / RPC / State Repository
```
*研究是在一台处于开发者模式的零售版 Xbox Series S 上进行的。所有访问均通过 Microsoft 提供的开发者模式基础设施。未修改任何系统设置。*
标签:AI合规, Arden, Dev Mode, ERA, GPU架构, HTTP工具, HVCI, Hypervisor, Mr. Robot, NTFS, REST API, SRA, SSH, TOCTOU, Windows Core OS, Xbox One, Xbox Series, 云安全监控, 云资产清单, 代码完整性, 信任模型, 内存分配, 内核分析, 后渗透, 固件研究, 安全边界, 微软, 文件系统, 无线安全, 游戏主机, 漏洞分析, 硬件安全, 系统架构, 网络安全审计, 虚拟化安全, 路径探测, 逆向工具, 逆向工程, 静态分析, 驱动程序