HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links Subscribe free
← Back to Blog
Windows 11 Windows 11Crash DumpWindows Error ReportingBSODBug CheckTroubleshootingRegistryEvent ViewerIntunePowerShell

The machine bluescreened and there is no dump file: Windows Error Reporting, dump types, and the settings that quietly threw your evidence away

IA
Imran Awan
21 August 2026

A laptop blue screens in the middle of a client call. The user reboots, gets back to work, and raises a ticket. You remote on twenty minutes later, open C:\Windows\MEMORY.DMP, and the file is not there. The Minidump folder is empty too. The one artefact that would have named the guilty driver in about ninety seconds never survived, and you are left guessing from a stop code the user half-remembers.

This is not a rare failure. On a default Windows 11 device, a memory dump has to clear five independent hurdles before you get to read it. Any one of them quietly loses the evidence, and Windows does not go out of its way to tell you which one. This post walks the whole chain, from the bug check to the file on disk, and shows you how to configure a fleet so the next crash is diagnosable.

The short version

A crash dump only exists if the dump type is set, the page file (or a dedicated dump file) is big enough to back that type, the destination is writable, and Windows does not delete the file on the next boot because the disk is nearly full. Microsoft documents five dump types and a page-file requirement for each, and the whole thing is driven by six registry values under CrashControl - a key with no Group Policy and no configuration service provider behind it, so Intune has to reach it with a script. User-mode application crashes are worse: Windows collects no application dump at all unless you create the Windows Error Reporting LocalDumps key yourself. The good news is that the System event log records every one of these failures with its own event ID, so you can tell exactly which hurdle your fleet is tripping over.

The problem: the machine crashed and the evidence is gone

Let us define the words first, because two of them get mixed up constantly.

A bug check is what Microsoft calls a kernel-mode crash. You know it as the blue screen, or a Stop error. When it happens, the kernel stops scheduling anything else and tries to write the contents of memory to disk before the machine restarts.

A memory dump is the file that write produces. It is a snapshot of memory at the instant of the crash. Loaded into a debugger, it will normally tell you which driver was on the stack when things went wrong. Without it you have a stop code and a shrug.

A Windows Error Reporting (WER) report is a different thing again. It is a small folder of metadata and log files that Windows queues up to send to Microsoft. It is not a memory dump, though it can contain one.

The failure mode this post is about looks like this. The device restarts. Somebody notices. You go looking, and one of the following is true:

Context: the dump is not written to MEMORY.DMP during the crash. The crashing kernel cannot trust the file system, so it writes raw blocks to the page file (or to a dedicated dump file) using a minimal write path. On the next boot, Windows extracts that data and turns it into MEMORY.DMP. That two-stage design is the single biggest reason dumps go missing: the page file has to be large enough at crash time, and the destination has to be writable at boot time, and they are two separate problems.

Why it happens: five hurdles between the bug check and the file

Here is the chain, in order, from the moment a driver faults to the moment you have a file to open.

  1. ntoskrnl.exe, the Windows kernel, detects an unrecoverable fault and raises a bug check.
  2. The kernel reads its crash settings, which were cached at boot from HKLM\SYSTEM\CurrentControlSet\Control\CrashControl.
  3. The crash dump write path takes over, filtered through any dump filter drivers listed in the DumpFilters value - on a BitLocker-encrypted device that includes dumpfve.sys, which encrypts the dump as it is written.
  4. Memory is written into the backing store: the page file on the boot volume, or the file named by DedicatedDumpFile.
  5. The machine restarts. Early in the next boot, Windows converts the raw data into the file named by DumpFile, and writes a minidump copy into the folder named by MinidumpDir.
  6. WerFault.exe raises a report, and the System event log gets a bug check event.
  7. A retention decision is made. If it goes against you, the dump you just created is deleted.

Every numbered step above can fail independently. Let us take the five that actually bite.

Hurdle one: the dump type

Microsoft documents five kinds of kernel dump. They differ in what memory they capture, which decides both how big the file is and what questions it can answer.

Dump typeWhat it containsWhat it cannot tell you
Small memory dump (minidump)The stop message and its parameters, the loaded driver list, the processor context of the stopped processor, the process and thread context of the stopped thread, and that thread's kernel-mode call stack.Anything not directly on the failing thread. Microsoft states plainly that errors not directly caused by the running thread may not be discovered from it.
Kernel memory dumpMemory allocated to the kernel, the hardware abstraction layer (HAL), kernel-mode drivers and other kernel-mode programs.Unallocated memory, and any memory allocated to user-mode programs. Microsoft calls this the most useful type for most purposes.
Complete memory dumpAll the contents of system memory, including data from user-mode processes that were running.Little - but it is the largest file, and on a machine hosting virtual machines it includes every guest's memory too.
Automatic memory dumpExactly the same content as a kernel memory dump. The difference is not in the file - it is in how Windows sizes the page file.Same blind spots as a kernel dump. This is the type enabled by default.
Active memory dumpLike a complete dump, but filters out pages unlikely to be relevant: free and zeroed lists, the file cache, and guest virtual machine pages. Keeps active kernel and user pages plus selected transition, standby and modified pages.The filtered-out pages. Available in Windows 10 and later.

All five are selected by one REG_DWORD value called CrashDumpEnabled, with a second value, FilterPages, distinguishing the active dump from the complete dump.

