WHEA-Logger 18 A fatal hardware error has occurred - Processor Core

The processor's own error detection found a fault it could not fix. This is the uncorrected counterpart of Event 19 - byte for byte the same event, differing only in severity - and it always concerns the processor core. Two things about it are widely misreported, and both change what you conclude.

Updated 2026-07-28Error - uncorrected processor faultAlso written: WHEA-Logger Event ID 18, whea logger event 18, fatal hardware error processor core, whea 18

What you are looking at

In Event Viewer the matching entries look like this:

Log Name:      System
Source:        Microsoft-Windows-WHEA-Logger
Event ID:      18
Level:         Error

A fatal hardware error has occurred.

Reported by component: Processor Core
Error Source: Machine Check Exception
Error Type: Cache Hierarchy Error
Processor APIC ID: 0

The details view of this entry contains further information.

What the error actually means

Processors carry error detection throughout - caches are parity-protected, interconnects are checked, memory paths are validated. When one of those mechanisms finds a fault it cannot correct, it raises a machine check exception, and Windows records what the processor reported.

"Reported by component: Processor Core" is not a variable. It is a fixed string in this event. Event 18 is always the processor core - AMD Northbridge errors are Events 20 and 21, memory is 46 and 47, PCI Express is 16 and 17. So the component line tells you nothing you did not already know from the event ID; the information is in the Error Type field.

This does not always mean you had a blue screen

Event 18 frequently appears with no stop error at all. When a fault kills the machine outright, the record is held in firmware and written to the log on the next boot - which is why these events often cluster at startup times rather than at the moment of failure.

So do not assume a missing bugcheck means the event was harmless. It can equally mean the machine died too hard to write one.

Reading the parameters

The message renders only three fields. Everything else is in the Details tab, and some of it is worth reading. The Error Type map below is the practically useful one.

ParameterWhat it holds
Error TypeWhat the processor actually detected. 9 Cache Hierarchy Error and 8 Translation Lookaside Buffer Error are the values you will most often see, along with 12 Internal parity error. Others: 0 No Error, 1 Unclassified, 2 Microcode ROM Parity, 3 External, 4 FRC, 5 Internal Timer, 6 Internal Unclassified, 7 Generic Cache Hierarchy, 10 Bus/Interconnect, 11 Memory Controller, 256 Unknown.
Error SourceUsually 3, rendering as "Machine Check Exception". See the warning below - this numbering is not the same as bugcheck 0x124's parameter 1, despite describing the same categories.
Processor APIC IDWhich logical processor reported it. Worth recording across several events: the same ID every time points at one physical core, which is meaningful evidence for a warranty conversation.
MCABankWhich machine check bank reported the fault. Different banks correspond to different parts of the processor, so a consistent bank number indicates a consistent subsystem.
MciStat / MciAddr / MciMiscThe raw IA32_MCi_STATUS, _ADDR and _MISC register values for that bank. Decoding them needs Intel's or AMD's architecture manual, but recording them costs nothing and vendor support may ask.
TransactionType, Participation, RequestType, MemorIO, MemHierarchyLvl, Timeout, OperationTypeA decode of the machine check compound error code - what kind of operation was in flight when the fault hit. Present in the Details tab, absent from the message. A value of 256 renders as "N/A" throughout.

What actually triggers it

The Error Source number does not mean what bugcheck 0x124 means by the same number

The WHEA-Logger provider uses its own display map, and it diverges from the documented error-source enum that bugcheck 0x124 parameter 1 uses.

In an event, 3 means Machine Check Exception. In a 0x124 bugcheck, parameter 1 of 3 means a non-maskable interrupt. They agree on 1, 2, 4 and 7 and disagree on 0, 3, 5, 6 and 8. Do not carry a number across from one to the other.

What actually produces these:

CauseHow oftenDetail
Unstable overclock, undervolt or curve optimiserCommonThe leading cause on any tuned machine. Ryzen Precision Boost Overdrive with negative curve optimiser offsets is a particularly frequent source, as are Intel undervolts. Both are notorious for passing hours of stress testing and failing at light bursty loads.
Unstable memory profileCommonXMP and EXPO push the memory controller, which lives on the processor die. A profile beyond what your controller sustains surfaces as processor-level machine checks rather than as obvious memory errors.
A known processor defectOccasionalWorth checking before blaming your settings. Intel's 13th and 14th generation Raptor Lake parts had a widely reported instability problem that produced large volumes of Events 18 and 19, addressed through microcode updates delivered in UEFI. If you are on that platform, update firmware before concluding anything.
Thermal problemsOccasionalA cooler that has come loose, dried paste, or blocked airflow. Microsoft's guidance for the corresponding bugcheck names heat directly.
Power deliveryOccasionalA supply that cannot hold voltage under transient load, or board VRMs past their best. Produces machine checks when a core momentarily loses adequate voltage.
A genuinely failing processorOccasionalWhere you land when settings are stock, firmware is current, temperatures are fine and the power supply is good. Rare, but this is one of the few signals where it is a serious candidate.

Narrowing it down

Read the Error Type and the APIC ID, then remove every tuning variable.

Pull the structured fields, not just the message

The message shows three fields; the event carries seventeen. This gets the useful ones:

Get-WinEvent -FilterHashtable @{LogName='System'; ProviderName='Microsoft-Windows-WHEA-Logger'; Id=18} |
  ForEach-Object {
    $x = [xml]$_.ToXml(); $d = @{}
    $x.Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
    [pscustomobject]@{
      Time = $_.TimeCreated; Apic = $d.ApicId; Bank = $d.MCABank
      Type = $d.ErrorType;  Src  = $d.ErrorSource; MciStat = $d.MciStat
    }
  } | Format-Table -AutoSize
