事件时间:2026 年 8 月 2 日 01:16 系统:Windows 11 24H2(内核版本 26100,8 逻辑处理器) 故障设备:Realtek PCIe GbE Family Controller(RTL8168,联想平台) 结论:系统连续运行 3 天 2 小时后,因旧版 Realtek 网卡驱动(2020 版)在 Windows 11 24H2 上触发空指针崩溃,非硬件故障。

一、事件概况

2026 年 8 月 2 日凌晨 01:16,系统发生蓝屏(BSOD)。事件日志显示:

事件 ID 提供程序 时间 含义
1001 WER-SystemErrorReporting 01:16:32 检测错误 0x000000D1,转储已保存
41 Kernel-Power 01:16:20 系统未正常关机即重启
6008 EventLog 01:16:35 上一次关闭属于意外关机

系统于 01:16:16 重启恢复,崩溃转储保存在 C:\WINDOWS\Minidump\080226-16250-01.dmp

二、蓝屏诊断

1. 事件日志定位

Get-WinEvent -FilterHashtable @{LogName="System"; ID=1001,41,6008; StartTime=(Get-Date).AddDays(-1)}

关键输出:

检测错误: 0x000000d1 (0x0000000000000008, 0x0000000000000002,
           0x0000000000000000, 0xfffff807175a4068)

2. 崩溃转储分析(WinDbg / cdb)

使用 Windows SDK 自带的 cdb 对 dump 进行 !analyze -v 分析:

cdb.exe -z "C:\WINDOWS\Minidump\080226-16250-01.dmp" -c "!analyze -v; q"

3. 分析结果

Bug CheckDRIVER_IRQL_NOT_LESS_OR_EQUAL (0xD1)

参数 含义
Arg1 0x0000000000000008 被访问的内存地址(NULL+8,明显的空指针偏移)
Arg2 0x0000000000000002 IRQL = DISPATCH_LEVEL(过高)
Arg3 0x0000000000000000 读操作
Arg4 0xfffff807175a4068 出错指令地址