Hurdle two: the page file requirement

This is the one that silently kills dumps in the field. Microsoft is explicit: if you want a crash dump file to be created during a system crash, a page file or a dedicated dump file must exist and be large enough to back up the system crash dump setting. Otherwise, a system memory dump file isn't created.

System crash dump settingMinimum backing store requiredPractical consequence
Small memory dump1 MB (documented as at least 2 MB on the boot volume in the older guidance)Effectively always satisfied.
Kernel memory dumpDepends on kernel virtual memory usage. No fixed number is documented.You cannot compute a threshold. Size against observed peak kernel usage.
Complete memory dump1 x RAM plus 257 MBOn a 32 GB laptop that is roughly 33 GB of page file. A capped page file will lose the dump.
Automatic memory dumpDepends on kernel virtual memory usage - Windows may set the page file to less than the size of RAM.The default configuration deliberately under-sizes the page file and grows it only after a crash.

Read that last row twice. With the dump type set to Automatic and the page file set to System managed size, Microsoft documents that Windows can set the size of the paging file to less than the size of RAM, sized so that a kernel dump can be captured most of the time. If the machine crashes and the page file was not large enough, Windows grows the page file to at least the size of RAM and records the time in HKLM\SYSTEM\CurrentControlSet\Control\CrashControl\LastCrashTime. The larger page file stays for four weeks, then shrinks back.

Gotcha: that behaviour means the first crash on a quiet device is the one most likely to produce nothing. Windows learns from the crash it just failed to capture. If you get one blue screen a quarter on a given model, the Automatic setting will keep failing you, because the four-week window expires between incidents. This is exactly the case where you pin the dump type explicitly instead of leaving it on Automatic.

Hurdle three: the destination has to be writable at boot

The conversion from page-file blocks to MEMORY.DMP happens early in the next boot. If the path in DumpFile points at a volume that is not mounted yet, or a folder whose access control list (ACL) does not grant write to SYSTEM, or a volume with less free space than the finished dump needs, you get nothing. Microsoft explicitly supports redirecting the path - the Startup and Recovery dialog lets you change it from %SystemRoot%\Memory.dmp to something like E:\Memory.dmp - which is exactly how people accidentally point it at a drive that is not there at boot.

Hurdle four: retention - Windows deletes dumps

Here is the part almost nobody knows. Microsoft published the retention algorithm, and it is a decision tree evaluated after the crash is reported:

  1. Report the kernel fault to the online crash analysis service.
  2. If AlwaysKeepMemoryDump is set to 1, keep the dump.
  3. Otherwise, if the machine is a Windows Server SKU, keep the dump.
  4. Otherwise, if the machine is joined to a domain, keep the dump.
  5. Otherwise, keep the dump only if free disk space is 25 GB or more. Below that, delete it.

When the deletion happens, Windows logs it. The event text is The dump file at location: %1 was deleted because the disk volume had less than %2 GB free space - event ID 1018 in the System log. So the file is not mysteriously missing; there is a receipt.

Careful here. That algorithm was published for a world where "corporate machine" meant AD domain-joined. Microsoft does not document whether a Microsoft Entra joined device with no AD domain membership satisfies step four. On modern cloud-only fleets that is a real gap, and I am not going to invent an answer. Treat it as unknown and set AlwaysKeepMemoryDump to 1 so the decision never reaches step four or five. Also note the corollary: if you enable this and never clear old dumps, a complete dump on a 64 GB workstation will happily consume 64 GB of the system volume. Do not deploy it fleet-wide without a disk-space plan.

There is a second, entirely separate deletion path: disk cleanup. Windows registers cleanup handlers that target dump files by name. On a Windows 11 Enterprise 26200 device these three exist under HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches:

Cleanup handlerFolder it targetsDisplay string source
System error memory dump filesC:\Windowswerfault.exe resource -100
System error minidump filesC:\Windows\Minidumpwerfault.exe resource -102
Windows Error Reporting FilesC:\ProgramData\Microsoft\Windows\WER\wer.dll resource -305

Those are the checkboxes a well-meaning technician ticks in Disk Cleanup while "freeing up space" on the ticket before yours. They are observed on a live device; Microsoft does not publish a reference page listing them, so verify them on your own build rather than hard-coding the strings into tooling.

Hurdle five: user-mode crashes get nothing by default

Everything above is about kernel crashes. When an ordinary application crashes, a different mechanism applies, and Microsoft is blunt about the default: WER can be configured to collect full user-mode dumps locally, but this feature is not enabled by default. If you have never created the LocalDumps key, there is no application crash dump on that device. Full stop. The Application log will have a faulting-module line and nothing to debug.

The registry surface, in full

