Code:
2: kd> .bugcheck
Bugcheck code 1000009F
Arguments 00000000`00000004 00000000`0000012c ffffc809`ea160040 ffff9a0b`ea637a40
0x4 subcode 0x9F bug check, implying a driver (we don't know yet) failed to conform to Windows' power IRP rules within the allotted time period.
Code:
2: kd> .formats 000000000000012c
Evaluate expression:
Hex: 00000000`0000012c
Decimal: 300
Octal: 0000000000000000000454
Binary: 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00101100
Chars: .......,
Time: Wed Dec 31 16:05:00 1969
Float: low 4.2039e-043 high 0
Double: 1.4822e-321
300 second timeout.
When I see this bug check I always check the device itself:
Code:
2: kd> !sysinfo machineid
Machine ID Information [From Smbios 2.8, DMIVersion 0, Size=1014]
BiosMajorRelease = 5
BiosMinorRelease = 6
BiosVendor = American Megatrends Inc.
BiosVersion = 1.51116.178
BiosReleaseDate = 03/09/2015
SystemManufacturer = Microsoft Corporation
SystemProductName = Surface 3
SystemFamily = Surface
SystemVersion = B16D1SW1C4G1X1
SystemSKU = Surface_3
BaseBoardManufacturer = Microsoft Corporation
BaseBoardProduct = Surface 3
BaseBoardVersion = 00
S3 tablet, a device that involves quite a lot of power management and connection of misc. USB peripherals. It's not surprising to see this bug check on this device.
The 3rd subode contains the thread address that was involved in the code that was handling the driver's lock before the bug check:
Code:
Child-SP RetAddr : Args to Child : Call Site
ffff9a0b`eebed4d0 fffff803`c4cb2876 : 00000000`00000100 ffffc809`ea160040 ffff9a0b`00000000 ffff9a0b`ffffffff : nt!KiSwapContext+0x76
ffff9a0b`eebed610 fffff803`c4cb206b : ffffc809`ea160040 00000000`00000000 00000000`00000000 ffff9a0b`00000003 : nt!KiSwapThread+0x2c6
ffff9a0b`eebed6e0 fffff803`c4cb178f : ffff9a0b`000000ff 00000000`00000000 fffff803`c4f89500 ffffc809`ea160180 : nt!KiCommitThreadWait+0x13b
ffff9a0b`eebed780 fffff803`c4eaff89 : ffffc809`eb555dc0 fffff803`00000000 ffffc809`e6244a00 ffffc809`e6244a00 : nt!KeWaitForSingleObject+0x1ff
ffff9a0b`eebed860 fffff803`c53fcaf7 : ffffc809`eb555ce0 ffffc809`e6244ad0 ffffc809`e6244ad0 00000000`00000103 : nt!IoReleaseRemoveLockAndWaitEx+0xb2359
ffff9a0b`eebed8a0 fffff803`c5354c86 : ffffc809`e6244ad0 ffff9a0b`eebed9a9 ffffc809`e6244ad0 00000000`00000300 : nt!PopFxUnregisterDevice+0xd7
ffff9a0b`eebed8e0 fffff803`c525f999 : 00000000`ee060001 ffff9a0b`eebed928 ffff9a0b`eebed928 fffff803`c5269023 : nt!PopFxUnregisterDeviceOrWait+0xf5e4a
ffff9a0b`eebed920 fffff803`c525f8bb : 00000000`00000017 ffffc809`e6244ad0 ffffc809`e6244ad0 ffffc809`ecd31800 : nt!PoFxAbandonDevice+0x45
ffff9a0b`eebed950 fffff803`c525f501 : ffff8785`fbe235d0 00000000`00000000 00000000`00000308 ffffc809`e6244ad0 : nt!IopRemoveDevice+0x16b
ffff9a0b`eebeda10 fffff803`c5260723 : ffffc809`e6244ad0 00000000`00000000 ffff9a0b`00000000 00000000`00000000 : nt!PnpSurpriseRemoveLockedDeviceNode+0xb5
ffff9a0b`eebeda70 fffff803`c526046a : 00000000`00000000 ffff9a0b`eebedaf0 ffff8785`fb1eb1b0 ffff8785`fc93f6d0 : nt!PnpDeleteLockedDeviceNode+0x57
ffff9a0b`eebedab0 fffff803`c525e7d7 : ffffc809`ecd31800 00000003`00000002 ffffc809`e8831240 ffff8785`fb1eb1b0 : nt!PnpDeleteLockedDeviceNodes+0xba
ffff9a0b`eebedb20 fffff803`c52622d6 : ffff9a0b`eebedc70 ffff8785`fc93f600 fffff803`c51ba500 00000000`00000003 : nt!PnpProcessQueryRemoveAndEject+0x1df
ffff9a0b`eebedc10 fffff803`c51ba8a3 : ffff8785`fbe235d0 ffff8785`fc93f6d0 ffff8785`fc93f6d0 00000000`00000000 : nt!PnpProcessTargetDeviceEvent+0xee
ffff9a0b`eebedc40 fffff803`c4d11285 : 00000000`00000900 ffffc809`ea160040 fffff803`c51ba5d0 ffffc809`e62c9250 : nt!PnpDeviceEventWorker+0x2d3
ffff9a0b`eebedcc0 fffff803`c4d94e37 : ffffc809`ea160040 00000000`00000080 ffffc809`e62cb040 ffffc809`ea160040 : nt!ExpWorkerThread+0xf5
ffff9a0b`eebedd50 fffff803`c4e4b116 : fffff803`c3e1a180 ffffc809`ea160040 fffff803`c4d94df0 00000708`00000000 : nt!PspSystemThreadStartup+0x47
ffff9a0b`eebedda0 00000000`00000000 : ffff9a0b`eebee000 ffff9a0b`eebe8000 00000000`00000000 00000000`00000000 : nt!KiStartSystemThread+0x16
This call stack tells me that a peripheral (or something connected to the tablet itself) is being unplugged purposefully by an end-user, or automatically by Windows (a bug we will find) without safely "ejecting" it first - i.e. right clicking a USB driver in task manager and clicking "Eject".
Code:
nt!PnpSurpriseRemoveLockedDeviceNode+0xb5
Basically Windows is going:
Oh, that thing that was there before is now.... not there, let's clean up its mess by properly removing the device, un-registering it, and remove its lock(s).
Code:
ffff9a0b`eebed6e0 fffff803`c4cb178f : ffff9a0b`000000ff 00000000`00000000 fffff803`c4f89500 ffffc809`ea160180 : nt!KiCommitThreadWait+0x13b
ffff9a0b`eebed780 fffff803`c4eaff89 : ffffc809`eb555dc0 fffff803`00000000 ffffc809`e6244a00 ffffc809`e6244a00 : nt!KeWaitForSingleObject+0x1ff
ffff9a0b`eebed860 fffff803`c53fcaf7 : ffffc809`eb555ce0 ffffc809`e6244ad0 ffffc809`e6244ad0 00000000`00000103 : nt!IoReleaseRemoveLockAndWaitEx+0xb2359
This is where we go off the rails, for some reason. We attempted to release and remove the lock that was previously held by the device's driver, and we put the thread into a wait state until it could be done. The problem is, it was never completed (at least in time), therefore the 0x9F bug check was called.
Debugging this without:
1. Driver Verifier
or
2. A full kernel dump
is not really possible given we cannot run !locks to check what locks are still being improperly held, and we cannot further disassemble the bug check's code call stack to check anything else.
So from here you have two choices:
Enable Driver Verifier and wait for it to bug check and then upload that, or see if you have a MEMORY.DMP in your C:\Windows folder and upload that somewhere and then paste the link here.