显卡:外接显卡掉链后核显报Code43的诊断与恢复

外接 RTX 4060(OCuLink 显卡坞)掉链全黑后,把显示器改接到核显输出,画面回来了,但显示模式被锁死在「复制」,改不动;设备管理器里 AMD Radeon 780M Graphics 报 Code 43。本文记录这个现象的观测事实、两个已被证伪的假设、已确认的因果关系,以及一条命令的恢复方法。

🔴 现象

  • 外接显卡运行中挂死 → 全屏黑(当时显示输出全在外接卡上,没有回退路径)
  • 把显示器改接到核显输出(Type-C / 自带 HDMI)→ 画面恢复,但只能复制模式,模式下拉改不动
  • 设备管理器 → 显示适配器 → AMD Radeon 780M Graphics 黄色叹号,属性提示「Windows 已停止这个设备,因为它已经报告了问题。(代码 43)」
  • 底层问题码:CM_PROB_FAILED_POST_START,即 DEVPKEY_Device_ProblemCode = 43
  • 核显 PCIe 链路本身是好的(CurrentLinkWidth = 16 / CurrentLinkSpeed = 4),驱动包 oem310.inf 签名有效 —— 不是硬件坏、也不是驱动装错

✅ 已确认的因果关系(3 次观测完全一致)

外接卡「死掉」→ 核显驱动启动失败(Code 43)。与外接卡是否在场、核显是否分到显示器、是否独占显示管线都无关。

时刻外接卡 4060核显 780M核显当时有显示器吗
13:31(外接卡掉链)死亡 → CM_PROB_PHANTOMCode 43—
14:22(开机)活着、驱动显示OK有(内屏 + 1 台)
14:33(外接卡又掉链,复现)死亡 → CM_PROB_PHANTOMCode 43有(内屏)
执行恢复命令后CM_PROB_PHANTOMOK有

关键反证在第 3 行:核显当时明明活着、有显示器、驱动正常,外接卡一死它照样崩成 Code 43。⇒ 核显的 Code 43 是外接卡故障的连带后果,是 Windows 显示子系统在外接卡失联时没能把核显干净地重启起来的结果。

❌ 已证伪的两个假设

假设证伪依据
「显示输出管线独占,一块卡接管另一块必被置 Code 43」14:22 开机时两块卡同时都在驱动各自的显示器(HKM2700→外接卡、LEN62ED→外接卡、LEN62ED→核显、JDI0031→核显),两块都 OK ⇒ 不存在独占
「核显 Code 43 与它有没有分到显示器相关」14:33 外接卡掉链时核显正持有内屏,依旧变成 Code 43 ⇒ 与是否分到显示器无关

教训:前两个假设都是只抓到单一场景的反相关就下的结论。现在的结论建立在三次一致观测 + 一次直接反证上。

🔴 顺带的连锁反应(为什么会全黑)

外接卡死掉时,桌面合成器也跟着死,这是「全黑」的直接原因:

证据内容
Dwminit(Application 日志)The Desktop Window Manager process has exited. (Process exit code: 0xe0464645, Restart count: 8, Primary display device ID: NVIDIA GeForce RTX 4060)
Application Error (Id 1000)崩溃进程 = dwm.exe,异常码 0xe0464645,Faulting module: unknown / offset 0(不是访问违规,是被系统终结)
Win32k (Id 263)A pointer device has no information about the monitor it is attached to. —— 死亡后 3 秒开始刷屏(实测:死亡 14:33:44.485,第一条 263 在 14:33:47.552);开机基线只有 Id=267,出现 263 就代表显示器关联断了。它是后果不是原因,但可作为「刚掉链」的可靠标记

dwm.exe 在 40 秒内连崩 8 次(每 5.5 秒一次,13:31:09→:47 / 14:33 同步)—— DWM 的主显示设备就是那块死掉的外接卡,它只能不断重启、每次都失败。

🔧 恢复方法(3 次实战验证有效)

前提:外接卡已经不在场上(拔掉或已掉出总线)。此时重启核显设备即可干净恢复。这个恢复方法与根因解释无关,无论机制怎么变它都有效。

方法一:命令行(一条命令)

pnputil /restart-device "PCI\VEN_1002&DEV_15BF&SUBSYS_01241002&REV_C9\4&98C338A&0&0041"

