0X0000046A: Not Enough Server Storage — What Actually Fixes It
Windows runs out of non-paged pool memory. The fix is raising the IRPStackSize registry key. Clearing desktop shortcuts won't help.
Quick answer
Raise the IRPStackSize registry value under HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters to 20 (decimal) and reboot.
What's actually happening here
This error — ERROR_NOT_ENOUGH_SERVER_MEMORY (0X0000046A) — isn't about your RAM. What's happening is that the Windows Server service (lanmanserver) has exhausted its allocation of non-paged pool memory. Non-paged pool is a kernel memory region that never gets swapped to disk. It's used by drivers, file system operations, and network requests. When it runs out, the server can't allocate the internal structures needed to process SMB requests, print jobs, or named pipe connections.
I've seen this most often on Windows Server 2012 R2 and 2019 boxes that handle hundreds of concurrent SMB connections — file servers, print servers, or boxes running SQL Server with named pipes enabled. It also hits Windows 10/11 workstations acting as file shares for more than 20 simultaneous connections. The error message in the System Event Log is usually Event ID 2011 with source "srv".
The fix: raise IRPStackSize
The root cause is the IRP stack size — a kernel structure that defines how many I/O Request Packets can be queued per device. The default is 15. That's fine for a desktop. For a server handling heavy I/O, it's too low.
- Open regedit as Administrator.
- Navigate to
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters. - If IRPStackSize doesn't exist, create it as a DWORD (32-bit) value.
- Set its value to 20 (decimal). The range is 11–50. I recommend 20. Going higher than 30 rarely helps and wastes pool memory.
- Click OK, close regedit, and reboot the server.
Why step 3 works: Increasing IRPStackSize gives the Server service more room in the I/O stack to enqueue pending requests. Without this, the kernel fails to allocate the structures it needs and throws 0X0000046A. The reason 20 is a good ceiling is that each extra stack level consumes non-paged pool — you're trading one scarce resource for another.
Alternative fixes if the registry change doesn't work
If raising IRPStackSize doesn't clear the error, you're dealing with a different bottleneck. Here's what else I'd check:
- Leaking drivers. Run
poolmon -b(from the Windows SDK) to see which tagged allocation is consuming non-paged pool. Look for the tag with the highest "Bytes". A third-party storage driver, antivirus filter driver, or backup agent is often the culprit. Update or remove it. - Too many open file handles. The server also limits open files per session. Check the
MaxWorkItemsandMaxMpxCtvalues in the same registry key. Defaults are usually fine unless you have thousands of concurrent clients. - Non-paged pool quota. On 32-bit systems, the kernel caps non-paged pool at ~256 MB. On 64-bit systems, it's limited by physical RAM. If you're maxing out, you need more RAM or to offload workloads. Consider moving to 64-bit if you're still on x86.
- Event ID 2011 with source srv. This confirms the server service exhausted non-paged pool. Pair it with the registry fix above and check
HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size. Set it to 3 (decimal) to optimize for server workloads.
Prevention tip
Monitor non-paged pool usage in Performance Monitor (counter: Memory\Pool Nonpaged Bytes). If it consistently sits above 80% of your system's pool limit, you'll hit 0X0000046A again. Set an alert at 75% usage. For a production file server, I also recommend setting IRPStackSize to 20 before the error appears — it's a proactive tweak that costs nothing but a reboot.
One final note: don't bother with clearing desktop shortcuts, checking disk space, or reinstalling the network adapter. Those are myths that waste your time. The error is strictly about kernel memory allocation for I/O requests. Fix the pool, fix the error.
Was this solution helpful?