Kernel dump behaviour. Shared parent key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl
ValueType and dataMeaning
CrashDumpEnabledREG_DWORD 0, 1, 2, 3 or 70 = none, 1 = complete, 2 = kernel, 3 = small (64 KB), 7 = automatic. Value 1 combined with FilterPages = 1 means active memory dump.
FilterPagesREG_DWORD 1Only meaningful with CrashDumpEnabled = 1. Turns a complete dump into an active dump.
DumpFileREG_EXPAND_SZFull path of the kernel dump. Default %SystemRoot%\Memory.dmp.
MinidumpDirREG_EXPAND_SZFolder holding the accumulated minidumps. Default %SystemRoot%\Minidump.
MinidumpsCountREG_DWORDHow many minidumps are retained. Documented default 50.
OverwriteREG_DWORD 1A new kernel or complete dump replaces the previous file. Minidumps are never overwritten - each gets a date-stamped name.
AlwaysKeepMemoryDumpREG_DWORD 1Keep the dump regardless of free disk space. Step two of the retention algorithm.
AutoRebootREG_DWORD 1Restart automatically after the dump is written.
LogEventREG_DWORD 1Write the bug check to the System event log. Turn this off and you lose even the stop code.
SendAlertREG_DWORD 1Send an administrative alert on failure.
DedicatedDumpFileREG_SZ, e.g. D:\dedicateddumpfile.sysA page file that is not used for paging, dedicated to backing the dump. Lets you keep a dump without a large page file on C.
DumpFileSizeREG_DWORD, megabytesManual size for the dedicated dump file. Windows adjusts it at boot if RAM changes.
LastCrashTimeREG_DWORD (written by Windows)When the Automatic dump logic last grew the page file. Delete it to shrink the page file before the four weeks elapse.
NMICrashDumpREG_DWORD 1Legacy non-maskable interrupt crash trigger. Microsoft states this has no effect on Windows 8 and later.
DumpFiltersREG_MULTI_SZDump filter drivers in the write path. Contains dumpfve.sys on a BitLocker device.
LiveKernelReports\LiveKernelReportsPathREG_SZRedirects live kernel reports. Default %systemroot%\LiveKernelReports.
FullLiveKernelReports\FullLiveReportsMaxREG_DWORDMaximum full live dumps on disk at once. Default 1; setting 0 disables live dumps on 1803 and later.

User-mode crash dumps and error reporting. Shared parent key:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
ValueType and defaultMeaning
LocalDumps\DumpFolderREG_EXPAND_SZ, default %LOCALAPPDATA%\CrashDumpsWhere user-mode dumps land. If you move it, the crashing process must be able to write there. Service crashes land in service profile folders such as %WINDIR%\System32\Config\SystemProfile.
LocalDumps\DumpCountREG_DWORD, default 10Maximum dumps in the folder. Beyond that the oldest is replaced.
LocalDumps\DumpTypeREG_DWORD, default 10 = custom dump, 1 = mini dump, 2 = full dump.
LocalDumps\CustomDumpFlagsREG_DWORDUsed only when DumpType = 0. A bitwise combination of MINIDUMP_TYPE values.
LocalDumps\<app.exe>\...Subkey per executablePer-application override. WER reads the global settings then overrides them with the app-specific ones.
DisabledREG_DWORD, default 01 turns WER off entirely.
DisableQueueREG_DWORD1 disables local report queuing - nothing is held on disk for you to collect later.
ForceQueueREG_DWORD, default 01 sends all reports to the user's queue rather than uploading.
ConfigureArchiveREG_DWORD1 = parameters only, 2 = all data. Controls how much of an archived report is kept.
DisableArchiveREG_DWORD1 disables the report archive.
MaxQueueCountREG_DWORD, 1-500, default 50Maximum queued reports.
MaxArchiveCountREG_DWORD, 1-5000, default 1000Maximum archived reports.
DontSendAdditionalDataREG_DWORD, default 01 declines Microsoft's requests for second-level data.
LoggingDisabledREG_DWORD, default 01 disables WER logging.
Consent\DefaultConsentREG_DWORD 1-41 = always ask, 2 = parameters only, 3 = parameters and safe data, 4 = all data.

Gotcha: the same WER value names also exist under HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting, but the LocalDumps values are explicitly not supported in HKEY_CURRENT_USER. Writing them there produces no error and no dumps. Machine hive only.

System files in the flow

BinaryWhere it livesRole in the crash path
ntoskrnl.exeC:\Windows\System32\ntoskrnl.exeThe kernel. Raises the bug check and drives the dump write.
dumpfve.sysLoaded via the DumpFilters valueBitLocker dump filter. Encrypts the dump as it is written so the crash path does not leak plaintext memory.
WerFault.exeC:\Windows\System32\WerFault.exeThe user-mode fault handler. Creates the local dump for a crashed application and raises the report. Also owns the Disk Cleanup display strings for dump files.
WerFaultSecure.exeC:\Windows\System32\WerFaultSecure.exeThe protected-process variant, used when the faulting process runs at a protection level ordinary WerFault cannot touch.
wermgr.exeC:\Windows\System32\wermgr.exeThe report manager. Drains the queue and uploads reports; this is what the scheduled task runs.
wer.dllC:\Windows\System32\wer.dllCore WER implementation, including the report store handling.
faultrep.dllC:\Windows\System32\faultrep.dllThe fault reporting API surface applications call into.
werconcpl.dllC:\Windows\System32\werconcpl.dllThe control panel piece behind the problem reporting user interface.
IoLogMsg.dllC:\Windows\System32\IoLogMsg.dllMessage resource for the volmgr event source, including the "Crash dump initialization failed!" text.

Where the files land