What it tells you

A consistent APIC ID and MCABank across events means one core and one subsystem - a coherent, documentable fault. Values that vary point at something system-wide: power delivery, memory, or thermals.

Return everything to stock

Load optimised defaults in UEFI, then check each item separately: XMP and EXPO off, no CPU multiplier or voltage offset, Precision Boost Overdrive and curve optimiser disabled, no undervolt. Uninstall vendor tuning software rather than just disabling it - Ryzen Master, Intel XTU and ThrottleStop can reapply settings at Windows startup.

What it tells you

If the events stop, the silicon was fine and the settings were not achievable on your particular sample. This resolves a large share of cases and costs nothing but a small amount of performance.

Check for a firmware fix before suspecting the part

Look at your board vendor's BIOS changelog for anything mentioning microcode, stability or AGESA. Note your processor generation while you are at it.

What it tells you

Microcode delivered through UEFI has genuinely resolved processor instability on specific steppings. On affected Intel generations this is the first thing to do, not the last.

Check whether Event 19 was building first

Count both severities over time:

Get-WinEvent -FilterHashtable @{LogName='System'; ProviderName='Microsoft-Windows-WHEA-Logger'} |
  Group-Object Id | Sort-Object Count -Descending |
  Format-Table Name, Count -AutoSize
What it tells you

A history of corrected Event 19s escalating into an uncorrected Event 18 is the clearest degradation evidence available at this level, and it is the strongest thing you can bring to a warranty conversation.

Fixes, cheapest first

The first two resolve most cases and cost nothing.

  1. Clear all overclocking and tuning

    Effort: 10 minutes · Risk: Low

    Load optimised defaults, then verify each setting individually since defaults do not always clear everything - and check Windows too, because vendor utilities can reapply an undervolt after boot.

    Run at stock for several days before drawing conclusions. If stability returns, reintroduce one setting at a time.

    Watch out

    An overclock stable for years can stop being stable. Silicon ages, and the voltage a core needs for a given frequency drifts upward over time - so a long track record is not a reason to leave the setting untested.

  2. Update firmware

    Effort: 45 minutes · Risk: Medium

    Check the board vendor's changelog for microcode or stability entries. This matters more than usual on recent Intel platforms, where a known instability problem was fixed this way.

    Watch out

    If the drive is protected by BitLocker or Device Encryption, a firmware update can change TPM measurements and trigger a recovery-key prompt on the next boot. Check with manage-bde -status and save your key from account.microsoft.com/devices/recoverykey first - Windows 11 enables Device Encryption by default on much consumer hardware.

    Run the update on mains power and do not interrupt it.

  3. Fix cooling

    Effort: 1-2 hours · Risk: Low

    Clear dust from heatsinks, radiators and filters. Confirm every fan spins. Log package and per-core temperatures under sustained load with HWiNFO64.

    On a machine more than a few years old, reseating the cooler with fresh thermal paste is cheap and frequently effective.

  4. Test memory at stock

    Effort: Overnight · Risk: None

    With profiles disabled, run MemTest86 from USB for at least four passes. The memory controller is part of the processor, so memory instability and processor machine checks are not cleanly separable. See the memory testing guide.

  5. Rule out the power supply

    Effort: Varies · Risk: Low

    Borrow a known-good supply with adequate headroom and run on it for a week if you can. As a cheaper diagnostic, cap CPU power limits in firmware - if the events stop at reduced power, the fault is in delivery rather than in the processor.

When it is the hardware, not Windows

Signals that the processor itself is at fault rather than its settings:

Once stock settings, firmware, cooling and power are eliminated, this is a component replacement rather than a repair. Export the event history first - the combination of a consistent APIC ID, an escalating rate, and corrected errors preceding uncorrected ones is about as strong as consumer-level hardware evidence gets, and it survives a vendor diagnostic coming back clean.

Frequently asked

I have Event 18 but no blue screen. Did something actually go wrong?

Yes. Event 18 is an uncorrected error by definition - the hardware could not fix it. The absence of a stop code usually means the record was written from firmware storage on the next boot rather than by a running Windows, which happens when the machine dies too abruptly to write anything. Check whether the event timestamp coincides with a startup; if it does, that is what happened.

How is this different from Event 19?

Severity, and nothing else structurally - the two events use identical templates and identical field maps. Event 19 is corrected: the hardware detected a fault and fixed it, and the machine carried on. Event 18 is uncorrected: it could not. Practically, 19 is something to monitor and 18 is something to act on.

Does Event 18 mean I will get bugcheck 0x9C?

No, and the pairing is a common error. Bugcheck 0x9C fires specifically in circumstances where WHEA was not available to log anything - so 0x9C and a WHEA-Logger event essentially do not co-occur. The bugcheck that corresponds to Event 18 is 0x124.

Can I see exactly what the processor recorded?

Partially. The Details tab shows the decoded fields, and Event 18 also carries the complete raw error record in a RawData field. Decoding that properly needs a debugger - !errrec works on a memory address in a crash dump, not on an event log entry, so there is no simple supported path from one to the other. For most purposes the decoded Error Type, APIC ID and MCABank are what you need.

Where do these event definitions come from?

Windows renders these events from a provider manifest compiled into whealogr.dll, and you can dump it yourself rather than trusting anyone's transcription:

wevtutil gp Microsoft-Windows-WHEA-Logger /ge /gm:true

That is where the Error Type values on this page come from. Microsoft does not publish them as documentation, which is why versions of this table circulating elsewhere tend to disagree with each other.