Windows kernel BSOD (0x139) in VS Code session — same signature as #30137
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
This is the same crash signature already reported in #30137 (Windows kernel BSODs during Claude Code sessions) and related to the Bun memory-corruption root cause documented in #21875.
I hit an identical Bugcheck 0x139 (KERNEL_SECURITY_CHECK_FAILURE, guard_icall_handler bucket) while running Claude Code in the VS Code integrated terminal. WinDbg analysis of the minidump shows:
- FAILURE_BUCKET_ID: 0x139_a_GUARD_ICALL_CHECK_FAILURE_nt!guard_icall_handler
- PROCESS_NAME: where.exe
- Crash occurred inside an NTFS directory-enumeration syscall (NtQueryDirectoryFileEx -> Ntfs!NtfsQueryDirectory -> Ntfs!NtfsContinueIndexEnumeration), matching the Ntfs.sys involvement in Crash 5 of #30137.
- System uptime at crash: 15 minutes — this happened early in the session, not only after prolonged use.
The faulting process being where.exe (the Windows binary used to resolve executables on PATH) suggests the trigger may specifically be Claude Code/Bun spawning a subprocess for tool/PATH resolution, rather than generic sustained file I/O. This could help narrow down the corrupted-pointer propagation path already identified in oven-sh/bun#27471.
Also notable: this machine runs the same CPU model as the original #30137 report (Intel i9-14900HX) — two independent reports on the identical CPU SKU hitting the same failure bucket.
Full WinDbg !analyze -v output and environment details available on request; happy to attach the .dmp file.
What Should Happen?
Claude Code should never be able to trigger a Windows kernel-level crash (BSOD). Whatever memory corruption is happening in the Bun runtime (as documented in #21875 and oven-sh/bun#27471) should be contained at the application/process level — it should never propagate far enough to corrupt kernel-visible structures or trip a Control Flow Guard indirect-call check inside the NTFS driver.
Given that the faulting process here is where.exe, it would help to specifically audit how Claude Code spawns subprocesses for PATH/tool resolution on Windows (e.g. lookups via where), since that appears to be a common thread across multiple BSOD reports, not just generic "heavy file I/O."
Error Messages/Logs
Loading Dump File [C:\Windows\Minidump\072426-20718-01.dmp]
Windows 10 Kernel Version 26100 MP (32 procs) Free x64
Debug session time: Fri Jul 24 12:09:09.344 2026 (UTC - 3:00)
System Uptime: 0 days 0:15:18.449
KERNEL_SECURITY_CHECK_FAILURE (139)
A kernel component has corrupted a critical data structure. The corruption
could potentially allow a malicious user to gain control of this machine.
Arguments:
Arg1: 000000000000000a, Indirect call guard check detected invalid control transfer.
Arg2: 0000000000000000
Arg3: 0000000000000000
Arg4: ffff8b01752ae7f0
BUGCHECK_CODE: 139
BUGCHECK_P1: a
BUGCHECK_P2: 0
BUGCHECK_P3: 0
BUGCHECK_P4: ffff8b01752ae7f0
FAILURE_BUCKET_ID: 0x139_a_GUARD_ICALL_CHECK_FAILURE_nt!guard_icall_handler
PROCESS_NAME: where.exe
FAILURE_ID_HASH: {88bd549f-a028-0599-8f3b-3c24fdf0cd3f}
STACK_TEXT:
nt!KeBugCheckEx
nt!guard_icall_handler+0x1e
nt!RtlpExecuteHandlerForException+0xf
nt!RtlDispatchException+0x2d2
nt!KiDispatchException+0x35f
nt!KiExceptionDispatch+0x145
nt!KiGeneralProtectionFault+0x365
nt!KscpCfgDispatchUserCallTargetEsSmep+0x11
Ntfs!FindNextIndexEntry2+0x675
Ntfs!NtfsContinueIndexEnumeration+0x10e
Ntfs!NtfsQueryDirectory+0xd32
Ntfs!NtfsCommonDirectoryControl+0x2ce
Ntfs!NtfsFsdDirectoryControl+0xcb
nt!IopfCallDriver+0x5b
FLTMGR!FltpLegacyProcessingAfterPreCallbacksCompleted+0x3fe
FLTMGR!FltpDispatch+0x244
nt!IopfCallDriver+0x5b
nt!IopSynchronousServiceTail+0x1c5
nt!NtQueryDirectoryFileEx+0xd8
nt!KiSystemServiceCopyEnd+0x25
IMAGE_NAME: ntkrnlmp.exe
IMAGE_VERSION: 10.0.26100.8894
OSNAME: Windows 10
OSPLATFORM_TYPE: x64
Steps to Reproduce
- Windows 11 x64, Intel i9-14900HX, 64GB RAM
- Use Claude Code no terminal integrado do VS Code (última versão disponível)
- Trabalhar normalmente em uma sessão do Claude Code (edição de arquivos, execução de comandos)
- Sistema trava e reinicia sozinho com BSOD — sem diálogo de erro de aplicação, direto para kernel panic e reboot forçado
Não é determinístico. Neste caso específico, o crash ocorreu apenas 15 minutos após o início da sessão (uptime do sistema no momento do dump: 0 dias, 0:15:18), então não parece exigir uso prolongado para se manifestar.
Minidump gerado em: C:\Windows\Minidump\072426-20718-01.dmp
Bugcheck: 0x139 (KERNEL_SECURITY_CHECK_FAILURE), bucket nt!guard_icall_handler, processo com falha: where.exe
Claude Model
Sonnet (default)
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
1.24012.0
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
VS Code integrated terminal
Additional Information
Related issues (mesmo padrão de falha, contexto adicional):
- #30137 — Windows kernel BSODs during Claude Code sessions (bugchecks 0x139, 0x1E, 0x50) — este relato reproduz exatamente o mesmo bucket de falha (0x139, guard_icall_handler)
- #21875 — Repeated Bun v1.3.5 segfaults, root cause identificada (N-API race condition / GC use-after-free) — provável origem da corrupção de memória que escala até o kernel
- oven-sh/bun#27471 — N-API vtable corruption causando lockups completos no Windows
Coincidência de hardware: esta máquina usa a mesma CPU do relato original em #30137 (Intel i9-14900HX) — duas ocorrências independentes no mesmo modelo de chip, ambas no mesmo bucket de falha. Pode não ser relevante (já descartaram instabilidade de microcode Intel 13ª/14ª geração no relato original), mas vale registrar.
Detalhe potencialmente novo: o processo que falhou foi where.exe (usado para localizar executáveis no PATH), sugerindo que o gatilho pode estar especificamente ligado ao spawn de subprocessos para resolução de ferramentas/PATH pelo Claude Code/Bun, e não apenas a I/O de arquivo pesado e genérico.
Tenho o arquivo .dmp completo disponível e posso anexar se for útil para triagem.
Showing cached comments. Read the full discussion on GitHub ↗
6 Comments
Additional occurrence report: 0x139 GUARD_ICALL_CHECK_FAILURE during Claude Code / Claude Desktop (Cowork) sessions
Reporting on behalf of a Claude Desktop (Cowork) user on Windows 11, adding confirmation data to the crash signature already tracked in #30137, #32870, and #80912.
System
Laptop: Acer Predator PHN16-72
CPU: Intel Core i9-14900HX (Raptor Lake-HX Refresh)
RAM: 32 GB DDR5
OS: Windows 11 Home Single Language 64-bit, build 26100.8875 → later 26100.8894 (KB5121767)
BIOS: Acer V1.17 → updated to V1.18 mid-investigation (no effect on crash recurrence)
Claude Desktop version: 1.24012.9 (03c61d) — latest available at time of report
Antivirus: Kaspersky (fully removed via kavremover during troubleshooting) → Windows Defender only — no effect on crash recurrence
Compact OS: Confirmed OFF (
compact /compactos:query→ "system is not in the Compact state")Usage pattern that triggers the crash
Crashes consistently occur during Claude Desktop / Cowork sessions with multiple agents running in parallel, doing codebase search/indexing across several local project repositories. Crashes have not been reproduced during gaming, video encoding, or other sustained CPU-heavy workloads unrelated to Claude.
Three independent crash dumps analyzed (WinDbg
!analyze -v)All three share the identical
FAILURE_ID_HASH: {88bd549f-a028-0599-8f3b-3c24fdf0cd3f}andFAILURE_BUCKET_ID: 0x139_a_GUARD_ICALL_CHECK_FAILURE_nt!guard_icall_handler.Dump file Timestamp PROCESS_NAME BIOS at time
072626-19421-01.dmp2026-07-26 23:40:06where.exe1.17.0.0072726-22468-01.dmp2026-07-27 19:13:11where.exe1.18.0.0072726-21015-01.dmp2026-07-27 22:43:52claude.exe1.18.0.0Common stack trace (all three, functionally identical):
Bugcheck arguments (identical across all three):
Notes
This matches the
nt!guard_icall_handlerbucket variant (crash lands insideNtfs.sysitself, not insideWof!WofPreDirectoryControlCallbackas in #32870) — consistent with the theory in #80912/#30137 that this is not Compact-OS/WOF-specific, but a more general corruption of an indirect call target that happens to surface inside NTFS directory enumeration (NtQueryDirectoryFileEx).PROCESS_NAMEalternates betweenclaude.exeandwhere.exeacross occurrences.where.exeis a native Windows utility for PATH resolution — its presence supports the hypothesis in #80912 that Claude Code (via Bun) spawning subprocesses for tool/PATH resolution is part of the trigger path, not just sustained direct file I/O byclaude.exeitself.BIOS microcode update (Acer V1.17 → V1.18, includes newer Intel MCU) had zero effect on crash recurrence or signature — rules out CPU firmware/voltage instability as a contributing factor in this case.
Full antivirus removal (Kaspersky → Windows Defender only) had zero effect — rules out AV minifilter interaction as a contributing factor in this case.
Official Intel Processor Diagnostic Tool (v4.1.9.41) ran full stress suite (Cache, IMC, Prime/FP/FMA3/AVX2, DGEMM, GPU stress) twice with all modules PASS — no CPU/memory functional fault detected under controlled short-duration stress (acknowledged as inconclusive given the intermittent nature of the bug).
Suggested mitigation while a fix is pending
Per the discussion in #32870, throttling/batching
NtQueryDirectoryFileExcalls on Windows — or avoiding many concurrent parallelripgrep-driven directory walks from multiple simultaneous agents — appears to reduce trigger frequency, consistent with the concurrency-defect theory discussed in the linked Microsoft Q&A thread.Happy to share full
!analyze -voutput or raw.dmpfiles if useful for reproduction.<html>
<body>
<!--StartFragment--><html><head></head><body><p>Independent reproduction on <strong>24H2 / build 26100</strong> (existing reports here and in #32870 are 25H2 / 26200). Two crashes, 17 minutes apart, same workload both times. My stack contains <strong>both</strong> the <code>Wof!WofPreDirectoryControlCallback+0x695</code> frame from #32870 <strong>and</strong> the <code>Ntfs!FindNextIndexEntry2</code> chain from this issue, which suggests these are the same underlying defect rather than two separate ones.</p>
<h3>Environment</h3>
|
-- | --
OS | Windows 11 24H2, build 26100
Wof.sys | 10.0.26100.8875 (newer than the 10.0.26100.5074 in #32870, still faults at the same offset)
CPU | Intel(R) Core(TM) i9-14900HX (32 logical processors) — matches the hardware correlation noted in this issue
Workload | Claude Code on a Unity project (large Library/ tree)
Process | find.exe via NtQueryDirectoryFile
<h3>Bugcheck</h3>
<pre><code>FAILURE_BUCKET_ID: 0x139_a_GUARD_ICALL_CHECK_FAILURE_Wof!WofPreDirectoryControlCallback
BUCKET_ID_FUNC_OFFSET: 695
FAILURE_ID_HASH: {78ac0991-5393-0281-b23b-ce115373dc6d}
IMAGE_NAME: Wof.sys IMAGE_VERSION: 10.0.26100.8875
BUGCHECK: 0x139 P1=0xa (Indirect call guard check detected invalid control transfer)
PROCESS_NAME: find.exe
</code></pre>
<h3>Trap frame — CFG dispatch faults on a non-canonical pointer</h3>
<pre><code>nt!KscpCfgDispatchUserCallTargetEsSmep+0x11:
fffff805
b75c0791 4f8b1cd3 mov r11,qword ptr [r11+r10*8] ds:fbffdc7615ad6d78=????????????????r11=fbffdc7615ad6d78 r10=0000000000000000
</code></pre>
<p><code>r11</code> holds a non-canonical address, so the guard-bitmap lookup takes a GP fault, which dispatches to <code>nt!guard_icall_handler</code> and bugchecks. The function pointer was already corrupt before CFG got involved.</p>
<h3>Stack</h3>
<pre><code>nt!KeBugCheckEx
nt!guard_icall_handler+0x1e
nt!RtlpExecuteHandlerForException+0xf
nt!RtlDispatchException+0x2d2
nt!KiDispatchException+0x35f
nt!KiExceptionDispatch+0x145
nt!KiGeneralProtectionFault+0x365
nt!KscpCfgDispatchUserCallTargetEsSmep+0x11
Ntfs!FindNextIndexEntry2+0x675
Ntfs!NtfsContinueIndexEnumeration+0x10e
Ntfs!NtfsQueryDirectory+0xd32
Ntfs!NtfsCommonDirectoryControl+0x2ce
Ntfs!NtfsFsdDirectoryControl+0xcb
nt!IopfCallDriver+0x5b
nt!IofCallDriver+0x13
FLTMGR!FltpLegacyProcessingAfterPreCallbacksCompleted+0x3fe
FLTMGR!FltPerformSynchronousIo+0x443
Wof!WofPreDirectoryControlCallback+0x695
FLTMGR!FltpPerformPreCallbacksWorker+0x568
FLTMGR!FltpPassThroughInternal+0xc0
FLTMGR!FltpPassThrough+0x230
FLTMGR!FltpDispatch+0x228
nt!IopfCallDriver+0x5b
nt!IofCallDriver+0x13
nt!IopSynchronousServiceTail+0x1c5
nt!NtQueryDirectoryFile+0xe0
nt!KiSystemServiceExitPico+0x496
</code></pre>
<h3>Cross-dump comparison</h3>
<p>I compared both minidumps frame-by-frame by module+offset (ASLR-independent). The two stacks are <strong>identical at the same stack offsets</strong> from <code>+0x0810</code> through <code>+0x1b80</code> — 67 frames in common, same bugcheck subtype, same faulting offset, same process. Deterministic path, not a random corruption.</p>
<p>Notably, the only third-party driver anywhere near either stack (a security-suite driver appearing once in crash 1) did <strong>not</strong> appear in crash 2, and sat in the region where the two stacks diverge — i.e. it was stale stack data, not a participant. Both reproducible stacks are 100% Microsoft code: <code>ntoskrnl</code> + <code>Ntfs.sys</code> + <code>FLTMGR.SYS</code> + <code>Wof.sys</code>.</p>
<h3>Notes</h3>
<ul>
<li><code>chkdsk C: /scan</code> reports no filesystem problems (1.16M file records, 28,274 reparse points, clean).</li>
<li>Consistent with reports here and in #32870 that this is a <strong>concurrency</strong> issue: the trigger is parallel directory enumeration, and single-threaded walks of the same tree are stable.</li>
<li>Since Wof.sys 10.0.26100.8875 still faults at <code>+0x695</code>, this is not fixed in the 24H2 servicing branch as of July 2026.</li>
</ul></body></html><!--EndFragment-->
</body>
</html>
Note that I added a script to reproduce this on your PC in #32870 - through that I confirmed the cause - the specific KB to uninstall and resolve the issue.
Correction to my earlier comment: I misreported the build. This machine is
Windows 11 25H2, build 26200.8875 (UBR 8875, ntoskrnl 10.0.26100.8875) — the
same branch as the other reports here, not 24H2/26100. I had read the servicing
branch (26100) out of the dump header as the OS build. Please disregard the
"not specific to the 25H2 branch" inference in that comment; it doesn't hold.
The rest of the data stands: four crashes 07-28 to 07-30, four different
triggering processes (find.exe ×2, AvBugReport.exe, Unity.exe), 15/15 core
frames identical at identical stack offsets, RAX=0 / R10=0 / R11=0xFBFF… in
every one. KB5101650 is installed here (UBR 8875).
One oddity worth flagging: Wof.sys on this machine reports FileVersion
10.0.26100.1 despite UBR 8875, and its PE checksum (0x00050EDA, 284112 bytes)
is identical to the image loaded in every crash dump. If others can post the
checksum rather than the version string, that would be a more reliable way to
compare binaries across machines than FileVersion appears to be here.
**Additional data point — kernel dump identifying which indirect call is failing**
Confirming the same signature on a fifth i9-14900HX machine, and adding analysis from a full kernel dump (not a triage minidump) that identifies the specific call target.
System
E1822IMS.30B(April 2024) — deliberately not updated, see belowcompact /compactos:query→ "not in the Compact state")SecureKernel.HalpHvciEnabled = 1)Signature match
Identical hash to the three dumps reported above. Stack matches frame-for-frame and offset-for-offset. The only difference is the syscall entry —
nt!NtQueryDirectoryFile+0xe0rather thanNtQueryDirectoryFileEx+0xd8— because the triggering process here wasRobocopy.exe.14 bugchecks, 10 Jun – 8 Aug 2026
| Count | Code |
|---|---|
| 11 |
0x139 (0xa)GUARD_ICALL || 2 |
0x00020001HYPERVISOR_ERROR || 1 |
0x3BSYSTEM_SERVICE_EXCEPTION (0xc0000005) |Trigger processes observed:
Robocopy.exe,go.exe, and PowerShellGet-ChildItem -Recurse. Not exclusively Claude Code on this machine — anything performing recursive directory enumeration reproduces it. That supports the "general corrupted indirect-call target surfacing inside NTFS enumeration" reading rather than anything client-specific.Frequency scaled with concurrency: weekly at first, then roughly every 6 minutes during a period with several parallel agent sessions plus a large robocopy running. Consistent with the mutex/serialisation repro in the linked Microsoft Q&A thread.
New: what the corrupted pointer actually is
The failing call site disassembles to:
Pool-tagging the arguments identifies them:
| Reg | Address | Pool tag | Contents |
|---|---|---|---|
| rcx |
ffffe10b69963000|NtMo— mount.c, ntfs.sys, 0x20000 | ascending UTF-16 table0000,0001,0002,0003…→ the$UpCasetable || rdx |
ffffe10bb25491e0|NtFd— DirCtrl.c, ntfs.sys, 0x60 | valid UTF-16 filename || r8 |
ffffcc02bb545508| — | second name buffer |Ntfs!NtfsCollateNamessits immediately afterFindNextIndexEntry2in the binary. The signature(upcase_table, name_a, name_b, case_flag)identifies this as the NTFS index collation callback, dispatched indirectly because the routine depends on the index's collation rule.The key detail: every data argument was intact. The 128 KB
$UpCasetable was fully valid, the filename buffer was correct UTF-16 in a properly-tagged NTFS allocation, the flag byte sane. Only the 8-byte function pointer was zero:The fault address equals the bitmap base exactly, so
r10 == 0, sorax >> 9 == 0, so the call target was < 512 — null, not a wild or non-canonical pointer. (Worth distinguishing from the report above wherer11held a non-canonical value; both fault in the same instruction, but the target differs in character.)A single pointer-sized value reading back as zero with all adjacent structure fields valid is a different shape from general structure corruption. It narrows the question to: where is the index collation function pointer stored, and what path can leave it null?
Caveat: non-volatile registers
r13/r14/rbxread as zero in the trap frame — a GP fault saves only a partial context — so I couldn't walk back to the owning structure.Ruled out on this machine
Ntfs.sysintegrity — Authenticode valid,sfc /verifyfilereports no integrity violations. It is the shipped binary, unmodified.DISM /RestoreHealth. No effect on crashes.PDFsFilter(Raxco, bundled via McAfee PC Optimizer) was unloaded and its service deleted. Crashes continued.Wof.sys— loaded (altitude 40700, instances attached) but absent from this stack. Matches thent!guard_icall_handlerbucket variant rather than theWof!WofPreDirectoryControlCallbackone.One data point I can't interpret
WHEA-Logger Id 19on 07/08: Corrected Machine Check · Internal parity error · Processor Core · APIC ID 33. Single occurrence in 180 days. Given the report above where Intel's own Processor Diagnostic Tool passed all modules twice and a microcode/BIOS update (Acer V1.17 → V1.18) changed nothing, I don't believe this is causal — noting it only in case it correlates for others on this SKU.Happy to share the full
MEMORY.DMP(7.16 GB) or run targeted WinDbg commands against it if that would help narrow where the collation pointer is sourced.@JDLondon7 Your collation-callback identification slots together with an analysis in #32870 that answers your open question directly. @dxdum, working from a kernel dump, found where that pointer is sourced: NTFS selects the comparison routine from a 4-entry function table inside the Ntfs image (
Ntfs+0x5E7B8/0x5E7D8), indexed by a field at[Vcb+0x2B0]. On their machine that field read0x60001instead of1, a 2-byte partial overwrite of the upper half, so the lookup ran past the table into zeroed image bytes and returned the null you caught in RAX. Your "single pointer-sized value reads zero while every adjacent structure is valid" is exactly what that mechanism predicts: the pointer is not stored corrupted, it is fetched through a corrupted index.Since you have the full 7.16 GB dump, you can close that loop in one read where the rest of us with triage dumps cannot: locate the Vcb for the crashing volume and dump the qword at
+0x2B0. dxdum's fast check: anything other than a small integer 0-3 confirms it. That would make yours the second independent kernel-dump confirmation of the corrupted-index mechanism, and your partial-context caveat stops mattering, the Vcb is reachable from the volume device object rather than the trap frame.Second ask, and this one produces the datum the thread is missing: try the KB5101650 rollback with a measured before/after rather than waiting. Procedure, block-list and the reproduction script are in my comments on #32870; the short version:
then run the walk-loop script from #32870 against it. On my m18 R2 (24H2 branch) that took the machine from bugchecking in 10-21 minutes to 24 laps / 66 minutes clean, and 10 days / zero bugchecks since under unthrottled Claude Code use.
I want to be straight about why your machine is the interesting test rather than a formality: your onset is 10 June, which predates KB5101650 by 5 weeks, on the 26200 branch. So the rollback on your machine has 2 informative outcomes, not 1. Clean walks afterwards extends the rollback fix to 25H2 and implicates the July servicing across both branches; crashes continuing on the reverted binaries is the first hard evidence the armed defect predates July, which reframes the whole KB timeline several of us have been leaning on. Either result, with lap counts, is worth more than any amount of further dump reading.
Minor corroboration on your WHEA note: this machine logged exactly 1 uncorrectable WHEA event across 19 crashes in the same period, also on a 14900HX, also non-causal on the evidence (deterministic same-offset faults before and after, clean SMART, memory at spec). Your single corrected parity event in 180 days reads the same way to me: coincidental noise on a SKU that attracts hardware suspicion this bug does not deserve.