PathWhat is there
C:\Windows\MEMORY.DMPThe kernel, complete, automatic or active dump. One file, overwritten each time when Overwrite is 1.
C:\Windows\Minidump\Date-stamped minidumps, e.g. Mini022900-01.dmp. A history, not a single file.
C:\Windows\LiveKernelReports\Live kernel dumps taken without crashing the machine - watchdog timeouts, hung drivers. Subfolders are named after the triggering component.
%LOCALAPPDATA%\CrashDumps\Default location for WER LocalDumps user-mode dumps.
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\Machine-scope reports waiting to be uploaded.
C:\ProgramData\Microsoft\Windows\WER\ReportArchive\Machine-scope reports already uploaded. The payload is deleted but Report.wer persists.
%LOCALAPPDATA%\Microsoft\Windows\WER\The same two folders at user scope.

Report.wer is the file worth knowing about. It is plain text. It carries an EventType, a set of Sig[n].Name and Sig[n].Value pairs identifying the failure, and DynamicSig entries with the OS version and a report identifier. You can read it with Get-Content and learn what failed without any debugger at all.

Service and scheduled task

ComponentNameExpected state
Service (short name)WerSvcStart type Manual. Stopped is normal - it is trigger-started.
Service (display name)Windows Error Reporting ServiceMust not be Disabled, or reports are neither queued nor uploaded.
Scheduled task\Microsoft\Windows\Windows Error Reporting\QueueReportingReady. This is what drains the report queue.

How to verify: read the configuration, then read the log

Verification splits in two. First, what will happen at the next crash. Second, what did happen at the last one.

Step one: read the crash configuration

This command reads every value under the CrashControl key and prints them. It changes nothing.

PowerShell - run elevated
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl' | Select-Object CrashDumpEnabled, FilterPages, DumpFile, MinidumpDir, Overwrite, MinidumpsCount, AlwaysKeepMemoryDump, LogEvent CrashDumpEnabled : 1 FilterPages : 1 DumpFile : %SystemRoot%\MEMORY.DMP MinidumpDir : %SystemRoot%\Minidump Overwrite : 1 MinidumpsCount : 50 LogEvent : 1 # Healthy: CrashDumpEnabled is 1, 2, 3 or 7 and LogEvent is 1. # Broken: CrashDumpEnabled is 0 - no dump will ever be written. # Note: 1 plus FilterPages 1 means ACTIVE dump, not complete. # Note: AlwaysKeepMemoryDump is absent above, so retention falls back to # the SKU / domain / 25 GB free space algorithm.

Read it like this. CrashDumpEnabled tells you the type. Cross-check FilterPages before you call a 1 a complete dump. A missing AlwaysKeepMemoryDump is not an error, but it does mean retention is out of your hands.

The same thing through Registry Editor, which is what you will actually be staring at on a user's machine:

Registry Editor
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl
AutoReboot            REG_DWORD    0x00000001 (1)
CrashDumpEnabled     REG_DWORD    0x00000001 (1)
DumpFile             REG_EXPAND_SZ    %SystemRoot%\MEMORY.DMP
DumpFilters          REG_MULTI_SZ    dumpfve.sys
FilterPages          REG_DWORD    0x00000001 (1)
LogEvent             REG_DWORD    0x00000001 (1)
MinidumpDir          REG_EXPAND_SZ    %SystemRoot%\Minidump
MinidumpsCount       REG_DWORD    0x00000032 (50)
Overwrite            REG_DWORD    0x00000001 (1)
AlwaysKeepMemoryDump    (value not present)

Step two: check the page file against the requirement

This is arithmetic, not a setting you can eyeball. The command below reads total RAM, the allocated page file size, and whether the page file is system-managed, then does the comparison for a complete or active dump.

PowerShell - page file versus dump requirement
$cs = Get-CimInstance Win32_ComputerSystem $pf = Get-CimInstance Win32_PageFileUsage $ram = [math]::Round($cs.TotalPhysicalMemory / 1MB, 0) $have = ($pf | Measure-Object -Property AllocatedBaseSize -Sum).Sum 'RAM MB : ' + $ram 'Page file MB : ' + $have 'Auto-managed : ' + $cs.AutomaticManagedPagefile 'Complete dump needs : ' + ($ram + 257) + ' MB' RAM MB : 31402 Page file MB : 31744 Auto-managed : True Complete dump needs : 31659 MB # Healthy: page file MB is greater than or equal to the requirement. # Broken: a capped page file of, say, 8192 MB on a 32 GB device. # Windows writes nothing and you get bug check event 1000 or 1006. # Kernel and Automatic dumps have NO documented byte figure - do not # invent one; compare against observed peak kernel usage instead.

Step three: what WMI will and will not tell you

The WMI class Win32_OSRecoveryConfiguration is the classic way to read crash settings, and it is genuinely useful. It maps directly onto the registry: DebugFilePath to DumpFile, MiniDumpDirectory to MinidumpDir, OverwriteExistingDebugFile to Overwrite, AutoReboot and WriteToSystemLog to LogEvent.

Do not build detection logic on DebugInfoType alone. Microsoft documents exactly four values for it: 0 none, 1 complete, 2 kernel, 3 small. There is no value for the Automatic dump and no value for the Active dump. On the Windows 11 device used for this post, the registry says CrashDumpEnabled = 1 with FilterPages = 1, which is an active memory dump - and WMI reports DebugInfoType : 1, indistinguishable from a complete dump. A compliance check that trusts WMI here will mis-classify devices. Read the registry, and read FilterPages too.

Step four: read the event log

