一、问题现象
某台 Windows 机器上,桌面应用 Hermes Agent CN Desktop 启动后主窗口白屏,界面完全无法渲染,但进程在任务管理器里存在。
背景 :同一份应用包在一台新电脑(无安全软件管控)上测试运行完全正常 ;将包复制到当前这台电脑后,启动即白屏。软件本身没有问题,差异在环境。
关键观察:
- 同一份应用包,新电脑上运行正常,当前电脑上立即白屏------问题与环境强相关;
- 白屏期间,WebView2 的数据目录下持续生成崩溃转储文件(Crashpad reports,
.dmp); - 本机 Edge 浏览器(同内核 v151)完全正常,网页渲染、播放都无异常;
- 只有使用 WebView2 Runtime 的独立应用崩。
白屏 + 渲染进程崩溃 + 浏览器正常,这是典型的 WebView2 渲染进程被"杀死" 的现象。
二、环境信息
| 项目 | 值 |
|---|---|
| 系统 | Windows(深信服 Sangfor 虚拟化平台的虚拟机) |
| WebView2 Runtime | v151.0.4129.107 |
| Edge | v151(正常) |
| 异常码 | 0x80000003(STATUS_BREAKPOINT,通常由 FAIL_FAST 触发) |
| 崩溃位置 | WebView2 渲染进程(Renderer) |
| 预装安全软件 | 天锐绿盾(Tipray)DLP 防泄密系统、深信服 VDI 客户端 |
三、初步排查:崩溃转储指向 FAIL_FAST
打开 data/webview2/EBWebView/Crashpad/reports/,发现 3 个 .dmp 文件,全部是渲染进程崩溃。
用调试器(或 WinDbg)读取异常码,全部为:
0x80000003 (FAIL_FAST)
Chromium 的 FAIL_FAST 不是普通崩溃,它是进程主动自毁------通常发生在完整性自检失败时,例如:
- 检测到进程被注入未签名 或非白名单的 DLL;
- 渲染器代码完整性(Renderer Code Integrity)校验失败;
- 沙箱(Sandbox)完整性被破坏。
也就是说:有第三方 DLL 被强制注入到了 WebView2 渲染进程,触发了 Chromium 的完整性保护,进程直接自杀。
四、对比实验:为什么 Edge 不崩,WebView2 崩?
同样的内核、同样的版本,Edge 正常而独立 WebView2 应用崩溃,差异在哪?
逐个做对照实验:
| 场景 | 结果 | 结论 |
|---|---|---|
| 应用包在新电脑(无管控)运行 | ✅ 正常 | 排除应用本身问题,差异在环境 |
| Edge GUI 正常浏览 | ✅ 正常 | Edge 已被安全软件"豁免"(白名单) |
| Edge headless 渲染 | ✅ 正常 | 同上 |
| WebView2 独立应用 | ❌ FAIL_FAST | 未被豁免,钩子注入后崩溃 |
| 旧版 WebView2 Runtime | ✅ 正常 | 旧版完整性检查较宽松,容忍注入 |
结论非常清晰:同一份应用,新电脑正常、这台崩溃,唯一变量就是这台机器上有安全软件向所有 GUI 进程注入钩子 DLL,Edge 在白名单里躲过一劫,WebView2 应用撞上了完整性检查。
顺藤摸瓜,在进程模块列表中找到了两个可疑注入:
C:\Windows\System32\LdxHook64.dll
C:\InetPub\ftproot\Tipray\LdRead\LdWaterMarkHook64.dll
LdxHook64.dll + 屏幕水印钩子(LdWaterMarkHook64)------这是 天锐绿盾(Tipray)DLP 防泄密系统的组件。真相浮出水面。
五、根因分析:天锐绿盾 DLP 的工作原理
天锐绿盾是国内常见的终端 DLP(数据防泄密)软件,它的工作方式决定了它会"管到"每一个进程:
- 内核驱动层 :
LdDisk.sys(磁盘透明加解密过滤驱动)、Ldxghcore.sys(加密核心驱动)挂在文件系统上,对所有读写做透明加解密; - 用户态注入层 :通过 Detours 钩子(
LdxHook64.dll/LdxHook32.dll)向所有 GUI 进程 注入 DLL,实现屏幕水印、文件操作监控、打印管控(LdPrintMonitor)等; - 服务层 :
LdxFileServer服务负责策略下发、日志回传。
而 WebView2/Chromium 的渲染进程 在启动时会做完整性自检(Renderer Code Integrity + 沙箱校验),一旦发现进程里被注入了非白名单/未签名 DLL ,直接 FAIL_FAST 自杀------这就是白屏的根因:
WebView2 渲染进程启动
↓
检测到 LdxHook64.dll 注入(非白名单)
↓
完整性自检失败 → FAIL_FAST (0x80000003)
↓
渲染进程崩溃 → 应用白屏
六、解决方案
方案一(应急):禁用 WebView2 的完整性自检
设置用户级环境变量,让 WebView2 渲染进程以降级模式启动:
powershell
# 临时生效
setx WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS "--no-sandbox --disable-gpu --disable-features=RendererCodeIntegrity"
# 同时持久化到注册表(HKCU\Environment),防止部分版本不读环境变量
对应注册表项:
HKCU\Environment
WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = --no-sandbox --disable-gpu --disable-features=RendererCodeIntegrity
关键参数说明:
| 参数 | 作用 |
|---|---|
--no-sandbox |
禁用 Chromium 沙箱,钩子注入不再触发启动期 FAIL_FAST(最关键) |
--disable-gpu |
关闭 GPU 加速,减少渲染链路不确定性 |
--disable-features=RendererCodeIntegrity |
关闭渲染器代码完整性校验 |
验证结果 :设置后 WebView2 渲染进程稳定存活(6 个 msedgewebview2.exe 进程),应用界面正常渲染,崩溃转储停止产生。
⚠️ 注意 :此方案会降低 WebView2 的沙箱隔离与代码完整性保护,只能作为应急手段,不应长期保留。
方案二(治本):禁用绿盾的服务与内核驱动
绿盾核心由三部分组成,逐个处理:
powershell
# 管理员 PowerShell
# 1. 停止并禁用文件服务器服务
Stop-Service -Name LdxFileServer -Force
Set-Service -Name LdxFileServer -StartupType Disabled
# 2. 禁用加密核心驱动(重启后不再加载)
sc.exe config Ldxghcore start= disabled
# 3. 禁用磁盘透明加密驱动 ------ 注意!服务名带 .sys 后缀!
sc.exe config LdDisk.sys start= disabled
⚠️ 踩坑 :
sc.exe config LdDisk start= disabled会报 1060(指定的服务未安装) ,因为该驱动的真实服务名是LdDisk.sys(带 .sys 后缀) 。用sc.exe query LdDisk.sys或查注册表HKLM\SYSTEM\CurrentControlSet\Services才能看到真名。
验证(重启后):
powershell
sc.exe query LdDisk.sys # 期望 STATE: STOPPED + START_TYPE: DISABLED
sc.exe query Ldxghcore # 期望 STATE: STOPPED + START_TYPE: DISABLED
Get-Service LdxFileServer # 期望 Stopped / Disabled
方案三(正规):联系 IT 将应用加入豁免白名单
最稳妥的做法是让管理员在绿盾/深信服 DLP 控制台中将 msedgewebview2.exe 加入豁免/信任列表 ,关闭对其的钩子注入与屏幕水印。豁免后即可移除 --no-sandbox 等降级参数,恢复 WebView2 完整安全沙箱。
七、踩坑记录
排查中遇到几个容易误导人的坑,记录如下:
- "已卸载"不等于"已停止" :绿盾的注册表卸载项、开始菜单条目被清除后,看起来像卸载了;但实际上
LdxFileServer服务、两个内核驱动仍在运行,客户端log\目录还在持续写入。清卸载入口 ≠ 停核心组件,判断是否卸载必须查服务与驱动状态。 - 服务名陷阱 :
LdDisk的真实服务名是LdDisk.sys,sc查询/配置时名字写错直接报 1060,极易误判为"服务不存在"。 - 内核驱动无法在线卸载 :
Ldxghcore配置为 Disabled 后当前会话仍显示 RUNNING,这是正常现象------内核驱动需要重启系统 后才真正卸载,fltmc unload对非 minifilter 驱动也会报"找不到筛选器"。 - 非管理员权限报"拒绝访问" :
Stop-Service/Set-Service必须以管理员身份运行,普通会话会报"无法打开服务/拒绝访问"。 - 域策略可能回弹 :如果机器在域/管控网络中,重启后安全策略刷新可能把服务重新改回 Automatic。若发现回弹,说明是服务端强制下发,本地禁用无效,必须走 IT 渠道。
八、验证清单
修复完成后,按以下清单逐项确认:
- WebView2 应用(Hermes)正常显示界面,不再白屏
-
Crashpad/reports/目录不再产生新的.dmp -
msedgewebview2.exe渲染进程稳定存活(多个进程) -
Get-Service LdxFileServer→Stopped / Disabled -
sc.exe query LdDisk.sys→STOPPED / DISABLED -
sc.exe query Ldxghcore→STOPPED / DISABLED - 绿盾客户端
log\目录停止更新
九、总结
- 现象 :WebView2/Chromium 应用白屏、渲染进程
FAIL_FAST (0x80000003); - 根因 :天锐绿盾 DLP 通过 Detours 向所有 GUI 进程注入
LdxHook64.dll等钩子,Chromium 完整性自检失败后进程自毁;Edge 因在白名单中不受影响; - 应急 :
WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--no-sandbox --disable-gpu --disable-features=RendererCodeIntegrity(有安全代价); - 治本 :禁用
LdxFileServer服务 +LdDisk.sys/Ldxghcore驱动后重启(注意服务名带.sys后缀的坑); - 正规 :联系 IT 在 DLP 控制台豁免
msedgewebview2.exe,恢复完整安全沙箱。
如果你也遇到"某 Chromium 内核应用突然白屏、浏览器却正常"的情况,不妨先看一眼进程模块列表里有没有 LdxHook、LdWaterMark、Hook64 之类的注入 DLL------大概率就是 DLP/加密软件的锅。