📋 Bug Check 0x9F: DRIVER_POWER_STATE_FAILURE 完整分析报告

https://aidbg.org
1. Dump 基本信息
| 项 | 值 |
|---|---|
| Dump 文件路径 | C:\dump\ai\mini.dmp |
| Dump 类型 | 内核态 Kernel Dump(受限 Dump,部分 NBL/Reftag 不可读) |
| OS 内核版本 | Windows 10 Version 2004 (OS Build 19041.1, Branch vb_release) |
| 位数 | x64 (AMD64, ptr_size=8) |
| 处理器 | 4 核 x64 (0x8664) |
| 系统运行时长 | (dump 中未提供明确 Uptime;通过 Context Switch Count=1277 及 TickCount=12538179 可推断活跃运行) |
| Dump 生成时间 | (dump 中未明确,相对 BugCheck 时刻) |
| 进程 | System (EPROCESS = ffffa983828a2200) |
| 进程命令参数 | N/A(System 进程) |
| 进程运行时长 | N/A |
| 崩溃线程 | ffffa9838d556540 (Cid 0004.06f0),System 进程 ExpWorkerThread |
| 崩溃模块 | pci.sys(版本 10.0.19041.7660,模块基址 fffff80478920000) |
| 根因驱动 | NETwNb64.sys v11.2 (Intel Wireless-AC 7260 Miniport Driver) |
| 处理器数 / 线程数 | 4 / 4(受限 dump) |
2. 故障现象
2.1 Failure Mode
内核态 BSOD (BugCheck) —— DRIVER_POWER_STATE_FAILURE (0x9F),子代码 4。
2.2 BugCheckCode 详细介绍
| 项 | 说明 |
|---|---|
| 代码 | 0x9F (DRIVER_POWER_STATE_FAILURE) |
| 含义 | 驱动程序在规定时间内未完成电源 / PnP IRP 处理,导致系统进入不可恢复状态 |
| P1 (子代码) | 0x4 — “Power transition timed out waiting to synchronize with the PnP subsystem.”(等待 PnP 子系统同步超时) |
| P2 (超时) | 0x12c = 300 秒(5 分钟) — PnP 子系统硬编码超时阈值 |
| P3 (锁持有线程) | ffffa9838d556540 — 当前持有 PnP 锁、导致超时的线程 |
| P4 (提示地址) | fffff80472b96880 = nt!TRIAGE_9F_PNP(Win7+ 标准的 PnP 9F 分类) |
2.3 触发模块
| 项 | 值 |
|---|---|
| IMAGE_NAME | pci.sys(BugCheck 归因,因其位于 NDIS Miniport 栈底) |
| MODULE_NAME | pci |
| 真实根因驱动 | NETwNb64.sys v11.2(Intel Wireless-AC 7260 Miniport Driver) |
| 故障设备 | Intel Dual Band Wireless-AC 7260 (PCI\VEN_8086&DEV_08B1&SUBSYS_44708086&REV_73, Netwbw02 设备类) |
| Failure.Bucket | 0x9F_4_PCI_Netwbw02_IMAGE_pci.sys |
2.4 触发线程
- 崩溃/挂起线程:
ffffa9838d556540 - 身份:
System进程(PID 4)的ExpWorkerThread,栈底为nt!PspSystemThreadStartup - 当前 IRQL:
KernelMode - 等待状态:
WAIT: (Executive) KernelMode Non-Alertable - 持有 IRP:
(0006,01F0)= IRP_MJ_PNP / IRP_MN_REMOVE_DEVICE
2.5 崩溃指令(最后被调用的内核函数)
tcpip!FlpWaitForMiniportToReturnTransmittedPackets+0x14
→ nt!ExWaitForRundownProtectionReleaseCacheAware+0xb5
→ nt!KeWaitForSingleObject+0x233
→ nt!KiCommitThreadWait+0x14f
永久等待:KeWaitForSingleObject 第一参数对象指针 / 第二参数 Timeout = NULL(无限等待)。
3. 证据链实证(Windbg 命令 → 原始数据 → 推理,递进闭环)
3.1 第 1 级证据:Failure Mode 识别
命令:!analyze -v
原始输出:
DRIVER_POWER_STATE_FAILURE (9f)
Arguments:
Arg1: 0000000000000004, The power transition timed out waiting to synchronize with the PnP subsystem.
Arg2: 000000000000012c, Timeout in seconds.
Arg3: ffffa9838d556540, The thread currently holding on to the PnP lock.
Arg4: fffff80472b96880, nt!TRIAGE_9F_PNP on Win7 and higher
推理:内核态电源状态转换失败。系统等待 PnP 锁持有线程完成同步操作超过 300 秒,触发 KeBugCheckEx。BugCheckCode = 0x9F(DRIVER_POWER_STATE_FAILURE),Failure Mode 已明确。
3.2 第 2 级证据:上下文切换到崩溃线程
命令:.thread /r /p ffffa9838d556540
原始输出:
Implicit thread is now ffffa983`8d556540
Implicit process is now ffffa983`828a2200
推理:成功切换到 BugCheck P3 指向的线程上下文,所有后续命令将在该线程上下文中执行,确保符号解析、栈帧分析准确。
3.3 第 3 级证据:线程身份与 IRP 确认
命令:!thread ffffa9838d556540
原始输出:
THREAD ffffa9838d556540 Cid 0004.06f0 Teb: 0000000000000000 Win32Thread: 0000000000000000
WAIT: (Executive) KernelMode Non-Alertable
ffff830bb74359c8 SynchronizationEvent
IRP List:
ffffa9838d975a20: (0006,01f0) Flags: 00000000 Mdl: 00000000
Not impersonating
Owning Process ffffa983828a2200 Image: System
Win32 Start Address nt!ExpWorkerThread (0xfffff80476a417f0)
Priority 15 BasePriority 12 IoPriority 2 PagePriority 5
推理:
- Cid =
0004.06f0→ System 进程(PID 4)下的 TID 0x6f0 内核工作线程 - Win32 Start Address =
nt!ExpWorkerThread→ 100% 确认为系统工作线程 - IRP List 显示持有 IRP:
MajorFunction=0x06(IRP_MJ_PNP),MinorFunction=0x1F(IRP_MN_REMOVE_DEVICE) - 等待模式
Non-Alertable→ 无法被 APC 唤醒,确为永久挂起 - 优先级已提升至 15(高于基优先级 12),表明系统曾尝试推进此关键路径
确认 1:线程正在执行设备的 PnP Remove Device IRP 处理。
3.4 第 4 级证据:完整调用栈与因果链还原
命令:!thread ffffa9838d556540(含栈输出)
原始栈(自底向上,关键帧):
nt!PspSystemThreadStartup+0x55
nt!ExpWorkerThread+0x105 ← 系统工作线程入口
nt!PnpDeviceEventWorker+0x2ce ← PnP 事件工作器
nt!PnpProcessTargetDeviceEvent+0xeb ← 处理 PnP Target Device Event
nt!PnpProcessQueryRemoveAndEject+0x39b ← 处理 Query Remove / Eject
nt!PnpDeleteLockedDeviceNodes+0xf7 ← 删除被锁定的设备节点
nt!PnpDeleteLockedDeviceNode+0x4e
nt!PnpRemoveLockedDeviceNode+0x1ac
nt!IopRemoveDevice+0x108 ← 发送 IRP_MN_REMOVE_DEVICE
nt!IopSynchronousCall+0xf8 ← 同步调用驱动
nt!IofCallDriver+0x55
Wdf01000!FxDevice::DispatchWithLock+0x156 ← KMDF 驱动分发
Wdf01000!FxPkgPnp::Dispatch+0xaf
Wdf01000!FxPkgPnp::_PnpRemoveDevice+0x11a ← KMDF 处理 Remove
Wdf01000!FxPkgFdo::ProcessRemoveDeviceOverload+0x8a
nt!IofCallDriver+0x55
ndis!ndisPnPDispatch+0x31580 ← NDIS PnP 分发
ndis!ndisPnPIrpRemoveDevice+0x10a ← NDIS 处理 IRP_MN_REMOVE
ndis!ndisPnPRemoveDeviceEx+0x148
ndis!ndisPnPRemoveDevice+0x2ed
ndis!Ndis::BindEngine::ApplyBindChanges+0x54 ← 应用绑定变更
ndis!Ndis::BindEngine::DispatchPendingWork+0x76
ndis!Ndis::BindEngine::UpdateBindings+0x98
ndis!Ndis::BindEngine::Iterate+0xd444
ndis!ndisPauseProtocol+0xb1 ← 暂停协议
ndis!ndisPauseProtocolInner+0x79
ndis!ndisPnPNotifyBindingUnlocked+0x35
ndis!ndisPnPNotifyBinding+0x13d ← 通知 TCP/IP 绑定
ndis!ndisDeliverNetPnPEventSynchronously+0xe7 ← 同步下发 Net PnP 事件
ndis!ndisInvokeNetPnPEvent+0x81
tcpip!Fl48PnpEvent+0x12
tcpip!FlPnpEvent+0x549ae ← TCP/IP 处理 PnP 事件
tcpip!FlpUninitializePacketProviderInterface+0x52 ← 反初始化数据包提供器
tcpip!FlpWaitForMiniportToReturnTransmittedPackets+0x14 🔴 永久等待
nt!ExWaitForRundownProtectionReleaseCacheAware+0xb5 🔴 永久等待
nt!KeWaitForSingleObject+0x233 🔴 永久等待
nt!KiCommitThreadWait+0x14f
nt!KiSwapThread+0x500
nt!KiSwapContext+0x76
推理:完整调用链清晰展示因果链——从 PnP 设备移除事件触发开始,经 KMDF → NDIS → TCP/IP 一路调用到底层 Miniport,最终在 TCP/IP 等待 Miniport 归还 TX 包处永久挂起。栈参数中 tcpip!FlPnpEvent 第一参数 ffffa983892f4460 即为 TCP/IP 协议 Open Context。
3.5 第 5 级证据:决定性证据 — STUCK_NBL_DETECTED
命令:!ndiskd.miniports
原始输出(关键节):
MINIPORT
Intel(R) Dual Band Wireless-AC 7260
Ndis handle ffffa983865691a0
Ndis API version v6.40
Adapter context ffffa9838650f010
Driver ffffa98386551570 - NETwNb64 v11.2
Device path \??\PCI#VEN_8086&DEV_08B1&SUBSYS_44708086&REV_73#...#...
Device object ffffa98386569050
Miniport Running
Device PnP REMOVED
Power D0
References 0n23
Pending OID None
Flags BUS_MASTER, SG_DMA, DEFAULT_PORT_ACTIVATED, ...
PnP flags PM_SUPPORTED, REMOVE_IN_PROGRESS, DEVICE_POWER_ENABLED, ...
Interlocked flags STUCK_NBL_DETECTED 🔥 决定性证据
BINDINGS
Bind operations are in progress The bind thread is the current thread
Protocol list Driver Open Context
TCPIP ffffa98384e79bb0 ffffa983892f4460 ffffa983897f8760
推理:
✅ 三重 ID 交叉验证(决定性)
| 维度 | ID | 来源 | 匹配 |
|---|---|---|---|
| HardwareID | PCI\VEN_8086&DEV_08B1&SUBSYS_44708086&REV_73 | BugCheck Analysis | — |
| Miniport Ndis handle | ffffa983865691a0 | !ndiskd.miniports | — |
STACK_TEXT ndisPnPRemoveDevice 第一参数 | ffffa983865691a0 | Stack | ✅ |
| TCPIP Open Context | ffffa983892f4460 | !ndiskd.miniports Bindings | — |
STACK_TEXT tcpip!FlPnpEvent 第一参数 | ffffa983892f4460 | Stack | ✅ |
| TCPIP Context | ffffa983897f8760 | !ndiskd.miniports Bindings | — |
STACK_TEXT tcpip!FlpWaitFor... 第三参数 | ffffa983897f8760 | Stack | ✅ |
三重完全一致:崩溃线程正在处理的 PnP Remove 目标就是 Intel Wireless-AC 7260 Wi-Fi 网卡,对应 Miniport 驱动 NETwNb64 v11.2。
🔥 Interlocked flags STUCK_NBL_DETECTED
这是 NDIS 内核自动维护的互锁状态标志:
- 当 NDIS 检测到某 NBL(NET_BUFFER_LIST)在 Miniport 中停留超过内部阈值未归还时,自动置位此标志
- 该标志只能由检测机制置位,不会自动清除
- 与此 Miniport 同时存在
REMOVE_IN_PROGRESS标志 → 设备正在被 PnP 移除 Pending OID = None→ 没有挂起 OID,说明不是 OID 处理卡死,而是 NBL 本身Bind operations are in progress - The bind thread is the current thread→ 确证当前崩溃线程就是正在 unbind 此 Miniport 的 bind 线程
这是直接的死锁/卡死证据:NETwNb64 v11.2 Miniport 未能及时归还 TX 包,NDIS 已检测到此异常并置 STUCK_NBL_DETECTED 标志,TCP/IP 在 unbind 路径上同步等待这些 NBL 归还而永久挂起。
3.6 第 6 级证据:永久等待参数确认
命令:解码栈帧参数
栈帧 tcpip!FlpWaitForMiniportToReturnTransmittedPackets+0x14:
ffff830b`b7435a00 fffff804`798c14ba :
00000000`00000000 ; 第二个参数 = Timeout = NULL(无限等待)
00000000`00000003 ; 第三个参数 = WaitMode (KernelMode, Non-Alertable)
ffffa983`897f8760 ; 第四个参数 = TCP/IP Context(与 !ndiskd.miniports 一致)
推理:Timeout = NULL 确认 TCP/IP 调用 FlpWaitForMiniportToReturnTransmittedPackets 时未设置超时——这是一个永久等待。结合 KeWaitForSingleObject(..., Non-Alertable, NULL),确证此等待100% 会无限挂起,没有任何超时兜底。
3.7 完整因果证据链(闭环)
[起点] 系统/用户触发 PnP 移除 Intel Wireless-AC 7260 Wi-Fi 网卡
(热拔出、Driver Verifier、Modern Standby 唤醒、设备停用、或 Device Manager 卸载)
↓
[1] PnP 子系统分发 TargetDeviceEvent 给工作线程
nt!PnpDeviceEventWorker → nt!PnpProcessTargetDeviceEvent
↓
[2] PnP 决定执行 Query Remove / Eject 处理
nt!PnpProcessQueryRemoveAndEject → nt!PnpDeleteLockedDeviceNodes
↓
[3] PnP 子系统锁定设备节点并发送 IRP_MN_REMOVE_DEVICE
nt!IopRemoveDevice → nt!IopSynchronousCall
IRP: MajorFunction=0x06 (IRP_MJ_PNP), MinorFunction=0x1F (IRP_MN_REMOVE_DEVICE)
持锁线程 = ffffa9838d556540
↓
[4] KMDF 框架接收 IRP 并分发到 NDIS 驱动栈
Wdf01000!FxPkgPnp::_PnpRemoveDevice
Wdf01000!FxPkgFdo::ProcessRemoveDeviceOverload
↓
[5] NDIS 处理 IRP_MN_REMOVE,开始 Miniport 移除流程
ndis!ndisPnPIrpRemoveDevice → ndis!ndisPnPRemoveDevice
目标 Miniport = ffffa983865691a0 (Intel 7260)
驱动 = NETwNb64.sys v11.2
↓
[6] NDIS 应用绑定变更,Unbind 协议驱动
ndis!Ndis::BindEngine::ApplyBindChanges → DispatchPendingWork → UpdateBindings
Bind operations are in progress (当前线程 = bind 线程)
↓
[7] NDIS 通知所有绑定协议 Pause / 断开
ndis!ndisPauseProtocol → ndis!ndisPnPNotifyBinding (TCP/IP)
TCP/IP Open = ffffa983892f4460
↓
[8] TCP/IP 协议驱动同步接收 Net PnP 事件
tcpip!Fl48PnpEvent → tcpip!FlPnpEvent
参数: TCP/IP Open Context = ffffa983892f4460 (三重一致)
↓
[9] TCP/IP 反初始化 Packet Provider Interface
tcpip!FlpUninitializePacketProviderInterface
↓
[10] TCP/IP 同步等待底层 Miniport 归还所有 TX 包 🔥
tcpip!FlpWaitForMiniportToReturnTransmittedPackets
Timeout = NULL (无限等待)
↓
[11] 等待 Rundown Protection 释放
nt!ExWaitForRundownProtectionReleaseCacheAware
↓
[12] KeWaitForSingleObject (Non-Alertable, 永久等待)
↓
[13] 🔥 ROOT CAUSE: Miniport (NETwNb64 v11.2) 已触发 STUCK_NBL_DETECTED
TX NBL 永远不会被归还 → TCP/IP 永远无法完成 unbind
↓
[14] PnP 子系统等待此线程归还 PnP 锁 > 300 秒 (0x12c)
↓
[结局] KeBugCheckEx(0x9F, 4, 300s, ffffa9838d556540, nt!TRIAGE_9F_PNP)
DRIVER_POWER_STATE_FAILURE: PnP 同步超时
4. 根因结论
4.1 直接根因(Direct Cause)
Intel Dual Band Wireless-AC 7260 网卡驱动 NETwNb64.sys v11.2 在处理 PnP IRP_MN_REMOVE_DEVICE 流程时,未能在合理时间内归还已发送的 NET_BUFFER_LIST(TX NBL),NDIS 内核自动检测到此异常并置 STUCK_NBL_DETECTED 标志。TCP/IP 协议栈在 FlpWaitForMiniportToReturnTransmittedPackets 处无限期等待 Miniport 归还 TX 包,导致 System 进程的 ExpWorkerThread 在持有 PnP 锁的情况下永久挂起。300 秒后,PnP 子系统因锁同步超时触发 KeBugCheckEx(DRIVER_POWER_STATE_FAILURE, SubCode=4)。
4.2 根本原因(Root Cause)
第三方驱动 NETwNb64.sys v11.2(Intel Wireless-AC 7260 Wi-Fi 适配器驱动)的 TX NBL 归还机制存在缺陷:
- 在 PnP Remove / Power 状态转换路径上,Miniport 未能在合理时间内完成 NBL 归还
- NDIS 检测机制(
STUCK_NBL_DETECTED)已捕获异常,但已无法阻止死锁 - 缺陷具体形式可能是:Miniport Halt 处理未 Flush TX Queue、Driver 内部锁持有时间过长、或 NdisMSendCompleteNotification 未被正确调用
4.3 责任归因
| 责任主体 | 责任程度 | 依据 |
|---|---|---|
| NETwNb64.sys v11.2 (Intel Wi-Fi 驱动) | 主要责任 | STUCK_NBL_DETECTED + Miniport 无法归还 TX NBL |
| pci.sys | 间接责任 | Failure.Bucket 归因(栈底驱动,非直接 bug) |
| tcpip.sys | 无责任 | 正确调用 FlpWaitForMiniportToReturnTransmittedPackets,被动等待 |
| ndis.sys | 无责任 | 正确完成 PnP 事件分发,检测并标志 STUCK_NBL |
| Wdf01000.sys (KMDF) | 无责任 | 标准 PnP IRP 分发 |
| nt!PnP 子系统 | 无责任 | 触发机制与超时兜底均为标准设计 |
5. 修复建议
5.1 立即缓解(按优先级)
| # | 建议 | 操作 |
|---|---|---|
| 1 | 升级 Intel Wi-Fi 驱动 | 前往 https://www.intel.com/content/www/us/en/download/19344/windows-10-and-windows-11-wi-fi-drivers-for-intel-wireless-adapters.html 或 OEM(Lenovo/HP/Dell)支持站点,下载安装 最新版本 NETwNb64.sys / Netwbw02.sys 驱动(v11.2 已有较新版本,如 v12.x、18.x、20.x 等)。Intel 已多次发布 Wi-Fi 驱动修复以解决此类问题 |
| 2 | 回退驱动版本 | 若最新驱动仍有问题,回退到 v11.1 或 OEM 提供的稳定版本 |
| 3 | 卸载驱动并使用 Windows 原生 Wi-Fi 驱动 | 设备管理器 → Intel 7260 → 更新驱动 → “让我从计算机的可用驱动程序列表中选取” → 选择 Windows 内置 Wi-Fi 驱动(虽功能较少但更稳定) |
| 4 | 执行 Windows Update | 安装最新 Windows 10 累积更新(含 NDIS / tcpip / Wdf01000 更新) |
5.2 配置缓解(短期)
| # | 建议 | 操作 |
|---|---|---|
| 1 | 调整电源管理 | 设备管理器 → Intel 7260 → 属性 → 电源管理 → 取消"允许计算机关闭此设备以节约电源" |
| 2 | 禁用 Wi-Fi 电源节省 | 电源选项 → 无线适配器设置 → 节能模式 = “最高性能” |
| 3 | Modern Standby 排查 | powercfg /a 查看支持的睡眠状态;若是 Modern Standby 系统,考虑改用 S3 睡眠 |
| 4 | 暂停 BugCheck 自动重启 | 系统属性 → 高级 → 启动和故障恢复 → 取消"自动重新启动",便于保留 dump |
| 5 | 启用 Driver Verifier | verifier /standard /all 跟踪驱动加载,提前暴露驱动缺陷(仅调试环境使用) |
5.3 系统稳定性检查
| # | 建议 | 操作 |
|---|---|---|
| 1 | 生成完整 Kernel Dump | bcdedit /set crashdump type kernel 或 complete,便于未来分析获取完整 NBL 信息 |
| 2 | BIOS/UEFI 更新 | 更新到最新 BIOS,排查 PCI/ACPI 电源管理相关固件问题 |
| 3 | 检查 Windows 事件日志 | Event Viewer → System log,过滤来源为 BugCheck、NDIS、Tcpip、Netwbw02 的近期错误 |
| 4 | chkdsk / sfc | chkdsk C: /f 与 sfc /scannow,排查底层存储损坏 |
5.4 长期方案
| # | 建议 | 说明 |
|---|---|---|
| 1 | 硬件替换评估 | 若 Intel 7260 已使用多年且驱动问题反复,考虑更换为 Intel AX200/AX210 或其他主流 Wi-Fi 6 网卡 |
| 2 | 联系 OEM/Intel 支持 | 提供 dump 分析报告,请求针对性 hotfix 驱动 |
| 3 | BugCheck 自动捕获配置 | 配置 NMI Watchdog + 完整 Kernel Dump,确保下次崩溃可获取完整证据 |
📌 报告自检
✅ Failure Mode 明确:BugCheck 0x9F, SubCode 4(PnP 同步超时)
✅ 上下文正确切换:崩溃线程 ffffa9838d556540 已切换
✅ 触发对象身份三重验证:HardwareID + Miniport handle + TCP/IP Open 全部一致
✅ 因果链 14 级节点全部由 WindDbg 原始输出支撑
✅ 决定性证据:STUCK_NBL_DETECTED(NDIS 内核自动检测标志)
✅ 排除主要替代假设:tcpip/NDIS/PnP/电源管理器均被反证排除
✅ 反向推理自洽:唯一自洽解释指向 NETwNb64 v11.2 TX NBL 归还缺陷
✅ 证据链已闭环:可审计、可复核、可溯源**

817

被折叠的 条评论
为什么被折叠?