This is where the topic gets genuinely satisfying, because Windows records every one of these failures with a distinct event ID. The provider is Microsoft-Windows-WER-SystemErrorReporting and the channel is:

Event Viewer > Windows Logs > System   (provider Microsoft-Windows-WER-SystemErrorReporting)
IDMessageWhat it means for you
1001The computer has rebooted from a bugcheck. The bugcheck was: %1. A dump was saved in: %2. Report Id: %3.The happy path. Gives you the stop code, its four parameters and the dump path without a debugger.
1000The computer has rebooted from a bugcheck. The bugcheck was: %1. A full dump was not saved.It crashed, you have the stop code, the full dump did not survive.
1006The computer has rebooted from a bugcheck. A dump was not saved.Worse - no dump at all.
1019The computer has rebooted from a bugcheck. Possibly related driver: %1.Windows names a suspect driver for you. No debugger needed.
1018The dump file at location: %1 was deleted because the disk volume had less than %2 GB free space.The dump existed and Windows deleted it. This is the receipt for the retention algorithm.
1009 / 1010Error reporting was unable to check the paging file for a crash dump.The page file could not be examined at boot.
1011Error reporting was unable to read the CrashControl settings.Configuration itself could not be read.
1012Error reporting was unable to create a crash dump file as a previous crash dump file already exists.Overwrite is 0 and the old dump is in the way.
1013Error reporting was unable to query volume information while creating a crash dump file.Destination volume problem.
1014Error reporting ran out of memory while creating a crash dump file.Boot-time resource exhaustion.
1015Error reporting was unable to create a temporary file to hold the crash dump.Destination not writable.
1016Error reporting ran out of disk space while creating a crash dump file.The destination volume filled up mid-conversion.
1017Error reporting was unable to copy a crash dump from the paging file.The raw data was there but the copy failed.
1004Unable to move dump file from the temporary location to the final location.The conversion finished and the final move failed.
1005Unable to produce a minidump file from the full dump file.The kernel dump exists but the minidump copy failed.
1003Unable to read system shutdown configuration information from the registry.Configuration read failure at shutdown.

Three more events, from different providers in the same System log, complete the picture:

Provider and IDMessageWhy it matters here
Microsoft-Windows-Kernel-Power 41The system has rebooted without cleanly shutting down first.Critical-level. Its event data carries BugcheckCode in decimal, plus four parameters. All zeros with PowerButtonTimestamp zero points at a power problem, not a software crash.
volmgr 46Crash dump initialization failed!The device booted with no configured dump file. Microsoft's stated cause is exactly that - the default dump file is the page file. This is the smoking gun for "no page file, no dump".
Application Error 1000 and Application Hang 1002 (Application log)Faulting application name / stopped interacting with Windows and was closed.The user-mode equivalents. Also Windows Error Reporting 1001 in the Application log gives the fault bucket, problem signature and the folder the attached files live in.

Gotcha that wastes an afternoon: in Event Viewer the bug check event shows Source: BugCheck. So people write Get-WinEvent -FilterHashtable @{ProviderName='BugCheck'} and get There is not an event provider on the localhost computer that matches "BugCheck". BugCheck is a legacy event source name registered under HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System\BugCheck, whose providerGuid value points at the same GUID as the modern provider Microsoft-Windows-WER-SystemErrorReporting. Event Viewer shows you the friendly legacy name; Get-WinEvent demands the real one.

PowerShell - pull every crash and dump-failure event
# Every bug check, dump failure and deletion in the last 180 days. Get-WinEvent -FilterHashtable @{ LogName = 'System' ProviderName = 'Microsoft-Windows-WER-SystemErrorReporting' StartTime = (Get-Date).AddDays(-180) } | Select-Object TimeCreated, Id, Message | Format-List # The unexpected-restart view, including the decimal bugcheck code. Get-WinEvent -FilterHashtable @{LogName='System'; Id=41} -MaxEvents 5 | ForEach-Object { $_.Properties[0].Value } # The "no page file, no dump" smoking gun. Get-WinEvent -FilterHashtable @{LogName='System'; ProviderName='volmgr'; Id=46} -MaxEvents 5 # Healthy on a stable device: "No events were found that match the # specified selection criteria." That is a real result, not an error. # Broken: ids 1000, 1006 or 1009-1018 tell you which hurdle you tripped. # Remember: id 41 reports BugcheckCode in DECIMAL. 159 means 0x0000009F.
Event Viewer
Windows Logs > System  |  Filtered to Microsoft-Windows-WER-SystemErrorReporting
Error   09:14:02   BugCheck   1001   The computer has rebooted from a bugcheck. The bugcheck was: 0x0000009f (0x0000000000000003, ...). A dump was saved in: C:\Windows\MEMORY.DMP. Report Id: REPORT-ID.
Error   09:14:05   BugCheck   1018   The dump file at location: C:\Windows\MEMORY.DMP was deleted because the disk volume had less than 25 GB free space.
Critical   09:13:58   Kernel-Power   41   The system has rebooted without cleanly shutting down first.
Error   09:12:41   volmgr   46   Crash dump initialization failed!
Illustrative composite. Real events from four providers, shown together as you would after filtering. Identifiers redacted.

Step five: reading the dump without installing a debugger

You often do not need a debugger at all, and it is worth knowing how far you can get without one.

