计算机配置 — 管理模板 — Windows 组件 — 数据收集和预览版本 对应 注册表 位置 项目 ETW → diagnosticpolicy.dll 遥测采集链路完整拆解

Windows 原生诊断数据上传点位完整汇总(面向微软云端体系:Watson + Vortex 遥测双底座)

先厘清两个核心底座,很多文档容易混淆:
  1. Watson(watson.microsoft.com:承载 WER 崩溃报告、minidmp/CAB 错误包;
  2. Vortex(vortex-win.data.microsoft.com:DiagTrack 遥测管道(AllowTelemetry 管控);
     
    二者独立域名、独立传输链路、独立触发点位,不能互相替代
下面按组件分类,枚举所有具备主动上传能力的原生点位,附带触发条件、控制开关、归属云端。

一、WER Windows Error Reporting(目标:Watson)

载体:WerFault.exe、wermgr.exe、wersvc.dll
传输对象:report.wer 元数据、迷你转储、完整转储、配套日志 CAB 包

WER 上传点位清单

  1. 用户态应用未处理异常崩溃
     
    普通 Win32 程序、控制台程序、第三方软件崩溃,wer.dll 触发采集 → wermgr 排队上传 Watson
     
    控制项:WER 组策略 DisabledDontSendAdditionalData
  2. Windows 服务进程崩溃(SCM 托管服务)
     
    ServiceHealthMonitor 协同 WER 采集,归入系统级 ReportQueue
  3. UWP/Windows App 崩溃
     
    AppContainer 沙箱内进程异常,同样复用 WER 框架
  4. 内核蓝屏 BSOD
     
    内核生成 Memory.dmp,开机后 WER 扫描崩溃 dump,生成报告包上传 Watson
  5. 程序主动调用 WER API 上报(第三方自定义上报点位)
     
    导出 API:WerReportCreate / WerReportAddFile / WerReportSubmit
     
    ✅ 你原文提到:第三方程序可主动调用 API 上报自定义错误
     
    不受程序是否崩溃限制,业务软件可主动推送异常日志、自定义快照至 Watson。
  6. 驱动程序 WER 上报
     
    KMDF 驱动原生支持 WER 诊断上报,驱动异常信息送入 WER 管道。
WER 关键边界:
 
`AllowTelemetry(所需诊断数据)策略不直接阻断 Watson 上传;Watson 上传由独立 WER 注册表 / 组策略管控。

二、DiagTrack 遥测管道(目标:Vortex,受 AllowTelemetry 直接管控)

载体:svchost.exe (diagtrack.dll)
 
所有事件源头来自 ETW、系统内置诊断提供者,依据【所需 / 基本 / 完整】分级过滤。

DiagTrack 数据采集 & 上传点位

  1. 系统基础健康事件
     
    服务启动失败、驱动加载失败、组件注册故障、系统更新组件异常
  2. WER 同步推送精简故障元数据(BucketID)
     
    ⚠️ 重要区分:
     
    DiagTrack 只拿 Bucket 哈希、故障类型;不会同步上传 dmp 内存转储,完整 dump 依旧走 Watson。
  3. 系统性能 ETW 跟踪事件(仅 Basic/Full 级别开启)
  4. Windows 功能使用统计、组件调用频次(仅 Full 级别)
  5. 安装程序、MSI 安装失败事件
  6. 应用兼容性诊断事件
  7. 任务计划程序、磁盘、网络栈基础诊断事件
开关:AllowTelemetry=1(所需诊断数据) 将过滤掉大部分明细,仅保留关键性故障元数据上传 Vortex。

三、其他独立原生上传点位(不属于 WER、不属于 DiagTrack,极易被遗漏)

1. Windows Update / UUP 诊断上报

目标:settings-win.data.microsoft.com
 
系统更新下载失败、校验错误、安装故障上报;独立链路,不受 WER 直接管控。

2. 应用商店(Microsoft Store)App 诊断上报

Store 应用崩溃、安装失败,存在一条独立上报通道,部分复用 WER,部分走 Store 自有端点。

3. Defender(Microsoft Defender)云上报

  • 样本云提交
  • 威胁检测遥测、引擎故障上报
     
    独立端点,不在 Watson/Vortex 主干链路;由 Defender 自身策略控制。

4. 反馈中心(FeedbackHub)

用户手动提交反馈、复现跟踪包;手动触发上传,不属于自动诊断采集。

5. 兼容性助手(PCA Program Compatibility Assistant)

程序运行兼容性异常,自动上报兼容性诊断数据。

四、汇总总清单(结构化归类,区分自动上报 / API 主动上报)

(A)Watson 云端(watson.microsoft.com)上传点位 共 6 类

  1. 普通 Win32 应用崩溃(未处理异常)
  2. Windows 服务进程崩溃
  3. UWP / 沙箱应用崩溃
  4. 系统蓝屏内核转储上报
  5. KMDF 驱动异常报告
  6. 第三方软件调用 WER 原生 API 主动自定义上报(WerReport 系列 API)

(B)Vortex 遥测云端(vortex-win.data.microsoft.com)点位 共 7 类

  1. 系统关键服务、驱动加载故障事件
  2. WER 推送的精简崩溃 Bucket 标识(无 dump)
  3. MSI / 应用安装失败诊断
  4. 系统组件运行异常
  5. 性能跟踪采样(高级遥测级别启用)
  6. Windows 功能使用统计
  7. 硬件初始化、固件相关诊断事件

(C)其他独立云端上传通道(4 类)

  1. Windows Update 诊断遥测(settings-win.data.microsoft.com
  2. Microsoft Store 应用安装 / 运行故障上报
  3. Microsoft Defender 云样本与威胁遥测
  4. 程序兼容性助手 PCA 上报

五、关键要点总结(对应你原文需求)

  1. 第三方程序自定义上报只有一条原生官方入口:WER WerReport API,投递目标 Watson
     
    不存在通过 DiagTrack 开放给第三方通用上报的公开 API;DiagTrack 仅供 Windows 内部组件使用。
  2. 两条主干通道隔离:
  • Watson:承载崩溃快照、dump、第三方自定义错误上报;管控主体:WerSvc/wermgr,独立策略;
  • Vortex:承载系统轻量遥测事件;管控主体:DiagTrack,受组策略「允许诊断数据」控制。
  1. 流量重叠关系:
     
    同一个程序崩溃事件,会产生两条独立数据流
     
    ① WER → Watson(可选上传 dump 大包)
     
    ② 精简 Bucket 元数据 → DiagTrack → Vortex(受 AllowTelemetry 级别裁剪)

六、政企环境封堵加固极简清单(配套点位)

  1. 域名封堵
  • watson.microsoft.com 阻断 WER 错误包上传
  • vortex-win.data.microsoft.comsettings-win.data.microsoft.com 阻断系统遥测
  1. 组策略双层控制
  • WER 策略:关闭上传附加数据、禁止发送报告
  • DataCollection:设置 AllowTelemetry=1(所需诊断数据)
  1. 可选:权限限制 %ProgramData%\Microsoft\Windows\WER 禁止写入,阻断 dump 生成。

ETW → diagnosticpolicy.dll(DPS 诊断策略引擎)完整拆解解构

基础定位总览

组件全称
  • 服务:DPS Diagnostic Policy Service(诊断策略服务)
  • 承载模块:diagnosticpolicy.dll
  • 宿主进程:svchost.exe -k LocalServiceNoNetwork
  • 运行身份:NT AUTHORITY\LOCAL SERVICE
极易混淆边界:
  1. ETW(Event Tracing for Windows):内核 / 用户态底层事件基础设施,只负责产生、转发事件,没有业务过滤、策略裁决能力
  2. diagnosticpolicy.dll遥测 / 诊断数据策略裁决核心引擎
  3. DiagTrack(diagtrack.dll):事件消费、本地缓存、云端 HTTPS 上传执行器;
  4. 数据流主干:ETW 事件 → DiagTrack 会话消费 → diagnosticpolicy.dll 策略校验 → 放行 / 丢弃 / 脱敏。
配套组策略源头:
 
计算机配置 → 管理模板 → Windows组件 → 数据收集和预览版本 → 允许诊断数据(AllowTelemetry)
 
该策略注册表值 直接由 diagnosticpolicy.dll 加载生效
image
ETW基础架构参考

一、底层原理

整体分层架构

plaintext
【生产者层】
内核驱动、系统服务、应用程序、WER、ServiceHealthMonitor
调用 EventWrite / TraceLoggingWrite → 输出ETW事件

【ETW内核层】
ETW会话缓冲区、Provider注册、事件分发(内核RingBuffer)

【消费层】
DiagTrack 创建专属实时ETW Trace会话,接收事件流
        ↓ ALPC/进程内调用
【策略引擎层】 diagnosticpolicy.dll
├─ 加载全局策略:AllowTelemetry(0/1/2/3)
├─ 事件分级过滤、Provider黑白名单匹配
├─ 敏感字段脱敏(主机名、路径、用户标识裁剪)
├─ 流量熔断、采样控制、事件丢弃裁决
        ↓
【输出分支】
✅ 裁决放行 → 写入本地诊断缓存队列 → DiagTrack异步上传vortex-win.data.microsoft.com
❌ 裁决拒绝 → 直接丢弃事件,不落地、不进入网络队列

四大核心运行机制

1. 策略加载与分级过滤模型(核心)

启动阶段 diagnosticpolicy.dll 一次性读取两处注册表:
 
1)组策略(最高优先级)
 
HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection\AllowTelemetry
  • 1 = 所需诊断数据(最低限度)
  • 2 = 基本
  • 3 = 完整
     
    2)用户界面配置(无组策略时生效)
     
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Diagnostics\DiagTrack
引擎在内存生成静态规则表
  • AllowTelemetry=1(所需):仅保留故障元数据(BugCheck 码、崩溃 BucketID、服务启动失败);丢弃性能采样、应用行为、详细上下文;
  • 高于 1 级别:放开更多 ETW 事件采集;
关键点:ETW 本身不会主动丢弃事件,所有 “按诊断级别裁剪” 全部由 diagnosticpolicy.dll 实现。

2. ETW 事件路由隔离机制

两条独立诊断数据流严格分开:
  1. DiagTrack 遥测 ETW 流(经过 diagnosticpolicy.dll 过滤,受 AllowTelemetry 管控)
     
    事件只携带精简元数据,不包含内存 dump;目标 Vortex 遥测端点;
  2. WER 崩溃报告流(Watson)
     
    WerFault/wermgr 独立链路;不经过 diagnosticpolicy.dll 过滤,由独立 WER 组策略管控 dump 上传。
也就是你之前关注的:崩溃存在两条独立上传通道,策略控制对象互不重叠

3. 脱敏处理机制

diagnosticpolicy.dll 内置字段清洗规则:
  • 移除完整本地文件路径、用户名、会话 ID;
  • 匿名化硬件实例标识;
  • 截断超长二进制负载;
     
    目的:满足隐私基线,对应 “所需诊断数据” 合规要求。

4. DPS 双重职能(很多文档只知其一)

DPS 服务不仅仅服务遥测:
  1. 职能 A(遥测管道):加载 diagnosticpolicy.dll,为 DiagTrack 提供事件过滤引擎(你当前链路 ETW→diagnosticpolicy.dll);
  2. 职能 B(Windows 疑难解答):支撑系统内置故障排查工具(网络诊断、音频诊断),收集本地诊断快照,不参与云端上传。
禁用 DPS:疑难解答全部失效;同时 DiagTrack 遥测过滤引擎不可用,遥测管道异常。

二、依赖文件清单

核心二进制

  1. diagnosticpolicy.dll:策略引擎主体(System32)
  2. diagtrack.dll:DiagTrack 遥测服务模块,ETW 会话消费者
  3. traceapi.dll / advapi32.dll:ETW 用户态 API 库
  4. wevtapi.dll:Windows 事件日志交互
  5. rpcrt4.dll:RPC/ALPC 进程间通信

持久化配置载体

reg
# 管控diagnosticpolicy.dll行为的核心策略
HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection
AllowTelemetry = REG_DWORD

# DPS服务自身配置
HKLM\SYSTEM\CurrentControlSet\Services\DPS

本地缓存目录(裁决放行后落地)

plaintext
%ProgramData%\Microsoft\Diagnosis\
%SystemRoot%\Logs\DiagTrack\

专属事件日志

应用程序和服务日志 → Microsoft → Windows → DPS
 
记录:策略加载结果、AllowTelemetry 识别值、事件过滤统计、丢弃事件计数。

三、依赖关系梳理

硬性强制依赖(缺一不可)

  1. RPCSS(远程过程调用)
     
    DPS、DiagTrack 内部 IPC 通信基础;
  2. ETW 内核子系统
     
    内核提供 Trace 会话、事件缓冲区;无 ETW 则无原始事件输入;
  3. EventLog 服务
     
    诊断日志写入依赖。

可选依赖

  1. DiagTrack 服务:关闭 DiagTrack,diagnosticpolicy.dll 依然可以加载策略,但没有事件消费主体,整条遥测链路中断
  2. TCP/IP 网络栈:仅影响云端上传;离线环境事件裁决照常执行,放行事件仅本地缓存;
  3. WerSvc:WER 崩溃链路独立,不依赖 DPS/diagnosticpolicy.dll。

不依赖(重点边界区分)

  1. 不控制 WER Watson 崩溃包上传;WER 由独立策略管控;
  2. 和 Task Scheduler、Schedule 服务无直接调用链路;
  3. 不依赖 BCD、启动相关组件;
  4. 第三方程序调用 WER API 主动上报自定义错误(WerReport)不走这条链路,直接进入 Watson 通道。

四、完整逻辑链路(ETW → diagnosticpolicy.dll 标准流程)

链路 A:系统组件发生故障,遥测事件完整流转

plaintext
1. 服务/驱动触发异常,调用EventWrite输出ETW事件
2. 事件进入内核ETW缓冲区
3. DiagTrack预先创建的ETW实时会话消费事件
4. diagtrack.dll 将原始事件转发至 diagnosticpolicy.dll
5. diagnosticpolicy.dll执行4步裁决:
   ① 读取当前AllowTelemetry级别
   ② 判断事件Provider GUID、事件ID是否在允许清单
   ③ 匹配级别阈值,剔除超出当前等级的明细事件
   ④ 执行敏感字段脱敏
6. 分支判定
   ✅ 通过:封装遥测数据包 → 写入本地队列 → 联网后HTTPS上传vortex-win.data.microsoft.com
   ❌ 不通过:事件直接丢弃,不写入磁盘、不进入网络队列
7. DPS日志写入事件丢弃/放行统计

链路 B:组策略变更生效链路

plaintext
gpupdate /开机 → gpsvc.exe 写入AllowTelemetry注册表
→ DPS/diagnosticpolicy.dll周期性轮询策略变更
→ 内存规则表动态重载(部分系统需要重启DiagTrack生效)
→ 后续所有ETW事件使用新过滤标准

典型异常分支

① DPS 服务禁用:diagnosticpolicy.dll 无法加载;DiagTrack 无法获取过滤规则,遥测管道异常,大量事件丢失;
 
② 注册表策略 ACL 权限异常:引擎无法读取 AllowTelemetry,降级默认 Full 级别;
 
③ DiagTrack 停止:虽然策略引擎就绪,但没有 ETW 事件消费者,整条链路断流;
 
④ 防火墙阻断vortex-win.data.microsoft.com:裁决放行事件持续缓存在本地目录,不断重试上传。

五、运维加固与排障要点

常用验证命令

cmd
# 查询DPS服务状态
sc query DPS

# 查看DPS事件日志
wevtutil qe Microsoft-Windows-DPS/Operational

# 查看当前生效遥测策略注册表值
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection"

政企环境分层加固方案(结合你之前配置)

  1. 组策略设置:AllowTelemetry=1(所需诊断数据),由 diagnosticpolicy.dll 自动过滤明细事件;
  2. 防火墙双域名封堵
  3. 不要直接禁用 DPS:会导致系统疑难解答全部失效;如需最小化,仅禁用 DiagTrack。

六、认知误区澄清

误区 1

设置 AllowTelemetry=1,就能阻止崩溃 dump 上传
 
❌ 错误。
 
diagnosticpolicy.dll 只管DiagTrack 遥测 ETW 事件;完整 dump 通过 WER 独立通道上传 Watson,必须单独配置 WER 组策略。同一崩溃产生两条互不干扰数据流。

误区 2

ETW 采集开关由 diagnosticpolicy.dll 控制
 
❌ 错误。
 
ETW 会话是否创建、Provider 是否启用由 DiagTrack 控制;diagnosticpolicy.dll 只负责事件收到之后过滤,无法阻止 ETW 产生事件。

误区 3

关闭 DiagTrack = 关闭所有诊断采集
 
部分正确:关闭 DiagTrack 切断本链路遥测;WER 崩溃采集、任务计划日志、系统事件日志不受影响

七、相近组件链路横向对照

组件 数据流通道 管控模块 目标云端
ETW→diagnosticpolicy.dll→DiagTrack 系统遥测事件、精简故障元数据 AllowTelemetry 组策略 vortex-win.data.microsoft.com
WerFault/wermgr/WerSvc 程序 dump、崩溃报告包 WER 独立策略 watson.microsoft.com
ServiceHealthMonitor 服务崩溃自愈、事件告警 无云端上传逻辑,仅本地日志 不上传云端

 


ETW → diagnosticpolicy.dll 遥测采集链路完整拆解

覆盖:底层原理、依赖文件、完整逻辑链路、分层 API 调用流程 对应业务上下文:Windows 数据收集 & 遥测体系,受 DataCollection 组策略管控

一、底层原理

整体架构概述

Windows 各类组件、驱动、应用通过 ETW(Event Tracing for Windows) 生成结构化诊断事件; diagnosticpolicy.dll 作为诊断策略中枢,承接事件数据流,加载组策略注册表黑白名单规则,执行流量裁决: 允许 → 写入本地缓存 或 封装后发起云端遥测上传; 拒绝 → 直接丢弃事件,不落地、不上传。

核心参与者:

  1. ETW 提供程序(Event Provider):事件生产者(内核、服务、应用、WMI)
  2. ETW 会话(Trace Session):DiagTrack 创建专用跟踪会话捕获事件
  3. diagnosticpolicy.dll:策略解析、事件过滤、数据脱敏、路由决策核心
  4. DiagTrack.exe / diagtrack.dll:遥测宿主进程,负责缓存队列、网络上报
  5. 管控源:HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection 组策略键值

关键运行机制

  1. DiagTrack 服务启动时加载 diagnosticpolicy.dll,一次性读取全部遥测 / 诊断组策略,在内存构建过滤器规则表(黑白名单)
  2. ETW 事件以二进制 ETL 数据流送入诊断管道;
  3. diagnosticpolicy.dll 对每条事件执行三重校验:
    • 遥测总开关 AllowTelemetry
    • 事件类型白名单、数据收集等级(基本 / 增强 / 完整)
    • 脱敏策略(是否移除计算机名、PID、路径等敏感字段)
  4. 裁决分支: ✅ 通过:送入本地缓存缓冲区(环形缓存 / 磁盘持久化),达到阈值后封装为遥测数据包; ❌ 拦截:直接释放事件内存,无磁盘写入、无网络请求;
  5. 网络上报模块受带宽策略、代理策略、关机缓存清理策略约束。

边界说明: 组策略修改后,不会实时刷新内存规则;必须重启 DiagTrack 服务,diagnosticpolicy.dll 重新加载注册表策略。

二、依赖文件清单

1. 核心二进制模块

C:\Windows\System32\diagnosticpolicy.dll   # 诊断策略引擎主体
C:\Windows\System32\diagtrack.exe          # DiagTrack宿主进程
C:\Windows\System32\diagtrack.dll          # 遥测管道、缓存、网络上报逻辑
C:\Windows\System32\advapi32.dll           # ETW底层API、注册表读取
C:\Windows\System32\kernel32.dll           # ETW会话管理基础接口
C:\Windows\System32\wevtapi.dll            # Windows事件日志交互

2. 策略配置载体(持久化)

注册表路径:
HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection

所有 21 条组策略键值由 diagnosticpolicy.dll 启动阶段读取。

3. 数据缓存路径

%ProgramData%\Microsoft\Diagnosis\
%SystemRoot%\Logs\DiagTrack\

AllowDiagnosticLocalStorageClearTelemetryCacheOnShutdown 策略控制是否启用。

4. ETW 相关系统组件

C:\Windows\System32\wmiTrace.dll
C:\Windows\System32\traceapi.dll

5. 策略模板(用于 gpedit 可视化配置,间接依赖)

C:\Windows\PolicyDefinitions\DataCollection.admx
C:\Windows\PolicyDefinitions\zh-CN\DataCollection.adml

三、完整逻辑链路

graph LR
A[各类组件/驱动/应用] --> B[ETW Provider 写入事件]
B --> C[DiagTrack 创建ETW捕获会话]
C --> D[ETW输出二进制ETL事件流]
D --> E[diagtrack.dll 将事件转发至diagnosticpolicy.dll]
E --> F[diagnosticpolicy.dll]
F --> F1[读取内存缓存的DataCollection组策略规则]
F1 --> F2[校验遥测总开关AllowTelemetry]
F2 --> F3[事件匹配黑白名单、采集等级过滤]
F3 --> F4[执行脱敏策略:移除设备名、敏感字段]
F --> G{策略裁决结果}
G -->|拦截| H[释放事件内存,直接丢弃]
G -->|允许| I[写入本地环形内存缓存]
I --> J{持久化策略是否开启}
J -->|允许本地存储| K[缓存落地至Diagnosis目录]
J -->|禁止本地存储| L[仅内存排队,不写磁盘]
K & L --> M[遥测打包模块]
M --> N{是否满足上报条件}
N -->|满足| O[HTTPS封装,发起云端遥测上报]
N -->|不满足| P[持续缓存等待下一轮上报窗口]

链路关键要点

  1. ETW 只是事件传输通道,本身不具备业务过滤能力;过滤逻辑全部在 diagnosticpolicy.dll
  2. AllowTelemetry=0 总开关生效时,绝大多数事件直接在 F2 阶段拦截,不再执行后续黑白名单匹配;
  3. 脱敏动作发生在策略放行之后、缓存 / 上报之前;
  4. 本地缓存和云端上报是两条可独立管控分支,可以配置「允许采集但禁止上传」。

四、分层 API 调用过程

层级 1:ETW 事件产生与捕获(底层系统 API)

事件提供者输出事件:

EventWrite() / EventWriteTransfer()

DiagTrack 创建 ETW 跟踪会话用于监听:

StartTraceW()
EnableTraceEx2()
ProcessTrace() // 持续接收ETW事件流

ProcessTrace 回调函数收到每条 ETW 事件记录,转发给遥测管道。

层级 2:diagtrack.dll 转发事件至策略引擎

diagtrack 内部导出调用接口,加载 diagnosticpolicy.dll 并调用核心导出函数(微软未公开文档化内部 API):

// 伪代码示意内部调用范式
HRESULT DiagnosticPolicyInitialize();
HRESULT DiagnosticPolicyEvaluateEvent(PEVENT_RECORD pEvent, PDWORD pVerdict);
HRESULT DiagnosticPolicyScrubEventData(PEVENT_RECORD pEvent);
  1. DiagnosticPolicyInitialize:模块加载时调用; 内部调用 RegOpenKeyExW / RegQueryValueExW 读取 DataCollection 注册表全部策略,构建内存规则表;
  2. DiagnosticPolicyEvaluateEvent:每条 ETW 事件进入时执行,返回裁决结果(允许 / 拦截);
  3. DiagnosticPolicyScrubEventData:策略放行后,执行数据脱敏(移除设备名称等,匹配 DisableDeviceNameInDiagnosticData 等策略)。

层级 3:策略裁决完成后的分支 API

分支 A:本地持久缓存

CreateFileW()
WriteFile()

是否调用由 AllowDiagnosticLocalStorage 策略控制。

分支 B:遥测数据网络上报

diagtrack.dll 使用 WinHTTP 栈发起 HTTPS 请求:

WinHttpOpen()
WinHttpConnect()
WinHttpSendRequest()

代理配置读取 TelemetryProxy 策略;上行流量受 LimitTelemetryUploadBandwidth 限制。

层级 4:运行时策略刷新约束

diagnosticpolicy.dll 不会轮询注册表。 策略更新完整流程:

  1. gpedit/REG 修改注册表键 → gpupdate /force
  2. 执行:net stop diagtrack && net start diagtrack
  3. 服务重启 → diagnosticpolicy.dll 重新加载 → 内存规则表更新

重要:仅执行 gpupdate /force 不重启 DiagTrack,遥测过滤规则保持旧配置不变。

五、故障与调试对应链路定位

  1. 遥测持续上报,策略不生效 → 未重启 DiagTrack,diagnosticpolicy.dll 使用旧内存规则;
  2. 事件被采集、写入本地日志,但不上传云端 → 网络策略阻断 或 遥测上报阈值条件未达成;
  3. 上报数据包依然携带计算机名称 → 脱敏策略未启用,确认 DisableDeviceNameInDiagnosticData=1
  4. 大量 ETW 事件生成,但缓存目录无文件 → AllowDiagnosticLocalStorage=0,禁止本地持久化。

PixPin_2026-06-06_12-24-25

gpedit.msc 本地组策略编辑器

路径:计算机配置→管理模板→Windows 组件→数据收集和预览版本

底层原理、依赖文件、逻辑链路、完整 API 调用流程

背景:该节点合计 21 条策略,管控 Windows 诊断数据、遥测、用户体验改善计划、预览版更新相关行为;默认全部「未配置」。

一、底层原理

1. 核心机制

本地组策略(Administrative Templates)本质是注册表策略模板管理

  1. gpedit.msc 只是可视化编辑器,不直接控制系统行为
  2. 修改策略 = 根据 .admx 模板,向注册表指定路径写入策略键值;
  3. 系统服务 / 组件启动时读取对应注册表项,决定遥测开关、数据收集等级、诊断上传行为;
  4. 未配置 = 不写入注册表键,系统使用默认内置行为(优先读取 OEM / 系统默认遥测配置)。

2. 关联核心 Windows 组件

  • DiagTrack 服务(诊断跟踪服务,原名 Diagnostics Tracking Service) 可执行文件:C:\Windows\System32\diagtrack.dlldiagtrack.exe 职能:收集诊断事件、遥测日志、崩溃信息、性能数据并上传。
  • Connected User Experiences and Telemetry (DiagTrack)
  • Windows 预览体验计划组件 wuaueng.dllflightsettings.dll
  • 反馈中心 FeedbackHub
  • Windows Update 预览版分发逻辑

3. 策略生效规则

  • 计算机配置策略 → 写入 HKLM\SOFTWARE\Policies\Microsoft\...(机器级,所有用户生效)
  • 用户配置 → HKCU;当前路径属于计算机配置,作用域整机
  • 策略修改后不会立即生效: 自动刷新周期 90~120 分钟;手动强制刷新命令:
    gpupdate /force
  • 部分遥测策略必须重启 DiagTrack 服务 / 重启操作系统才能完全加载。

二、依赖文件清单

1. 策略模板文件(ADMX/ADML,gpedit 读取策略说明与路径)

C:\Windows\PolicyDefinitions\
    DataCollection.admx        # 「数据收集和预览版本」主模板文件
C:\Windows\PolicyDefinitions\zh-CN\
    DataCollection.adml        # 中文语言描述文件(21条策略文字来源)

关键:删除这两个文件,gpedit 内该节点直接消失、无法查看策略说明。

2. 组策略编辑器主体程序

gpedit.msc → 实际调用 mmc.exe(Microsoft管理控制台)
C:\Windows\System32\mmc.exe

.msc 是 MMC 控制台快照文件,加载对应的管理单元 gpedit.dll

3. 负责读取策略、执行遥测逻辑的系统二进制

C:\Windows\System32\diagtrack.exe
C:\Windows\System32\diagtrack.dll
C:\Windows\System32\flightsettings.dll
C:\Windows\System32\wuaueng.dll
C:\Windows\System32\diagnosticpolicy.dll

4. 注册表持久化载体(所有策略最终落地位置)

主路径:

HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection

21 条策略绝大多数键值都在此项下新建 REG_DWORD; 启用 = 1,禁用 = 0,未配置 =不存在该注册表项

5. 日志文件(排错用)

C:\Windows\Logs\DiagTrack\
%SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-DiagTrack.evtx

三、完整逻辑链路

graph LR
A[运行 gpedit.msc] --> B[mmc.exe 加载组策略管理单元]
B --> C[读取 PolicyDefinitions\DataCollection.admx/adml]
C --> D[渲染树形节点:数据收集和预览版本(共21项)]
D --> E[管理员修改策略:未配置 / 已启用 / 已禁用]
E --> F{操作类型判断}
F -->|设为【已启用/已禁用】| G[向 HKLM\..\DataCollection 写入对应REG_DWORD键值]
F -->|恢复【未配置】| H[删除注册表内对应策略键名]
G & H --> I[gpupdate /force 触发组策略客户端扩展处理]
I --> J[Group Policy Client 服务(GPSvc)加载策略注册表]
J --> K[DiagTrack服务启动/轮询读取DataCollection注册表项]
K --> L[根据键值执行逻辑:
遥测等级、是否允许上传、是否允许预览版、是否允许反馈收集]
L --> M[控制诊断数据采集、本地日志缓存、云端上报开关]

关键要点

  1. 「未配置」≠关闭遥测 未配置 = 策略不干预,DiagTrack 使用系统默认遥测级别(家庭版 / 专业版默认不同); 想要关闭必须手动设置策略为「已禁用」。
  2. 21 条策略相互存在依赖: 例如「允许遥测」总开关关闭后,下级多条诊断收集策略会隐性失效。

四、API 调用过程(分层:MMC 层 → 组策略服务层 → 系统组件层)

层级 1:mmc.exe/gpedit.msc 界面层(用户操作)

  1. mmc.exe 启动,载入 gpedit.dll 管理单元
  2. 读取 .admx XML 模板,解析 21 条策略元数据、名称、描述、对应注册表路径
  3. UI 交互:单选【未配置 / 启用 / 禁用】
  4. 用户点击「确定」→ 调用组策略客户端 COM 接口写入注册表策略项

层级 2:组策略核心 COM API(GPSvc / Group Policy API)

微软公开 Group Policy API

IGroupPolicyObject
::GetRegistryKey()
::SetRegistryKey()

gpedit 通过这套 API 操作策略注册表分区(Policy hive)不是直接 RegWrite

区别:普通 reg.exe 直接改注册表不会被认定为「组策略配置」;gpedit 写入带有策略溯源标记。

层级 3:策略生效读取链路(DiagTrack 启动时)

  1. DiagTrack 服务启动,加载 diagnosticpolicy.dll
  2. 调用系统注册表 API:
    RegOpenKeyExW(HKEY_LOCAL_MACHINE,
        L"SOFTWARE\\Policies\\Microsoft\\Windows\\DataCollection", ...)
    RegQueryValueExW(...) // 逐条读取21项对应的DWORD策略值
  3. 内存加载策略配置,初始化数据收集规则:
    • 允许收集哪些诊断事件
    • 遥测上报等级(基本 / 增强 / 完整)
    • 是否允许预览版操作系统更新注册
    • 是否允许用户体验反馈上传

层级 4:数据收集执行链路(策略生效后运行时)

ETW 事件 → 诊断日志引擎 → 根据策略判断是否缓存、是否加密上传 → 网络上报模块。

五、21 条策略共性特征总结

  1. 归属模板:DataCollection.admx
  2. 存储根注册表路径:HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection
  3. 默认状态:所有策略对应的注册表键不存在 = UI 显示【未配置】
  4. 作用目标:DiagTrack、预览体验计划、用户体验改善计划、诊断日志、崩溃报告、反馈中心
  5. 风险边界:批量禁用全部策略会影响:Windows 错误报告、部分自动故障修复、预览版接收;合规场景(工控、涉密终端)常全部收紧管控。

六、实用配套命令(可直接落地)

  1. 强制刷新组策略
gpupdate /force
  1. 重启遥测服务使策略完全生效
net stop diagtrack
net start diagtrack
  1. 导出当前所有 DataCollection 策略注册表快照
reg export "HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection" C:\DataCollection_Policy.reg

文档 1:技术文档(可直接纳入终端基线加固方案 Markdown 正式版)

gpedit.msc|数据收集和预览版本 策略技术规范

路径:计算机配置 → 管理模板 → Windows 组件 → 数据收集和预览版本 模板文件:DataCollection.admx / DataCollection.adml 策略总数:21 项;出厂默认状态:全部【未配置】

1 底层运行原理

  1. gpedit.msc 载体本质 gpedit.msc 是 MMC 控制台快照,由 mmc.exe 加载组策略管理单元;本身不直接控制系统行为,仅作为可视化编辑器解析 ADMX 策略模板。
  2. 策略持久化机制 计算机配置下该分支所有策略落地注册表路径: HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection
  • 未配置:对应注册表键不存在,系统使用原生默认行为;
  • 已启用 / 已禁用:自动创建对应 REG_DWORD 键,值 1=启用,0=禁用
  1. 核心管控对象 DiagTrack(诊断跟踪服务)、Windows 预览体验计划、用户体验改善计划、反馈中心、Windows 诊断数据收集、崩溃报告、遥测上报流程。
  2. 生效机制
  • 自动刷新周期:90–120 分钟;
  • 手动刷新:gpupdate /force
  • 部分遥测策略修改后,必须重启 DiagTrack 服务或重启主机完全加载

2 核心依赖文件清单

# 策略模板(界面文字、注册表映射定义)
C:\Windows\PolicyDefinitions\DataCollection.admx
C:\Windows\PolicyDefinitions\zh-CN\DataCollection.adml

# 控制台主体
C:\Windows\System32\mmc.exe
C:\Windows\System32\gpedit.dll

# 遥测执行二进制
C:\Windows\System32\diagtrack.exe
C:\Windows\System32\diagtrack.dll
C:\Windows\System32\diagnosticpolicy.dll
C:\Windows\System32\flightsettings.dll
C:\Windows\System32\wuaueng.dll

# 日志路径
C:\Windows\Logs\DiagTrack\
%SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-DiagTrack.evtx

3 完整逻辑链路

管理员执行 gpedit.msc
    ↓
mmc.exe 加载组策略管理单元 → 读取DataCollection.admx模板
    ↓
UI渲染21条策略条目,展示状态(未配置/启用/禁用)
    ↓
管理员保存策略配置
    ↓
调用Group Policy COM接口写入HKLM策略注册表项
    ↓
gpupdate /force 触发GPSvc(组策略客户端)加载策略
    ↓
DiagTrack服务启动/轮询读取DataCollection注册表键值
    ↓
根据策略参数控制:诊断采集级别、本地缓存、数据加密上传、预览版注册、反馈收集
    ↓
ETW事件采集、诊断日志、崩溃信息按照策略规则执行或拦截

4 API 调用分层流程

4.1 UI 层(gpedit 界面)

mmc.exe 加载管理单元,解析 ADMX 内 XML 元数据,构建策略树形视图。

4.2 组策略 COM API(核心写入层)

IGroupPolicyObject::GetRegistryKey()
IGroupPolicyObject::SetRegistryKey()

区别:reg.exe 直接修改注册表不属于组策略托管,gpedit 通过这套专用接口写入策略 Hive,具备策略溯源标记。

4.3 系统组件读取 API(DiagTrack 启动阶段)

Win32 注册表原生 API:

RegOpenKeyExW()
RegQueryValueExW()

逐条遍历 DataCollection 项下所有策略键,加载至内存作为运行时规则。

4.4 运行时执行链路

ETW 事件源 → 诊断策略引擎 (diagnosticpolicy.dll) → 匹配策略黑白名单 → 本地持久缓存 / 云端遥测上报。

5 运维配套命令集

::强制刷新组策略
gpupdate /force

::重启遥测服务
net stop diagtrack
net start diagtrack

::导出当前策略快照
reg export "HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection" C:\DataCollection_Policy.reg

::导入基线策略
reg import C:\DataCollection_Policy.reg

文档 2:21 条完整策略清单|注册表键名 + 基线加固推荐配置

基线适用场景:工控终端、涉密内网、封闭业务服务器(禁止多余遥测、诊断数据外发) 推荐配置说明:若无特殊业务需求,统一设置【已禁用】;如需基础故障诊断可按需微调。

表格

序号 策略名称 注册表键名称 推荐加固配置 说明
1 允许遥测 AllowTelemetry 已禁用 (0) 总开关,禁用后大量下级收集策略失效
2 配置遥测处理程序 ConfigureTelemetryProcessor 已禁用 (0) 控制遥测数据本地处理模块
3 限制诊断日志收集上限 LimitDiagnosticLogCollection 已禁用 (0) 限制系统诊断事件采集规模
4 关闭诊断数据使用者体验 DisableDiagnosticDataConsentUX 已启用 (1) 隐藏遥测相关用户弹窗
5 启用自动崩溃报告 EnableAutomaticCrashReporting 已禁用 (0) 阻止程序崩溃信息上传微软
6 启用 Windows 错误报告 EnableWindowsErrorReporting 已禁用 (0) 拦截系统蓝屏、组件错误上报
7 配置 Windows 错误报告 ConfigureWindowsErrorReporting 已禁用 (0) 细化错误上报通道管控
8 禁止发送附加诊断数据 DisableAdditionalDiagnosticData 已启用 (1) 阻止附加环境、硬件信息随同上报
9 禁止设备名称在诊断数据中上传 DisableDeviceNameInDiagnosticData 已启用 (1) 脱敏,不上传设备计算机名
10 允许用户体验改善计划 AllowCustomerExperienceImprovementProgram 已禁用 (0) 关闭 CEIP 用户体验采集
11 配置反馈中心 ConfigureFeedbackHub 已禁用 (0) 限制反馈中心数据收集与上传
12 关闭反馈通知 DisableFeedbackNotifications 已启用 (1) 屏蔽系统反馈弹窗
13 允许预览体验计划 AllowPreviewBuilds 已禁用 (0) 禁止本机注册 Windows 预览版通道
14 配置预览体验计划渠道 ConfigurePreviewBuildsChannel 已禁用 (0) 阻止切换 Dev/Beta 预览渠道
15 预览体验计划可选数据收集 PreviewBuildsOptionalDataCollection 已禁用 (0) 预览版附加遥测管控
16 限制遥测上传带宽 LimitTelemetryUploadBandwidth 已启用 (1) 限制上行流量,默认极低阈值
17 遥测代理配置 TelemetryProxy 未配置 内网隔离环境一般不配置代理
18 删除遥测数据本地缓存 ClearTelemetryCacheOnShutdown 已启用 (1) 关机清理本地缓存遥测日志
19 启用诊断数据筛选 EnableDiagnosticFiltering 已启用 (1) 开启采集过滤规则
20 允许诊断数据本地存储 AllowDiagnosticLocalStorage 已禁用 (0) 禁止持久化存储诊断原始数据
21 组织诊断数据端点替代 OrgDiagnosticEndpoint 未配置 私有化遥测端点,内网封闭环境无需配置

重要备注

  1. 「未配置」不等于关闭遥测 键不存在时 DiagTrack 读取系统默认策略;专业版 / 企业版默认遥测等级高于零,内网安全加固不能保留未配置
  2. 依赖关系: AllowTelemetry 总开关禁用后,部分子策略逻辑上不再生效;建议全套统一管控,不要仅配置单项。
  3. 兼容性风险: 全部禁用策略后,Windows 自动疑难解答、在线故障修复、预览版更新功能失效;生产服务器、工控机无影响,办公终端评估后实施。

一、一键加固 REG 文件(21 条策略批量配置,封闭内网 / 工控基线方案)

新建文本,复制全部内容,另存为 Windows_DataCollection_Hardening.reg,编码选择 ANSI,右键合并导入。

配置逻辑:按照上文加固清单实施;导入后建议执行 gpupdate /force,重启 DiagTrack 服务。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DataCollection]
"AllowTelemetry"=dword:00000000
"ConfigureTelemetryProcessor"=dword:00000000
"LimitDiagnosticLogCollection"=dword:00000000
"DisableDiagnosticDataConsentUX"=dword:00000001
"EnableAutomaticCrashReporting"=dword:00000000
"EnableWindowsErrorReporting"=dword:00000000
"ConfigureWindowsErrorReporting"=dword:00000000
"DisableAdditionalDiagnosticData"=dword:00000001
"DisableDeviceNameInDiagnosticData"=dword:00000001
"AllowCustomerExperienceImprovementProgram"=dword:00000000
"ConfigureFeedbackHub"=dword:00000000
"DisableFeedbackNotifications"=dword:00000001
"AllowPreviewBuilds"=dword:00000000
"ConfigurePreviewBuildsChannel"=dword:00000000
"PreviewBuildsOptionalDataCollection"=dword:00000000
"LimitTelemetryUploadBandwidth"=dword:00000001
"ClearTelemetryCacheOnShutdown"=dword:00000001
"EnableDiagnosticFiltering"=dword:00000001
"AllowDiagnosticLocalStorage"=dword:00000000
; TelemetryProxy、OrgDiagnosticEndpoint 保持未配置,不创建键值

恢复默认(全部改回【未配置】)清理 REG

Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DataCollection]

二、PowerShell 巡检脚本:检测 21 条策略当前状态

用途:批量终端审计,输出策略名称、注册表键名、当前值、合规判定 保存为 Check-DataCollectionPolicy.ps1以管理员身份运行

#Requires -RunAsAdministrator
$regPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection"

$policyList = @(
    @{Name="允许遥测";Key="AllowTelemetry";Standard=0},
    @{Name="配置遥测处理程序";Key="ConfigureTelemetryProcessor";Standard=0},
    @{Name="限制诊断日志收集上限";Key="LimitDiagnosticLogCollection";Standard=0},
    @{Name="关闭诊断数据使用者体验";Key="DisableDiagnosticDataConsentUX";Standard=1},
    @{Name="启用自动崩溃报告";Key="EnableAutomaticCrashReporting";Standard=0},
    @{Name="启用Windows错误报告";Key="EnableWindowsErrorReporting";Standard=0},
    @{Name="配置Windows错误报告";Key="ConfigureWindowsErrorReporting";Standard=0},
    @{Name="禁止发送附加诊断数据";Key="DisableAdditionalDiagnosticData";Standard=1},
    @{Name="禁止设备名称在诊断数据中上传";Key="DisableDeviceNameInDiagnosticData";Standard=1},
    @{Name="允许用户体验改善计划";Key="AllowCustomerExperienceImprovementProgram";Standard=0},
    @{Name="配置反馈中心";Key="ConfigureFeedbackHub";Standard=0},
    @{Name="关闭反馈通知";Key="DisableFeedbackNotifications";Standard=1},
    @{Name="允许预览体验计划";Key="AllowPreviewBuilds";Standard=0},
    @{Name="配置预览体验计划渠道";Key="ConfigurePreviewBuildsChannel";Standard=0},
    @{Name="预览体验计划可选数据收集";Key="PreviewBuildsOptionalDataCollection";Standard=0},
    @{Name="限制遥测上传带宽";Key="LimitTelemetryUploadBandwidth";Standard=1},
    @{Name="删除遥测数据本地缓存";Key="ClearTelemetryCacheOnShutdown";Standard=1},
    @{Name="启用诊断数据筛选";Key="EnableDiagnosticFiltering";Standard=1},
    @{Name="允许诊断数据本地存储";Key="AllowDiagnosticLocalStorage";Standard=0}
    # TelemetryProxy、OrgDiagnosticEndpoint 基线要求未配置,不纳入合规校验
)

$output = @()
foreach($p in $policyList){
    $val = Get-ItemProperty -Path $regPath -Name $p.Key -ErrorAction SilentlyContinue
    if($null -eq $val){
        $currentValue = "未配置(键不存在)"
        $compliance = "不合规"
    }else{
        $currentValue = $val.$($p.Key)
        if($currentValue -eq $p.Standard){
            $compliance = "合规"
        }else{
            $compliance = "不合规"
        }
    }
    $output += [PSCustomObject]@{
        策略名称 = $p.Name
        注册表键名 = $p.Key
        当前值 = $currentValue
        基线标准值 = $p.Standard
        合规状态 = $compliance
    }
}

$output | Format-Table -AutoSize
# 导出CSV用于台账审计
$output | Export-Csv -Path "$PWD\DataCollection_Policy_Audit.csv" -Encoding UTF8 -NoTypeInformation
Write-Host "审计报告已输出至 $PWD\DataCollection_Policy_Audit.csv"

Write-Host "`n执行策略刷新命令:gpupdate /force"
Write-Host "重启遥测服务命令:net stop diagtrack && net start diagtrack"

三、配套运维操作命令汇总

::1.导入基线注册表
reg import Windows_DataCollection_Hardening.reg

::2.强制刷新组策略
gpupdate /force

::3.重启DiagTrack使遥测策略完全生效
net stop diagtrack
net start diagtrack

::4.导出现有策略备份
reg export "HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection" Policy_Backup.reg /y

四、重要实施提示

  1. REG 仅写入计算机配置策略,适配专业版 / 企业版 Windows;家庭版无 gpedit,但注册表键同样生效;
  2. AllowTelemetry=0 总开关禁用后,部分下级采集逻辑自动失效,属于正常现象;
  3. 若业务需要保留基础故障诊断(不建议完全封堵),可以单独修改 AllowTelemetry=1(基本遥测);
  4. 大规模域环境推荐:不要本地导入 REG,直接将 21 项策略封装进域组策略下发

PixPin_2026-06-06_12-23-35

 

图片解读:本地组策略编辑器 - 数据收集和预览版本 策略合集

一、界面基础说明

  1. 工具:gpedit.msc 本地组策略编辑器
  2. 路径:计算机配置 → 管理模板 → Windows 组件 → 数据收集和预览版本
  3. 总数量:21 条诊断、遥测、用户体验相关管控策略,当前全部为未配置状态
  4. 核心作用:管控 Windows 诊断数据、遥测上传、预览版更新、用户反馈、OneSettings 云同步行为,用于系统隐私加固、企业合规管控。

二、21 条策略完整清单 + 功能分类

分类 1:诊断数据与遥测上传管控(核心隐私类)

策略名称 管控目标
切换对会员版本的用户控制 控制预览版会员通道的用户权限切换
允许商业数据管道 是否开放企业商用诊断数据上报通道
允许进行桌面分析处理 桌面分析遥测数据采集开关
允许发送 Windows 诊断数据中的设备名称 上传诊断时是否附带本机设备名
允许诊断数据 全局诊断遥测总开关,控制基础日志上传
允许进行更新合规性处理 上报系统更新合规状态至微软服务器
允许 WUfB 云处理 Windows 更新商业版云遥测数据
配置桌面分析的诊断数据上传终结点 自定义桌面分析数据上传服务器地址
配置诊断数据选择加入更改通知 用户修改遥测级别时弹窗通知
禁止删除诊断数据 阻止系统自动清理本地诊断日志缓存
禁用诊断数据查看器 关闭内置诊断日志查看工具
限制可选的桌面分析诊断数据 缩减桌面分析采集的数据范围
配置互连用户体验和遥测 全局遥测级别配置(基础 / 增强 / 完全)

分类 2:企业商用标识与代理管控

策略名称 管控目标
配置商用 ID 填入企业商用组织 ID,区分商用设备遥测数据
为 “已连接的用户体验和遥测” 服务经验证的代理使用配置 为遥测上传配置专用代理服务器

分类 3:OneSettings 云同步(系统设置云同步)

策略名称 管控目标
禁用 OneSettings 下载 阻止本机从云端同步系统设置
启用 OneSettings 审核 记录所有云设置同步操作日志

分类 4:日志、数据留存与反馈通知

策略名称 管控目标
限制诊断日志收集 限制本地诊断日志存储容量、采集范围
限制转储收集 限制系统蓝屏 / 崩溃转储文件上传、本地留存
不显示反馈通知 关闭系统推送的用户反馈弹窗、预览版调研通知

三、运维加固推荐配置(企业 / 内网服务器标准)

1. 遥测最小化隐私方案(推荐生产服务器)

  1. 允许诊断数据已禁用,彻底关闭基础遥测上传
  2. 配置互连用户体验和遥测已禁用,关闭全量用户体验数据采集
  3. 允许发送 Windows 诊断数据中的设备名称已禁用,禁止上传设备标识
  4. 允许进行桌面分析处理已禁用,关闭桌面分析采集
  5. 不显示反馈通知已启用,屏蔽所有反馈弹窗

2. 企业合规(需上报桌面分析)折中方案

  1. 允许诊断数据已启用 → 基础级别,仅上传最小必要日志
  2. 配置商用ID已启用,填入企业组织 ID 区分商用设备
  3. 允许发送 Windows 诊断数据中的设备名称已禁用,隐藏设备标识
  4. 限制可选的桌面分析诊断数据已启用,裁剪采集数据范围

四、PowerShell 批量配置对应注册表底层路径

组策略本质写入注册表路径:
 
HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection
 
示例:关闭全局遥测
powershell
# 禁用诊断遥测总开关
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name AllowTelemetry -Value 0 -Type DWord
# 禁用设备名称上传
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name AllowDeviceNameInDiagnosticData -Value 0 -Type DWord

五、关联系统底层逻辑(CBS/DISM 补充)

  1. 本组策略仅管控数据上报行为,不增减系统 CBS 组件;
  2. 若需彻底移除诊断 / 反馈应用,需通过 Get-WindowsOptionalFeature 卸载配套可选功能;
  3. 生效方式:组策略修改后执行 gpupdate /force 强制刷新,无需重启。

六、风险提示

⚠️ 全部禁用遥测会导致:Windows 更新问题自动排查失效、微软无设备日志协助故障定位、预览版更新推送停止;
 
⚠️ 开启桌面分析、商业数据管道仅适合有微软商业订阅(MDA / 桌面分析订阅)的企业,普通内网服务器无需启用。
 

脚本解析、扩展完整加固脚本、验证与恢复方案

一、现有代码逐行解析

powershell
# 1. 自动创建注册表DataCollection策略项(不存在则新建,存在不报错)
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Force

# 2. 全局诊断遥测总开关:0=完全关闭遥测(无诊断数据上传)
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name AllowTelemetry -Value 0 -Type DWord

# 3. 禁止诊断数据包携带本机设备名称,保护设备标识隐私
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name AllowDeviceNameInDiagnosticData -Value 0 -Type DWord

关键值说明 AllowTelemetry

  • 0:关闭所有诊断遥测(服务器 / 内网隔离环境推荐)
  • 1:仅基础安全数据(最小日志)
  • 2:增强诊断(更新、硬件基础日志)
  • 3:完整全量遥测(预览版、反馈全部上传)

二、配套完整加固脚本(覆盖截图内全部隐私管控策略)

以管理员 PowerShell 运行,一次性批量关闭所有遥测、反馈、桌面分析、OneSettings 同步:
powershell
# 创建策略注册表路径
$regPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection"
New-Item -Path $regPath -Force | Out-Null

# 1. 核心遥测关闭
Set-ItemProperty -Path $regPath -Name AllowTelemetry -Value 0 -Type DWord
Set-ItemProperty -Path $regPath -Name AllowDeviceNameInDiagnosticData -Value 0 -Type DWord

# 2. 禁用桌面分析、商业数据管道
Set-ItemProperty -Path $regPath -Name AllowCommercialDataPipeline -Value 0 -Type DWord
Set-ItemProperty -Path $regPath -Name AllowDesktopAnalyticsProcessing -Value 0 -Type DWord

# 3. 关闭WUfB云处理、更新合规上报
Set-ItemProperty -Path $regPath -Name AllowWUfBCloudProcessing -Value 0 -Type DWord
Set-ItemProperty -Path $regPath -Name AllowUpdateComplianceProcessing -Value 0 -Type DWord

# 4. 禁用OneSettings云端设置同步
Set-ItemProperty -Path $regPath -Name DisableOneSettingsDownloads -Value 1 -Type DWord

# 5. 屏蔽系统反馈弹窗通知
Set-ItemProperty -Path $regPath -Name DoNotShowFeedbackNotifications -Value 1 -Type DWord

# 6. 限制诊断日志、崩溃转储收集
Set-ItemProperty -Path $regPath -Name LimitDiagnosticLogCollection -Value 1 -Type DWord
Set-ItemProperty -Path $regPath -Name LimitDumpCollection -Value 1 -Type DWord

# 7. 禁用诊断数据查看器、禁止删除本地诊断日志(防篡改日志)
Set-ItemProperty -Path $regPath -Name DisableDiagnosticDataViewer -Value 1 -Type DWord
Set-ItemProperty -Path $regPath -Name DisableDeletingDiagnosticData -Value 1 -Type DWord

Write-Host "✅ 全部诊断遥测隐私加固注册表项写入完成"
# 强制刷新组策略生效
gpupdate /force

三、验证脚本(检查当前所有遥测策略状态)

powershell
$regPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection"
if(Test-Path $regPath){
    Get-ItemProperty -Path $regPath | Select *
}else{
    Write-Warning "策略注册表路径不存在,遥测未配置"
}
执行后可直观看到所有 DWord 键值,确认是否全部加固成功。
# 管理员PowerShell执行,全量关闭诊断遥测、隐私上报
$regPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection"
# 创建注册表策略项,存在则跳过
New-Item -Path $regPath -Force | Out-Null

# 核心遥测总开关与设备标识隐藏
Set-ItemProperty -Path $regPath -Name AllowTelemetry -Value 0 -Type DWord
Set-ItemProperty -Path $regPath -Name AllowDeviceNameInDiagnosticData -Value 0 -Type DWord

# 企业商用/桌面分析云上报全部禁用
Set-ItemProperty -Path $regPath -Name AllowCommercialDataPipeline -Value 0 -Type DWord
Set-ItemProperty -Path $regPath -Name AllowDesktopAnalyticsProcessing -Value 0 -Type DWord
Set-ItemProperty -Path $regPath -Name AllowWUfBCloudProcessing -Value 0 -Type DWord
Set-ItemProperty -Path $regPath -Name AllowUpdateComplianceProcessing -Value 0 -Type DWord

# 云设置同步、反馈弹窗管控
Set-ItemProperty -Path $regPath -Name DisableOneSettingsDownloads -Value 1 -Type DWord
Set-ItemProperty -Path $regPath -Name DoNotShowFeedbackNotifications -Value 1 -Type DWord

# 本地日志、转储、诊断工具管控
Set-ItemProperty -Path $regPath -Name LimitDiagnosticLogCollection -Value 1 -Type DWord
Set-ItemProperty -Path $regPath -Name LimitDumpCollection -Value 1 -Type DWord
Set-ItemProperty -Path $regPath -Name DisableDiagnosticDataViewer -Value 1 -Type DWord
Set-ItemProperty -Path $regPath -Name DisableDeletingDiagnosticData -Value 1 -Type DWord

Write-Host "✅ 全部遥测隐私策略注册表写入完成"
# 强制刷新组策略
gpupdate /force | Out-Host

# 输出校验所有配置项
Write-Host "`n=== 当前DataCollection策略完整校验 ==="
Get-ItemProperty -Path $regPath | Select AllowTelemetry,AllowDeviceNameInDiagnosticData,AllowCommercialDataPipeline,AllowDesktopAnalyticsProcessing,AllowWUfBCloudProcessing,AllowUpdateComplianceProcessing,DisableOneSettingsDownloads,DoNotShowFeedbackNotifications,LimitDiagnosticLogCollection,LimitDumpCollection,DisableDiagnosticDataViewer,DisableDeletingDiagnosticData

 

@echo off

:: 切换对预览体验成员内部版本的用户控制
reg add "HKLM\SOFTWARE\Policies\Microsoft\WindowsPreviewBuilds" /v AllowBuildPreview /t REG_DWORD /d 1 /f

:: 允许商业数据管道
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection" /v CommercialDataOptIn /t REG_DWORD /d 1 /f

:: 允许进行桌面分析处理
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\$$windows.data.blueskyDev\Current\Default$windows.data.blueskyDev.cloud\windows.data.blueskyDev\Features" /v DesktopAnalyticsProcessingAllowed /t REG_DWORD /d 1 /f

:: 允许发送 Windows 诊断数据中的设备名称
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DeviceNameAllowed /t REG_DWORD /d 1 /f

:: 允许诊断数据
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v AllowTelemetry /t REG_DWORD /d 1 /f

:: 允许进行更新合规性处理
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v AllowUpdateCompliance /t REG_DWORD /d 1 /f

:: 允许 WUfB 云处理
reg add "HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate" /v WUfBEnableCloudPolicy /t REG_DWORD /d 1 /f

:: 配置商用ID
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v CommercialId /t REG_SZ /d "YourCommercialIDHere" /f

:: 配置桌面分析的诊断数据上传终结点
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DesktopAnalyticsDataUploadEndpoint /t REG_SZ /d "https://youruploadendpoint.com" /f

:: 配置诊断数据选择加入更改通知
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DiagnosticDataChangeNotificationAllowed /t REG_DWORD /d 1 /f

:: 配置诊断数据选择加入设置用户界面
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DiagnosticDataViewerAllowed /t REG_DWORD /d 1 /f

:: 禁止删除诊断数据
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DisableDeleteDiagnosticData /t REG_DWORD /d 1 /f

:: 禁用诊断数据查看器
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DisableDiagnosticDataViewer /t REG_DWORD /d 1 /f

:: 为“已连接的用户体验和遥测”服务进行经验证的代理使用配置
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v ConnectedUserExperiencesAndTelemetryProxyAuthConfigured /t REG_DWORD /d 1 /f

:: 禁用 OneSettings 下载
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DisableOneSettingsDownload /t REG_DWORD /d 1 /f

:: 启用 OneSettings 审核
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v EnableOneSettingsAudit /t REG_DWORD /d 1 /f

:: 限制诊断日志收集(可以根据需要修改 REG_DWORD 的值)
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DiagnosticLogCollectionAllowed /t REG_DWORD /d 2 /f

:: 限制转储收集
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DumpCollectionAllowed /t REG_DWORD /d 2 /f

:: 限制可选的桌面分析诊断数据
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v OptionalDesktopAnalyticsDataCollectionAllowed /t REG_DWORD /d 2 /f

:: 配置互连用户体验和遥测
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v ConnectedUserExperiencesAndTelemetry /t REG_DWORD /d 1 /f

:: 不显示反馈通知
reg add "HKCU\Software\Microsoft\Siuf\Rules" /v NumberOfSIUFInPeriod /t REG_DWORD /d 0 /f

echo 用户控制设置已配置成功!
pause


@echo off

:: 切换对预览体验成员内部版本的用户控制
reg add "HKLM\SOFTWARE\Policies\Microsoft\WindowsPreviewBuilds" /v AllowBuildPreview /t REG_DWORD /d 1 /f

:: 允许商业数据管道
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection" /v CommercialDataOptIn /t REG_DWORD /d 1 /f

:: 允许进行桌面分析处理
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\$$windows.data.blueskyDev\Current\Default$windows.data.blueskyDev.cloud\windows.data.blueskyDev\Features" /v DesktopAnalyticsProcessingAllowed /t REG_DWORD /d 1 /f

:: 允许发送 Windows 诊断数据中的设备名称
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DeviceNameAllowed /t REG_DWORD /d 1 /f

:: 允许诊断数据
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v AllowTelemetry /t REG_DWORD /d 1 /f

:: 允许进行更新合规性处理
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v AllowUpdateCompliance /t REG_DWORD /d 1 /f

:: 允许 WUfB 云处理
reg add "HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate" /v WUfBEnableCloudPolicy /t REG_DWORD /d 1 /f

:: 配置商用ID
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v CommercialId /t REG_SZ /d "YourCommercialIDHere" /f

:: 配置桌面分析的诊断数据上传终结点
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DesktopAnalyticsDataUploadEndpoint /t REG_SZ /d "https://youruploadendpoint.com" /f

:: 配置诊断数据选择加入更改通知
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DiagnosticDataChangeNotificationAllowed /t REG_DWORD /d 1 /f

:: 配置诊断数据选择加入设置用户界面
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DiagnosticDataViewerAllowed /t REG_DWORD /d 1 /f

:: 禁止删除诊断数据
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DisableDeleteDiagnosticData /t REG_DWORD /d 1 /f

:: 禁用诊断数据查看器
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DisableDiagnosticDataViewer /t REG_DWORD /d 1 /f

:: 为“已连接的用户体验和遥测”服务进行经验证的代理使用配置
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v ConnectedUserExperiencesAndTelemetryProxyAuthConfigured /t REG_DWORD /d 1 /f

:: 禁用 OneSettings 下载
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DisableOneSettingsDownload /t REG_DWORD /d 1 /f

:: 启用 OneSettings 审核
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v EnableOneSettingsAudit /t REG_DWORD /d 1 /f

:: 限制诊断日志收集(可以根据需要修改 REG_DWORD 的值)
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DiagnosticLogCollectionAllowed /t REG_DWORD /d 2 /f

:: 限制转储收集
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v DumpCollectionAllowed /t REG_DWORD /d 2 /f

:: 限制可选的桌面分析诊断数据
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v OptionalDesktopAnalyticsDataCollectionAllowed /t REG_DWORD /d 2 /f

:: 配置互连用户体验和遥测
reg add "HKLM\Software\Policies\Microsoft\Windows\DataCollection" /v ConnectedUserExperiencesAndTelemetry /t REG_DWORD /d 1 /f

:: 不显示反馈通知
reg add "HKCU\Software\Microsoft\Siuf\Rules" /v NumberOfSIUFInPeriod /t REG_DWORD /d 0 /f

echo 用户控制设置已配置成功!
pause

 

posted @ 2023-11-06 18:23  suv789  阅读(396)  评论(0)    收藏  举报