re: WHEA_UNCORRECTABLE_ERROR (0x124) Crash - Windows7 x64
Code:
3: kd> .bugcheck
Bugcheck code 00000124
Arguments 00000000`00000000 fffffa80`0779a798 00000000`00000000 00000000`00000000
Dumping the WER structure:
Code:
===============================================================================
Section 2 : x86/x64 MCA
-------------------------------------------------------------------------------
Descriptor @ fffffa800779a8a8
Section @ fffffa800779aa30
Offset : 664
Length : 264
Flags : 0x00000000
Severity : Fatal
Error : Internal timer (Proc 0 Bank 5)
Status : 0xfe00000000800400
Address : 0x0000388004de2e96
Misc. : 0x0000000000007fff
Internal CPU timer failure, specifically core 0 (main core) and cache bank 5.
Code:
5: kd> .bugcheck
Bugcheck code 00000001
Arguments 00000000`72c3169a 00000000`00000000 00000000`0000ffff fffff880`0c0cbca0
3rd argument is - 000000000000ffff, which implies that Special and Kernel APCs were disabled and never re-enabled. Given both were disabled, the thread:
Code:
5: kd> !thread
GetPointerFromAddress: unable to read from fffff80003b08000
THREAD fffffa800a076b50 Cid 1850.1b20 Teb: 000000007efdb000 Win32Thread: fffff900c25e1010 RUNNING on processor 5
Not impersonating
GetUlongFromAddress: unable to read from fffff80003a46bf0
Owning Process fffffa800a084b10 Image: dxdiag.exe
Attached Process N/A Image: N/A
fffff78000000000: Unable to get shared data
Wait Start TickCount 6329
Context Switch Count 1482 IdealProcessor: 4 LargeStack
ReadMemory error: Cannot get nt!KeMaximumIncrement value.
UserTime 00:00:00.000
KernelTime 00:00:00.000
Win32 Start Address 0x00000000004cea76
Stack Init fffff8800c0cbdb0 Current fffff8800c0c9d10
Base fffff8800c0cc000 Limit fffff8800c0c3000 Call 0
Priority 8 BasePriority 8 UnusualBoost 0 ForegroundBoost 0 IoPriority 2 PagePriority 5
Child-SP RetAddr : Args to Child : Call Site
fffff880`0c0cbad8 fffff800`038cae69 : 00000000`00000001 00000000`72c3169a 00000000`00000000 00000000`0000ffff : nt!KeBugCheckEx
fffff880`0c0cbae0 fffff800`038cada0 : 00000000`00000008 00000000`72c17b98 00000000`0029d101 00000000`001fe9c4 : nt!KiBugCheckDispatch+0x69
fffff880`0c0cbc20 00000000`72c3169a : 00000000`72c17c91 00000000`7efdd000 00000000`72c549d0 00000000`8000000d : nt!KiSystemServiceExit+0x245 (TrapFrame @ fffff880`0c0cbc20)
00000000`0027df68 00000000`72c17c91 : 00000000`7efdd000 00000000`72c549d0 00000000`8000000d 00000000`001feecc : 0x72c3169a
00000000`0027df70 00000000`7efdd000 : 00000000`72c549d0 00000000`8000000d 00000000`001feecc 00000000`400002c0 : 0x72c17c91
00000000`0027df78 00000000`72c549d0 : 00000000`8000000d 00000000`001feecc 00000000`400002c0 0000000e`00000238 : 0x7efdd000
00000000`0027df80 00000000`8000000d : 00000000`001feecc 00000000`400002c0 0000000e`00000238 00000000`0000000e : 0x72c549d0
00000000`0027df88 00000000`001feecc : 00000000`400002c0 0000000e`00000238 00000000`0000000e 00000000`004a0000 : 0x8000000d
00000000`0027df90 00000000`400002c0 : 0000000e`00000238 00000000`0000000e 00000000`004a0000 00000000`00003000 : 0x1feecc
00000000`0027df98 0000000e`00000238 : 00000000`0000000e 00000000`004a0000 00000000`00003000 00000000`00500000 : 0x400002c0
00000000`0027dfa0 00000000`0000000e : 00000000`004a0000 00000000`00003000 00000000`00500000 00000000`00000400 : 0x0000000e`00000238
00000000`0027dfa8 00000000`004a0000 : 00000000`00003000 00000000`00500000 00000000`00000400 00000000`00510000 : 0xe
00000000`0027dfb0 00000000`00003000 : 00000000`00500000 00000000`00000400 00000000`00510000 00000000`00000800 : 0x4a0000
00000000`0027dfb8 00000000`00500000 : 00000000`00000400 00000000`00510000 00000000`00000800 00000000`00000000 : 0x3000
00000000`0027dfc0 00000000`00000400 : 00000000`00510000 00000000`00000800 00000000`00000000 00000000`00000000 : 0x500000
00000000`0027dfc8 00000000`00510000 : 00000000`00000800 00000000`00000000 00000000`00000000 00000000`00000000 : 0x400
00000000`0027dfd0 00000000`00000800 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x510000
00000000`0027dfd8 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x800
entered a Guarded Region as opposed to its originally intended Critical Region, since no APCs are executed in a Guarded Region.
Normally this is caused by drivers and lock issues, so I'd like to check that. The issue is since we have an 0x124, I am concerned that the CPU is faulty and failing to switch regions for the threads, but we'll see.
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