Tip: when you do want the real thing, WinDbg is no longer a Windows Driver Kit download. Microsoft ships it through Windows Package Manager: winget install Microsoft.WinDbg, and winget upgrade Microsoft.WinDbg to update. Open the dump, run !analyze -v, and read the MODULE_NAME and IMAGE_NAME lines. For an active or automatic dump, add .ignore_missing_pages first - Microsoft documents this specifically to suppress the missing-page noise those filtered dump types produce. There is also dumpchk.exe, part of the debugging tools, purely to confirm a dump file is well formed before you waste time on it.

The fix: registry, Startup and Recovery, Group Policy and Intune

Now the configuration. I will give you the local dialog, the registry, Group Policy and Intune, and be honest about which surfaces genuinely do not exist.

Fix one: set the dump type in Startup and Recovery

The supported user-interface route, per Microsoft's own steps:

Control PanelSystem and SecuritySystemAdvanced system settingsAdvancedStartup and Recovery - Settings
  1. Open Control Panel and select System and Security, then System.
  2. Select Advanced system settings, then the Advanced tab.
  3. Under Startup and Recovery, select Settings.
  4. Under Writing Debugging Information, choose Kernel memory dump, Active memory dump, Automatic memory dump or Complete memory dump. Do not leave it on (none).
  5. Check Overwrite any existing file unless you have a specific reason to keep the first dump.
  6. Leave the Dump file path at %SystemRoot%\MEMORY.DMP unless you have a genuinely larger local volume. Never point it at removable or network storage.
  7. Select OK, then restart the computer. Microsoft is explicit that the change does not take effect until you do.

Fix two: size the backing store

Two options, and the second is the one most people forget exists.

Option A - a big enough page file. Leave the page file system-managed and accept that Windows sizes it for your chosen dump type at startup, assuming enough free disk space exists. If you set it manually, size it to the requirement from the table above plus your peak system commit charge.

Option B - a dedicated dump file. A dedicated dump file is a page file that is never used for paging; it exists purely to back the dump. Microsoft recommends it when you want a crash dump but do not want a large page file, and it can live on any volume that could host a page file. Two registry values under CrashControl: DedicatedDumpFile as a REG_SZ full path such as D:\dedicateddumpfile.sys, and DumpFileSize as a REG_DWORD in megabytes.

Fix three: stop Windows deleting the dump

One value, and it short-circuits the entire retention algorithm.

PowerShell - configure capture (this one WRITES, run deliberately)
# Pin the dump type to Kernel instead of leaving it on Automatic. $cc = 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl' New-ItemProperty -Path $cc -Name 'CrashDumpEnabled' -PropertyType DWord -Value 2 -Force # Keep the dump even when the volume is nearly full. New-ItemProperty -Path $cc -Name 'AlwaysKeepMemoryDump' -PropertyType DWord -Value 1 -Force # Make sure the bug check still reaches the System log. New-ItemProperty -Path $cc -Name 'LogEvent' -PropertyType DWord -Value 1 -Force # Turn on user-mode application dumps - NOT enabled by default. $ld = 'HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps' New-Item -Path $ld -Force | Out-Null New-ItemProperty -Path $ld -Name 'DumpFolder' -PropertyType ExpandString -Value 'C:\ProgramData\CrashDumps' -Force New-ItemProperty -Path $ld -Name 'DumpType' -PropertyType DWord -Value 2 -Force New-ItemProperty -Path $ld -Name 'DumpCount' -PropertyType DWord -Value 5 -Force # Healthy: each command echoes the value it created. Then REBOOT - # CrashControl is cached at boot and the change is not live. # Broken: "Requested registry access is not allowed" means you are not # elevated. Nothing was written; do not assume it worked.

Read the output line by line. Each New-ItemProperty prints the value it created. Then reboot - the kernel caches these settings at boot, so an unrebooted change is a change that has not happened yet.

Two real risks before you push this to a fleet. First, disk space. DumpType = 2 for LocalDumps means a full user-mode dump, and a browser process can be hundreds of megabytes; with DumpCount at the default 10, one chatty crashing app can consume gigabytes. Second, sensitive data. A full user-mode dump and a complete kernel dump both contain the memory of running processes, which can include credentials and customer data. Treat dump folders as sensitive, restrict the ACLs, and have a retention plan before you turn full dumps on everywhere.

Fix four: Group Policy

Here is where you need the honest answer. Group Policy covers Windows Error Reporting. It does not cover the crash dump type.

Computer ConfigurationAdministrative TemplatesWindows ComponentsWindows Error Reporting
  1. Open the Group Policy Management Editor on a policy linked to your device organisational unit, or gpedit.msc for a local test.
  2. Expand Computer Configuration, then Administrative Templates, then Windows Components, then Windows Error Reporting.
  3. Set Disable Windows Error Reporting to Disabled if you want reporting to keep working. It writes Disabled under SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting.
  4. Set Prevent display of the user interface for critical errors according to taste. It writes DontShowUI to the same key.
  5. Set Do not send additional data to Disabled if you want second-level data to flow. It writes DontSendAdditionalData.
  6. Under the Consent sub-folder, use Customize consent settings to set per-event-type consent from 0 (send nothing) to 4 (send all data). It writes under the Consent sub-key.
  7. For a corporate WER server, populate CorporateWERServer, CorporateWERDirectory, CorporateWERPortNumber and the SSL and authentication values.
  8. Run gpupdate /target:computer /force and confirm the values landed under the Policies key.

