0x9F BSOD on shutdown/hibernate after BF6 with VPN — verified fix
Symptom: BF6 with VPN connected → exit → hibernate or shutdown → Windows hangs 5+ minutes → 0x9F BSOD (DRIVER_POWER_STATE_FAILURE). Failure bucket: 0x9F_3_POWER_DOWN_ndis!ndisWaitForKernelObject.
Root cause (WinDbg verified on 7 minidumps):
EA Javelin's kernel driver eaanticheat.sys registers an NDIS filter that binds to whichever VPN miniport is active when AC loads. After game exit, user-mode AC cleans up but the kernel image stays resident in PsLoadedModuleList as anti-tamper. On hibernate/shutdown/restart, Windows tries to unbind NDIS protocols from RAS miniports — the orphaned AC binding never acknowledges — 300-second watchdog fires — bug-check.
What does NOT work (don't waste time):
- Disconnecting VPN after the game (ghost is already in kernel)
- Disconnecting VPN before hibernate (verified — 5+ min VPN-down, BSOD anyway)
- A service hooking PBT_APMSUSPEND
- Disabling Fast Startup
- Reinstalling EA AntiCheat / Windows / Steam
- Hardware swap (audio card was replaced during diagnosis — 0x109 BSODs went away but 0x9F kept happening)
What WORKS: VPN must be OFF at the moment EA AC starts. If no VPN miniport is active when eaanticheat.sys registers its NDIS filter, no ghost is created — machine stays clean even if VPN reconnects after the game.
Solution: a PowerShell watcher (scheduled task under the user) that detects EAAntiCheat.GameServiceLauncher.exe and EAAntiCheat.GameService.exe and auto-disconnects all VPNs via rasdial.exe. Universal across all EA AC games (BF6, BF2042, any future title). 2-second polling — AC kernel driver only loads on match join (minutes later), plenty of safety margin.
Verified: 6 controlled tests on Windows 11 build 26200 with EA Javelin 1.0.13590959.0, covering restart / hibernate / shutdown with VPN active during BF6 launch — zero BSODs. Compare to 7 BSODs in the 4 weeks before installing the fix.
Long-term result: ~2 months of daily BF6 play afterwards, dozens of matches, hundreds of hibernate cycles, Windows security updates that forced reboots — zero 0x9F BSODs, zero minidumps.
Full writeup with all 5 PowerShell scripts, VBS launcher, self-elevating CMD wrappers, installation steps, and testing protocol:
https://gist.github.com/SerhiyShamshetdinov/c1949235eb85b10e53f2ad36b7969410
EA — please fix this on your end. AC kernel image should fully unload on game exit, or at least not hold NDIS filter registrations past process exit. The workaround above shouldn't be necessary.