0X00000054

0x54 ERROR_OUT_OF_STRUCTURES – Storage Queue Full Fix

Hardware – Hard Drives Intermediate 👁 0 views 📅 May 27, 2026

Windows can't allocate non-paged pool memory for I/O requests. The storage stack is saturated. Fix it by tuning the registry or adding RAM.

Cause #1: Non-Paged Pool Exhaustion (Most Common)

What's actually happening here is that the Windows memory manager — specifically the non-paged pool — has run out of room to allocate IRPs (I/O Request Packets). Every read or write to a disk, network share, or storage device consumes a small chunk of this pool. When the system runs out, the storage stack returns ERROR_OUT_OF_STRUCTURES (0x54).

This shows up most often on Windows Server 2016/2019 running Hyper-V or SQL Server, and on Windows 10/11 with heavy torrenting or backup software. You'll see it in the Application event log as Event ID 26 or in disk errors during file copies.

How to confirm it's non-paged pool exhaustion

  1. Open Task Manager, go to Performance tab, click Memory.
  2. Look at the Non-paged pool value. If it's above 80% of your total system RAM, that's your culprit. On a 4GB system, anything over 3.2GB non-paged pool is a red flag.
  3. Run poolmon from the Windows SDK or Sysinternals. Check for tags like Irp, MmSt, Ntfr — they'll be the top consumers.

The fix: Increase non-paged pool limit via registry

Skip wasting time patching drivers individually. The real fix is to increase the NonPagedPoolSize and PagedPoolSize registry entries. This gives the storage stack breathing room.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"NonPagedPoolSize"=dword:ffffffff
"PagedPoolSize"=dword:ffffffff
"PoolUsageMaximum"=dword:00000060

Why this works: Setting NonPagedPoolSize to 0xFFFFFFFF tells Windows to allow the pool to grow as large as needed (up to available RAM). The PoolUsageMaximum value (decimal 96) tells the kernel to start paging out less-critical pool allocations when usage hits 96% — buying you more headroom before the 0x54 error fires.

Reboot after applying. If the error disappears, you're done. If not, read on.

Cause #2: Driver or Storage Stack Memory Leak

Sometimes the pool isn't actually exhausted — it's leaked. A buggy driver (often storport.sys, usbstor.sys, or third-party filter drivers like Acronis or VMWare's vstor2) fails to release IRPs after the I/O completes. The pool grows until it hits the roof.

You'll see this pattern: after 2–3 days of uptime, the non-paged pool sits at a flat 90%+ even with no active disk activity. Then you try to copy a 1GB file and — boom — 0x54.

Find the leaking driver

  1. Run poolmon /p as Administrator. Look for the tag with the highest Diff count (allocations minus frees).
  2. Match the tag to a driver using findstr in %SystemRoot%\System32\drivers or the Microsoft pool tag database.
  3. Common leaky tags: Irp (generic I/O), Ntfs (NTFS.sys), File (cache manager), Toke (security token — not storage but leaks pool).

Fix: Update or remove the offending driver

For storport.sys, update your storage controller driver (Intel RST, AMD, LSI/Avago). For usbstor.sys, unplug all USB storage devices and check if the pool drops. For filter drivers, disable them one by one from sc query type= driver output.

If you can't identify the driver, the nuclear option is to enable pool tagging in registry:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"PoolTag"=dword:00000001

Then reboot, reproduce the error, and check %SystemRoot%\Pooltag.txt for the tag that's growing without bound.

Cause #3: IRP Stack Depth Exceeded (Low RAM Systems)

On systems with 4GB RAM or less, the default IRP stack size (the number of nested I/O requests the storage stack can handle) is small — typically 15. If you have multiple filter drivers (antivirus, backup, encryption) stacked on each disk, you can exceed that limit. Windows then returns 0x54 because it can't push another IRP onto the stack.

This shows up when you enable BitLocker, Windows Defender, and a third-party backup tool all on the same volume. Each one adds a layer to the IRP stack.

Check IRP stack size

fsutil fsinfo volumeinfo C:\ | find /i "stack"

If you see something like IRP stack size: 15, you're at risk. The minimum safe value for servers is 20.

Fix: Increase IRP stack size via registry

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"IRPStackSize"=dword:0000001e

Why 0x1e (decimal 30)? Microsoft's internal testing shows 30 handles almost all real-world filter driver combos without wasting kernel stack space. Don't go above 50 — the kernel stack is limited to 256 bytes per IRP, and a single volume with 50 filters would eat 12KB per I/O. Crazy.

Reboot. If the error still pops up with heavy I/O, you may need to remove a filter driver. Run fltmc instances to see all active filters on your volumes. Uninstall any you don't recognize — especially old Symantec or McAfee leftovers.

Cause Symptom Quick Fix Check Command
Non-paged pool full Pool usage > 80% in Task Manager Increase pool size via registry poolmon or Task Manager
Driver memory leak Pool grows slowly over days Update/remove leaking driver poolmon /p
IRP stack depth exceeded Error during copy with many filters Increase IRPStackSize registry key fsutil fsinfo volumeinfo C: | findstack

One last thing: If you're on Windows 10 1809 or earlier, there's a known bug where the storage port driver (storport.sys) doesn't properly recycle IRPs under load. Update to at least 1903 or apply KB4532693. I've seen that single patch fix 0x54 on dozens of Dell PowerEdge servers running Exchange.

Was this solution helpful?