Usually it means you have issues with drivers.
False, not always.
Code:
3: kd> .bugcheck
Bugcheck code 0000003B
Arguments 00000000`c0000005 fffff960`00174283 fffff880`09d59070 00000000`00000000
Let's check the instruction regarding the bug check, via its unhandled exception.
Code:
3: kd> .cxr fffff88009d59070
rax=fffff900c0200000 rbx=0000000000000000 rcx=fffffa800dfcd6e0
rdx=fffff900c0200000 rsi=0000000000000000 rdi=fffff900c0200000
rip=fffff96000174283 rsp=fffff88009d59a40 rbp=0000000000000000
r8=0000000000000001 r9=0000000000000000 r10=0000000000000000
r11=fffff88009d59aa8 r12=000000000246bc00 r13=0000000000000000
r14=0000000000000001 r15=0000000000000000
iopl=0 nv up ei pl zr na po nc
cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00010246
win32k!HmgLockEx+0xa3:
fffff960`00174283 0fb7430c movzx eax,word ptr [rbx+0Ch] ds:002b:00000000`0000000c=????
Copying the contents of rbx+0C to eax and zero extending the value. rbx is null due to being a non volatile register, and we cannot check eax as it's a small dump.
Code:
3: kd> knL
*** Stack trace for last set context - .thread/.cxr resets it
# Child-SP RetAddr Call Site
00 fffff880`09d59a40 fffff960`0032c6b0 win32k!HmgLockEx+0xa3
01 fffff880`09d59ab0 fffff960`0032bbae win32k!SFMLOGICALSURFACE::OwnsSurfaceCleanup+0x40
02 fffff880`09d59ae0 fffff960`0032cab3 win32k!SFMLOGICALSURFACE::DeInitialize+0x4e
03 fffff880`09d59b20 fffff960`002895ff win32k!bhLSurfDestroyLogicalSurfaceObject+0x4b
04 fffff880`09d59b60 fffff960`002aa908 win32k!GreSfmCloseCompositorRef+0x10f
05 fffff880`09d59ba0 fffff800`030bb953 win32k!NtGdiHLSurfSetInformation+0x1a8
06 fffff880`09d59c20 000007fe`fde04efa nt!KiSystemServiceCopyEnd+0x13
07 00000000`03a2f488 00000000`00000000 0x000007fe`fde04efa
We were doing some kernel GUI stuff via win32k, specifically destroying logical surface objects/cleanup. We go off the rails on
win32k!HmgLockEx+0xa3.
Enable verifier:
Driver Verifier:
What is Driver Verifier?
Driver Verifier monitors Windows kernel-mode drivers, graphics drivers, and even 3rd party drivers to detect illegal function calls or actions that might corrupt the system. Driver Verifier can subject the Windows drivers to a variety of stresses and tests to find improper behavior.
Essentially, if there's a 3rd party driver believed to be causing the issues at hand, enabling Driver Verifier will help us see which specific driver is causing the problem.
Before enabling Driver Verifier, it is recommended to create a System Restore Point:
Vista - START | type rstrui - create a restore point
Windows 7 - START | type create | select "Create a Restore Point"
Windows 8/8.1 -
Restore Point - Create in Windows 8
How to enable Driver Verifier:
Start > type "verifier" without the quotes > Select the following options -
1. Select - "Create custom settings (for code developers)"
2. Select - "Select individual settings from a full list"
3. Check the following boxes -
- Special Pool
- Pool Tracking
- Force IRQL Checking
- Deadlock Detection
- Security Checks (only on Windows 7 & 8/8.1)
- DDI compliance checking (only on Windows 8/8.1)
- Miscellaneous Checks
4. Select - "Select driver names from a list"
5. Click on the "Provider" tab. This will sort all of the drivers by the provider.
6. Check EVERY box that is
NOT provided by Microsoft / Microsoft Corporation.
7. Click on Finish.
8. Restart.
Important information regarding Driver Verifier:
- Perhaps the most important which I will now clarify as this has been misunderstood often, enabling Driver Verifier by itself is
not! a solution, but instead a diagnostic utility. It will tell us if a driver is causing your issues, but again it will not outright solve your issues.
- If Driver Verifier finds a violation, the system will BSOD. To expand on this a bit more for the interested, specifically what Driver Verifier actually does is it looks for any driver making illegal function calls, causing memory leaks, etc. When and/if this happens, system corruption occurs if allowed to continue. When Driver Verifier is enabled per my instructions above, it is monitoring
all 3rd party drivers (as we have it set that way) and when it catches a driver attempting to do this, it will quickly flag that driver as being a troublemaker, and bring down the system safely before any corruption can occur.
- After enabling Driver Verifier and restarting the system, depending on the culprit, if for example the driver is on start-up, you may not be able to get back into normal Windows because Driver Verifier will detect it in violation almost straight away, and as stated above, that will cause / force a BSOD.
If this happens, do not panic, do the following:
- Boot into Safe Mode by repeatedly tapping the F8 key during boot-up.
- Once in Safe Mode - Start > Search > type "cmd" without the quotes.
- To turn off Driver Verifier, type in cmd "verifier /reset" without the quotes.
- Restart and boot into normal Windows.
If your OS became corrupt or you cannot boot into Windows after disabling verifier via Safe Mode:
- Boot into Safe Mode by repeatedly tapping the F8 key during boot-up.
- Once in Safe Mode - Start > type "system restore" without the quotes.
- Choose the restore point you created earlier.
-- Note that Safe Mode for Windows 8/8.1 is a bit different, and you may need to try different methods:
5 Ways to Boot into Safe Mode in Windows 8 & Windows 8.1
How long should I keep Driver Verifier enabled for?
I recommend keeping it enabled for at least 24 hours. If you don't BSOD by then, disable Driver Verifier. I will usually say whether or not I'd like for you to keep it enabled any longer.
My system BSOD'd with Driver Verifier enabled, where can I find the crash dumps?
- If you have the system set to generate Small Memory Dumps, they will be located in
%systemroot%\Minidump.
- If you have the system set to generate Kernel Memory Dumps,
it will be located in
%systemroot% and labeled MEMORY.DMP.
Any other questions can most likely be answered by this article:
Using Driver Verifier to identify issues with Windows drivers for advanced users