pnputil /restart-device 是微软 PnP 工具的通用设备操作(不是显卡专属),作用是让 PnP 停掉再重启该设备的驱动栈,等价于设备管理器的「禁用设备 → 启用设备」一步完成。用 pnputil /? 可以看到同族的 /disable-device、/enable-device、/remove-device、/scan-devices。

方法二:设备管理器(等效操作)

  1. 设备管理器 → 显示适配器
  2. 右键 AMD Radeon 780M Graphics → 禁用设备(确认提示)
  3. 再右键 → 启用设备

实测恢复结果(取最后一次)

指标恢复前恢复后
设备状态Error / CM_PROB_FAILED_POST_STARTOK / CM_PROB_NONE
ProblemCode430
驱动未加载(跑在基本显示驱动上)oem310.inf / 32.0.31041.3013
分辨率读不到2560×1440 @ 60Hz
显示器父节点ROOT\BasicDisplay\0000LEN62ED / HKM2700 均→ 核显
新增错误事件—无(干净重启,无 456/457)

⚠️ 注意事项

  • 必须等外接卡不在场。外接卡在场时不要動核显。
  • 不要对已经处于异常状态的故障卡用这条命令。实测教训:对已经 Code 43 的 RTX 4060 执行 /restart-device,结果是 Code 43 → Code 31 (CM_PROB_FAILED_ADD) → 硬件重扫后变成 CM_PROB_PHANTOM(直接掉出总线)。对「本身还有问题的卡」用它会把它从「在总线上」推到「掉总线」。
  • 对核显用是安全的:最坏情况是画面继续留在基本显示驱动,不会比现状更差(它本来已经是 Code 43)。
  • 执行时显示栈会重建,屏幕可能闪一下,属正常。
  • 需要管理员权限。

❌ 已排除的其他误解

猜测实测结论
「显卡 43 补丁失效了」否。驱动包 nv_dispsi.inf 与 NV_DISP.CAT 签名都是 Valid,签发者 CN=Microsoft Windows Hardware Compatibility Publisher;驱动版本未变;且外接卡的故障形态是「卡从总线消失」,不是补丁能管的「驱动拒绝认卡」。核显这边完全无关。
「是关掉 ReBAR 把核显搞坏了」未能证实。关 ReBAR 反而让外接卡首次成功启动(此前每次开机都报微端口启动失败 0xC000009A)。核显在多次普通重启后均能恢复 OK。
「AMD 驱动坏了 / 装错了」否。oem310.inf 签名 Valid(Microsoft WHCP),核显 PCIe 链路 x16 Gen4 正常。重启设备即刻恢复,说明驱动栈本身是好的。
「核显硬件坏了」否。一条 restart-device 就恢复,硬件无异常。

📌 尚未定论

  • 为什么外接卡一死,核显的驱动就启动失败(而不是干净接管)—— 机制层面仍不清楚,只知道这个因果 3 次一致。
  • 因此「把主显示器接到核显以避坑」这个方案尚未验证是否有效:14:33 那次核显本来就有显示器、也是活的,外接卡一死它照样崩。不要盲目依赖这个缓解手段。
  • 下次复现时的做法:记下开机后 Get-PnpDevice -Class Monitor 里每台显示器的父节点(归属哪块卡),再对比核显 ProblemCode。

🔗 关联(另一个独立问题)

核显 Code 43 是后果;真正需要解决的是外接卡本身的问题 ——「运行中 GPU 引擎瞬间失联」。两者的证据不在同一个地方,不要混淆:

核显 Code 43(本文)外接卡黑屏(另一个问题)
性质外接卡死亡引发的连带后果显卡引擎无前兆瞬间失联
证据位置Monitor 父节点 + 设备 ProblemCode + Dwminit / Win32k 263C:\Windows\LiveKernelReports\WATCHDOG\*.dmp(dump 头 bugcheck:0x141 VIDEO_ENGINE_TIMEOUT_DETECTED / 0x117 VIDEO_TDR_TIMEOUT_DETECTED)+ nvidia-smi 的 GPU is lost + DEVPKEY_Device_LastRemovalDate
能否软件恢复能,一条 restart-device不能,卡已掉出总线(CM_PROB_PHANTOM),硬件重扫也扫不回来,必须断电重插 / 换机验证

补充:Minidump 为空不代表没记录。显卡挂死不产生 bugcheck dump,证据在 LiveKernelReports 的 WATCHDOG 转储里(需要管理员权限才能读)。