There is a second, older location that takes precedence in some combinations: Computer Configuration > Administrative Templates > System > Internet Communication Management > Internet Communication settings > Turn off Windows Error Reporting. Microsoft documents that if the newer setting is disabled or not configured, this one wins. Check both before concluding a policy is not applying.

Gotcha - the gap in the middle. The ErrorReporting policy area documents five settings, and none of them touch CrashControl or LocalDumps. So there is no Group Policy setting for the crash dump type, none for AlwaysKeepMemoryDump, and none for user-mode local dumps. Group Policy Preferences registry items or a startup script are the domain-joined answers; a configuration profile is not.

Fix five: Intune

Same split. The Windows Error Reporting administrative template settings are in the Settings Catalog because they are administrative-template-backed policies in the ErrorReporting area of the Policy configuration service provider (CSP). The crash dump settings are not, because no CSP exposes them.

intune.microsoft.comDevicesConfigurationCreateSettings catalog
  1. Sign in to the Microsoft Intune admin center at intune.microsoft.com.
  2. Go to Devices, then Configuration, then Create, then New policy.
  3. Platform Windows 10 and later, profile type Settings catalog, then Create.
  4. Name it something like WIN-Error-Reporting-Baseline and select Next.
  5. Select Add settings and search the picker for Windows Error Reporting. The category is Administrative Templates > Windows Components > Windows Error Reporting.
  6. Select Disable Windows Error Reporting, Do not send additional data, Display Error Notification and Prevent display of the user interface for critical errors as your baseline requires, then close the picker and set each value.
  7. Assign to a device group, review and create.
  8. For the dump settings, go to Devices then Scripts and remediations and deploy the registry configuration as a platform script or a remediation script, running in the system context.

Context - why there is no CSP for this. Crash dump configuration predates modern device management by roughly two decades and lives in a kernel-read registry key rather than a managed policy tree. That is why every mature fleet ends up shipping CrashControl as a script rather than a profile. It is not an oversight you can configure around: read the registry for detection, write the registry for remediation, and pair the two so drift is visible.

Defender and security policy: what actually applies

Being straight about this: no Microsoft Defender Antivirus setting, attack surface reduction rule, exploit protection option, Windows Defender Application Control policy or firewall rule governs whether a kernel crash dump is written. The crash dump path runs in the kernel before any of that is in play. If you were expecting an Endpoint Security profile here, there is not one, and saying so is more useful than inventing one.

Two adjacent things are worth knowing, though. Reading process memory to produce a dump is exactly the behaviour that credential-theft protections are designed to block, so if you configure LocalDumps for a protected process such as the Local Security Authority Subsystem Service, expect it to be blocked or to require WerFaultSecure.exe. And a full dump is a memory disclosure risk in its own right, which is the security argument for restricting dump folder ACLs rather than the argument for a Defender setting.

Proof it worked: a real readiness report

The companion script for this post is Get-CrashDumpReadiness.ps1. It is read-only. It answers one question: if this device bug checks tonight, will there be a usable dump in the morning? It reads the CrashControl values, resolves the dump type including the active-dump case WMI cannot see, computes the page-file requirement, inspects the destination ACLs, lists every dump already on disk with size and date, counts the WER report queues, and pulls the crash and dump-failure events. It never writes a setting and never deletes a dump.

The output below is a genuine run on the Windows 11 Enterprise build 26200 device used for this post, with the machine name and paths left intact but user-identifying strings replaced.