故障驱动rt640x64.sys(崩溃点 rt640x64+0x26a28

WARNING: Unable to verify timestamp for rt640x64.sys
STACK_TEXT:
ffffe48c`a1a676e0 ffffa58f`2c203000 ... rt640x64+0x26a28
SYMBOL_NAME:  NETIO!StreamInvokeCalloutAndNormalizeAction+5c
MODULE_NAME:  NETIO
FAILURE_BUCKET_ID: AV_NETIO!StreamInvokeCalloutAndNormalizeAction

驱动版本10.042.0526.2020(2020 年 5 月,NDIS 6.40 架构,长达 6 年未更新)

三、核心根因

旧版 Realtek NDIS 网卡驱动在 Windows 11 24H2(内核 26100)上的网络栈兼容性缺陷

具体机理:

  1. 2020 年的驱动在设计时未考虑 Windows 11 24H2 对网络栈数据结构、安全检查及高 IRQL 内存管理的改动;
  2. 当 WFP 引擎回调通知驱动处理现代网络流时,旧驱动传入/解析了错误的内存指针
  3. DISPATCH_LEVEL(IRQL 2)这一本不该触碰分页内存的高级别上,对空指针偏移地址 0x8 进行读操作;
  4. 直接触发内核保护性蓝屏(BSOD)。

排除项:非硬件故障、非内存故障、非过热、非电源问题——是纯粹的软硬件接口不兼容

四、背景知识:WFP 与崩溃机制

什么是 WFP(Windows Filtering Platform)?

Windows 过滤平台,从 Windows Vista 引入,用于取代老旧的 TDI 和 NDIS 过滤钩子,是现代防火墙、网络监控、流量劫持、VPN、广告拦截及杀毒软件网络防护模块的核心技术。

WFP 体系结构

        ┌───────────────────────┐
        │  BFE(基础过滤引擎)   │  用户态服务
        │  (Base Filtering Engine)│  接收规则配置并下发
        └───────────┬───────────┘
                    │ 规则同步
        ┌───────────▼───────────┐
        │  KMFE(内核过滤引擎)   │  内核态 netio.sys
        │ (Kernel-Mode Filtering │  数据包分发与匹配
        │        Engine)         │
        └───────────┬───────────┘
                    │ StreamInvokeCalloutAndNormalizeAction ← 崩溃发生处
        ┌───────────▼───────────┐
        │  Callout Drivers       │  AdGuard / 火绒注册的流标注回调
        │  (第三方标注驱动)      │
        └───────────┬───────────┘
                    │
        ┌───────────▼───────────┐
        │  NDIS 网卡 Miniport     │  旧 rt640x64 / 新 rt68cx21
        │  (物理网卡驱动)        │
        └───────────────────────┘

崩溃机理还原

  • 本机安装了 AdGuard火绒安全,两者都在 WFP 的 Stream(流)层注册了标注回调,用于 DPI 深度包检测;
  • 数据包进来时,WFP 引擎走 StreamInvokeCalloutAndNormalizeAction 流分发路径,与底层网卡驱动的收包/处理代码交互;
  • 旧版 Realtek 驱动在该路径上解引用了空指针(NULL+8)于 DISPATCH_LEVEL,触发 0xD1;
  • WFP 引擎本身没有缺陷,第三方标注驱动只是"调用方",病根在旧网卡驱动的数据处理代码

五、修复方案:驱动升级

版本选择

针对 Windows 11 24H2,选择 Realtek 官方 NetAdapterCx 架构新版驱动:

项目 旧驱动(崩溃源) 新驱动(修复后)
文件名 rt640x64.sys rt68cx21x64.sys
架构 NDIS 6.40(旧式) NetAdapterCx 2.2(现代类扩展模型)
版本 10.042.0526.2020 1168.030.0508.2026
发布时间 2020-05 2026-07
节能特性 支持电源节能 选择 Not Support Power Saving 版本

为什么 NetAdapterCx 更安全

  • NDIS 数据包/缓冲区生命周期、队列管理、IRQL 处理大多由微软 netadaptercx.sys 类扩展接管;
  • 厂商自研的易错收包代码被框架重写,从根上消除空指针类缺陷;
  • 2026 年针对 26100 内核重新编译,结构体大小与 IRQL 期望和系统完全匹配。

干净安装步骤

  1. Realtek 官网下载对应版本;
  2. 设备管理器 → 网络适配器 → 卸载 Realtek 网卡(勾选"尝试删除此设备的驱动程序");
  3. 断网(防止 Windows Update 自动装回旧版);
  4. 运行安装程序 → 重启。

六、网卡节能配置加固

为避免低功耗 ↔ 全速切换的竞争窗口,将网卡高级设置中的节能相关选项全部关闭

Set-NetAdapterAdvancedProperty -Name "以太网" -RegistryKeyword "EnableGreenEthernet" -RegistryValue 0
Set-NetAdapterAdvancedProperty -Name "以太网" -RegistryKeyword "GigaLite" -RegistryValue 0

修改后的节能配置(全部关闭)

配置项 说明
节能乙太网路 (*EEE) 关闭
Advanced EEE 关闭
环保节能 (Green Ethernet) 关闭 ← 本次修改
Gigabit Lite 关闭 ← 本次修改
Power Saving Mode 关闭

代价仅是几毫瓦电量(台式机无影响),换来网卡始终全速稳定工作。

网卡支持的其他配置一览

  • 性能类:接收/传送缓冲区(512/128)、中断调整、流控制、巨型帧、LSO/RSC 减负;
  • 硬件减负:IPv4/TCP/UDP 硬件校验和、ARP/NS 减负;
  • 唤醒类:魔术封包唤醒、样式比对唤醒、关机网络唤醒;
  • 其他:连接速度双工模式、VLAN 优先级、自定义 MAC 地址。

七、重启后的验证

重启后通过多重手段确认修复持久生效:

验证项 命令 结果
设备绑定 Get-ItemProperty HKLM:\...\Enum\PCI\... Service = rt68cx21
内核加载 driverquery /v rt68cx21 = Running
旧驱动 driverquery /v rt640x64 = Stopped
版本 Get-NetAdapter 1168.30.20.508
节能配置 Get-NetAdapterAdvancedProperty 四项全部关闭
新增崩溃 Get-ChildItem C:\Windows\Minidump 无新增 dump

八、第三方 WFP 驱动排查

检测到系统中有 3 个第三方网络/WFP 驱动同时运行:

驱动 版本 厂商 作用
adgnetworkwfpdrv.sys 8.0.86.0 AdGuard WFP 流标注驱动(广告过滤)
hrwfpdrv.sys 6.0.0.0 火绒安全 WFP 流标注驱动(网络安全)
hrndis6.sys 6.0.0.1 火绒安全 NDIS 驱动
npcap.sys 1.88 Nmap 抓包过滤器

这些正是此前崩溃路径中 StreamInvokeCalloutAndNormalizeAction 的"调用方"。它们自身版本均为 2026 年较新版,配合健康的底层网卡驱动可正常共存。

九、复发风险评估

该具体崩溃:基本不会再出现

  1. 崩溃代码(rt640x64+0x26a28)已随旧驱动卸载,当前内核不再加载这段代码,空指针路径物理上不存在;
  2. 节能触发条件已全部关闭,低功耗↔全速切换的竞争窗口被消除;
  3. 更新后持续观察无新增 dump。

残余风险(低但非零)

风险 说明 对策
AdGuard / 火绒 自身 bug 仍活跃调用 WFP Stream 路径 保持更新;若崩溃会定位到其自身驱动
Npcap 旧式 NDIS 过滤器,不在崩溃路径上 保持更新
Windows Update 回绑 新 INF 已选中,旧服务已禁用 基本无可能

建议:观察 1~2 周;保持 AdGuard、火绒、Npcap 更新到最新。

十、旧驱动彻底清理

1. 删除 DriverStore 中的旧驱动包

系统中存在两个历史遗留包:

  • rt640x64.inf_amd64_9711f56631838840(2020 崩溃版,注册名 oem99.inf
  • rt640x64.inf_amd64_cbf4e23981c3c8a3(2015 版孤儿包)

删除注册包

pnputil /delete-driver oem99.inf /uninstall /force
# 输出:Driver package uninstalled. / Driver package deleted successfully.

该命令还自动把残留的 rt640x64 服务改为 Disabled

删除孤儿包(不在 pnputil 列表中,需手动):

takeown /F <path> /R /D Y
icacls <path> /grant administrators:F /T /Q
Remove-Item <path> -Recurse -Force

2. 删除服务注册项与文件副本

sc.exe delete rt640x64
Remove-Item "C:\Windows\System32\drivers\rt640x64.sys" -Force

3. 最终清理验证

检查项 结果
rt640x64.sys 文件 已删除
DriverStore 旧包 0 个
服务注册项 已删除
pnputil 驱动列表 0 个
内核模块 仅剩 rt68cx21(新驱动)
网卡状态 Up,版本 1168.30.20.508

十一、总结

本次蓝屏的完整排障链条:

蓝屏 (0xD1) 
  → 事件日志 + Minidump 转储
  → WinDbg 分析 → 定位 rt640x64.sys(2020 旧版 Realtek 驱动)
  → 崩溃路径 StreamInvokeCalloutAndNormalizeAction(WFP 流层)
  → 根因:旧 NDIS 驱动与 Win11 24H2 网络栈不兼容,空指针越界
  → 修复:升级 NetAdapterCx 新驱动 + 关闭全部节能选项
  → 验证:重启后新驱动 Running、配置持久生效、无新增崩溃
  → 加固:排查第三方 WFP 驱动(AdGuard/火绒),评估复发风险
  → 收尾:彻底清理旧驱动文件/包/服务,系统仅保留新驱动

关键经验

  1. WinDbg 是蓝屏分析的黄金标准——!analyze -v 能直接给出故障驱动与故障桶;
  2. "空指针偏移"(地址 0x8 等极低地址)+ 高 IRQL = 驱动 bug,几乎可以排除硬件因素;
  3. 旧驱动在重大系统版本升级后是高风险源,尤其是网卡/显卡等常驻内核的驱动;
  4. WFP 流标注路径是多个第三方安全软件的"共用车库",崩溃点不代表元凶是它,要沿调用链找真正出错的内核代码;
  5. 现代 NetAdapterCx 架构把易错的包处理逻辑交给框架,从设计上规避了这类空指针缺陷;
  6. pnputil /delete-driver 是清理旧驱动的标准工具,配合 sc.exe delete 可做到彻底移除。

本文档由排障过程实录整理而成,所有命令均可复现验证。