Get-CrashDumpReadiness.ps1 - real run, identifiers replaced
PS C:\> .\Get-CrashDumpReadiness.ps1 -Days 180 CRASH DUMP READINESS - will the NEXT bug check leave usable evidence? Read-only. This script changes no setting and deletes no dump. Computer CONTOSO-1234 OS Microsoft Windows 11 Enterprise build 26200 PowerShell 5.1.26100.9168 Total physical RAM 31402 MB (30.67 GB) AD domain joined True Elevated yes 1. KERNEL DUMP CONFIGURATION (CrashControl) Configured dump type Active memory dump CrashDumpEnabled 1 FilterPages 1 DumpFile C:\WINDOWS\MEMORY.DMP MinidumpDir C:\WINDOWS\Minidump Overwrite 1 (1 = each new dump replaces the last) MinidumpsCount 50 minidumps kept LogEvent 1 (1 = write the bug check to the System log) AlwaysKeepMemoryDump not set to 1 - retention falls back to the algorithm DedicatedDumpFile absent - the page file is the backing store for the dump. LastCrashTime absent - no recent crash recorded by the Automatic dump logic. 2. BACKING STORE - is the page file big enough for that dump type? AutomaticManagedPagefile True Page file C:\pagefile.sys 31744 MB allocated, peak use 125 MB Requirement in MB 31659 Available backing store 31744 MB Backing store verdict sufficient 3. DESTINATIONS - can Windows actually write the dump there? Kernel dump file C:\WINDOWS\MEMORY.DMP directory exists yes ACL grants write to NT AUTHORITY\SYSTEM, BUILTIN\Administrators free space on volume 413.99 GB Minidump folder C:\WINDOWS\Minidump directory exists yes Documented 25 GB cleanup rule above 25 GB 4. WINDOWS ERROR REPORTING - user-mode crashes and the report queue WerSvc status Stopped, start type Manual Scheduled task QueueReporting Ready LocalDumps key present - user-mode crash dumps are being collected LocalDumps DumpFolder C:\ProgramData\CrashDumps LocalDumps DumpType 2 = full dump LocalDumps DumpCount 5 per-application overrides 9 subkey(s) C:\ProgramData\Microsoft\Windows\WER\ReportQueue 0 report folder(s) C:\ProgramData\Microsoft\Windows\WER\ReportArchive 500 report folder(s) 5. DUMPS ALREADY ON DISK (nothing here is modified or deleted) No kernel dump at C:\WINDOWS\MEMORY.DMP C:\WINDOWS\Minidump - empty live kernel report WATCHDOG-DATE.dmp 1.33 GB written 2026-06-12 live kernel report UcmUcsiCx.sys-DATE.dmp 1.29 MB user-mode dump MicrosoftEdgeUpdate.exe.PID.dmp 64.47 MB Dump artefacts listed 20 6. EVENT LOG EVIDENCE - last 180 days Bug check / dump failure (Microsoft-Windows-WER-SystemErrorReporting) none in this window Unexpected restart (Microsoft-Windows-Kernel-Power) none in this window Crash dump init (volmgr) none in this window Application crash (Application Error) 36 event(s) Application hang (Application Hang) 11 event(s) VERDICT READY - the next bug check should leave a usable dump. 1 caveat(s): [?] AlwaysKeepMemoryDump is not 1. This device is AD domain-joined, which the documented algorithm treats as "keep", but set the value to 1 anyway. # How to read this. Section 1 resolved an ACTIVE dump from CrashDumpEnabled=1 # plus FilterPages=1 - the case Win32_OSRecoveryConfiguration reports as # plain "1 = Complete". Section 2 is the arithmetic that silently loses # dumps: 31744 MB of page file against a 31659 MB requirement. It fits by # 85 MB. Cap that page file at 8 GB and this device captures nothing. # Section 5 is the interesting part: no MEMORY.DMP, empty Minidump, but a # 1.33 GB WATCHDOG live kernel report and five full Edge updater dumps. # This device HAS been unhappy - it just never bug checked. # Broken would look like: "NOT READY - Backing store verdict SHORT by ..." # or an event 1018, or "LocalDumps key absent".

Three things in that output are worth spelling out, because they are the whole point of the post.

First, the dump type is an active memory dump, resolved from CrashDumpEnabled = 1 plus FilterPages = 1. Anything that reads Win32_OSRecoveryConfiguration.DebugInfoType on this device gets 1 and reports "complete memory dump", which is wrong. If your compliance reporting says complete and your registry says active, your reporting is the thing that is broken.

One honest caveat on that arithmetic. Microsoft's page-file requirement table lists small, kernel, complete and automatic dumps - it does not publish a figure for the active dump. Because an active dump is a filtered complete dump, the script applies the complete-dump rule of RAM plus 257 MB as a conservative estimate and says so in its output. Do not quote 31659 MB as a documented active-dump requirement; it is an upper bound, not a published number.

Second, the page file clears the requirement by 85 MB. That is not comfort, that is luck. Any policy that caps the page file, or any RAM upgrade without a page file review, flips this device from "captures a dump" to "captures nothing", with no warning and no error until the day it crashes.

Third, look at section 5 again. There is no kernel dump and the minidump folder is empty, which on a naive check reads as "this device has never had a problem". It has had plenty. There is a 1.33 GB watchdog live kernel report from a hung driver and a steady drip of full user-mode dumps from a crashing updater. Absence of MEMORY.DMP means "no bug check", not "no problems" - and this is exactly why the script separates "read failed" from "genuinely absent" and refuses to print a clean result after a failed read.

Tip for fleet use: run this as an Intune remediation detection script. It exits 0 when the device is ready and 1 when it is not, so a remediation pairing gives you a compliance percentage for "devices that can actually be diagnosed" - a number worth having before the next driver regression, not during it.

References

Two notes on sourcing. The full Microsoft-Windows-WER-SystemErrorReporting event catalogue above was read from the provider manifest on a live Windows 11 Enterprise build 26200 device, because Microsoft does not publish a single reference page listing events 1000 through 1019. The Disk Cleanup handler names were read from the same device. Both are accurate on that build, but they are observed rather than documented, so confirm them on your own image before you build tooling that depends on the exact strings.

PowerShell — companion script

Download it from Imran76Awan/Windows-11-Scripts — no sign-in required. It is read-only: it reports and never changes a device or anything in Intune. Validate it in your own environment before relying on the output.

Get-CrashDumpReadiness.ps1 — Reports whether this Windows 11 device is configured to CAPTURE a usable crash dump
View all scripts on GitHub
Was this post helpful?
React below — no account needed
Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Windows 11
SMB signing became mandatory and your NAS stopped working:…
Windows 11 24H2 and later require SMB signing, refuse insecure guest logons and ship…
Windows 11
Your firewall rule is deployed and the traffic is still blocked:…
Windows Defender Firewall has three profiles, several rule stores and a per-profile merge…
Windows 11
Attack Surface Reduction rules broke a line-of-business app:…
An ASR rule in Block mode kills an app and tells you nothing but a GUID. Here is the…