Skip to content

Est. 2011ยทMicrosoft Partner 7033487ยทDelivery under 3 minยทSupport 7 days a week

Your vault is empty.

Free Fix 0x00000044

MULTIPLE_IRP_COMPLETE_REQUESTS 0x00000044 and IRP handling bugchecks

11 min read Updated October 5, 2026 Windows Crashes & Boot Recovery

Fix it now

0x00000044 means a driver called IoCompleteRequest for an I/O request packet that was already complete. Microsoft’s published reading is two drivers each believing they own the packet: the first completion succeeds, the second bug checks. The driver named in the dump is usually the one that made the second call, not the one that caused the problem.

Run these in an elevated Command Prompt, in Safe Mode if the machine will not stay up

fltmc
driverquery /si /fo table
  1. Open the newest file in %SystemRoot%\Minidump in WinDbg and run !analyze -v. Note the module named and, more usefully, the device stack the packet was travelling down.
  2. Read the fltmc output against what you believe is installed. You are looking for two products doing the same job on one stack, or a filter belonging to something that was uninstalled.
  3. Remove the redundant one with the vendor’s own removal utility. An ordinary uninstall frequently leaves the kernel filter loaded.
  4. Restart and confirm with fltmc that the filter has actually gone, rather than trusting the uninstaller.
  5. Update whichever product remains to a build its vendor supports on your Windows version, then re-run the workload that crashed.

fltmc unload <name> takes a minifilter out of the path without a reboot, which makes a clean test. Some products reload theirs from a service, so check with fltmc afterwards.

If the stack is now clean and the workload runs, you are done. The next section covers how a packet gets completed twice and which of the sibling codes you might be looking at instead.

Why it happens

Windows I/O runs on request packets that travel down a device stack. Each driver in the stack gets its own stack location, does its part, and either completes the packet or passes it further down. Completion is a one-way door: once a driver calls the completion routine the packet is finished, its memory can be released, and any later reference to it is a reference to memory that no longer belongs to anyone.

Microsoft’s description of 0x00000044 is narrow and worth taking literally: two separate drivers each believed they owned the packet and each attempted to complete it. The first call succeeded. The second bug checked. It does not say the second caller is at fault, and in practice it often is not – it is simply the one that arrived after the door had closed. That is why replacing the named driver so often changes nothing.

The sibling codes describe adjacent mistakes in the same machinery, and they are not interchangeable. 0x00000035 is a higher-level driver calling IoCallDriver with no stack locations left, so it wrote off the end of the packet and corrupted whatever was next – Microsoft calls that a disastrous situation for exactly that reason. 0x00000048 is a packet that completed normally with a cancel routine still set, and whose parameter 2 is that cancel routine, which identifies the driver. 0x000000CB is locked pages left behind after an I/O operation, and it is only issued when TrackLockedPages is enabled; without it the system issues the much less informative 0x76 instead.

0x0000002A is the odd one out. It has a published meaning – an IRP found in a state inconsistent with the rest of itself, such as one being completed while still marked as queued to a driver’s device queue – but Microsoft also states that the code is not currently used by the system and exists for debugging purposes. If you are triaging a live machine, it is not what you are looking at.

Two products are attached to the same stack

You have this one if fltmc lists filters from more than one vendor doing the same job, and the crashes cluster around file access or backup runs.

  1. Decide which product you are keeping. Only one real-time scanner should own the file system filter path.
  2. Remove the other with its vendor’s dedicated removal tool, from Safe Mode if the normal removal fails.
  3. Restart and confirm with fltmc that the filter is gone, not merely that the entry has left the installed programs list.
  4. Check Microsoft Defender’s state afterwards. It steps aside for a registered third-party product and takes over again when that product is removed.

Microsoft names the mechanism, not the product category. Two filters on one stack is a plausible way to get two owners for one packet, but it is a pattern to check rather than a documented cause of this code.

A filter from software you thought was removed

You have this one if fltmc shows a filter belonging to a product that is not installed any more.

  1. Find the driver behind it and check whether its service is still configured. Device Manager with View then Show hidden devices will show the device side.
  2. Use the original vendor’s removal utility, which knows about its own kernel components.
  3. If none exists, identify the package with pnputil /enum-drivers and remove it with pnputil /delete-driver <oem#.inf> /uninstall.
  4. Restart and confirm the filter no longer loads.

A driver written for a much older Windows

You have this one if The named module belongs to disc emulation, sandboxing, an old disk utility or copy protection, and has had no update in years.

  1. Remove the product and confirm the filter has gone.
  2. Look for a maintained alternative – most of what these tools offered, including mounting disc images, is now native.
  3. If the software is genuinely required, run it inside a virtual machine so its filter sits on that stack rather than on the host’s.

Duplication in the storage stack

You have this one if The device stack in the dump is a disk or volume stack, and the machine carries a caching or acceleration layer as well as a vendor storage driver.

  1. Confirm which mode the firmware is presenting and install only the matching driver.
  2. Remove caching or acceleration software that duplicates what the controller already does.
  3. Update the storage controller driver and the drive firmware from their own vendors.
  4. Re-test with a sustained file copy, which exercises the path that failed.

Full reference

Looking at a stack rather than a module name

Command Where What it shows
fltmc Elevated prompt The loaded file system minifilters, with their altitudes
fltmc unload <name> Elevated prompt Takes one minifilter out of the path for a test
fltmc help Elevated prompt The full command set, including instances and attach or detach
driverquery /si /fo table Elevated prompt Signed-driver inventory, useful for spotting unsigned or unexpected packages
!analyze -v WinDbg, dump open Automated analysis and the module that made the failing call
!devstack WinDbg, dump open The full driver stack for a device object
!irp WinDbg, dump open One packet in detail, including which driver holds each stack location

The four codes, side by side

Code Published meaning What identifies the driver
0x00000044 A driver completed an IRP that was already complete Parameter 1 is the address of the IRP; the stack shows the second caller
0x00000035 IoCallDriver was called with no stack locations left in the packet Parameter 1 is the address of the IRP; the caller is the higher-level driver
0x00000048 A cancel routine was set on an IRP that had already completed Parameter 2 is the cancel routine, which names the stack
0x0000002A An IRP contained inconsistent information Parameter 1 is the IRP address, but the code is not currently used by the system
0x000000CB Locked pages were not released after an I/O operation Parameter 3 is the MDL; !lockedpages lists the locked MDLs for the process

Turning on the diagnostic that produces 0x000000CB

If you are seeing 0x76 rather than 0x000000CB, you are getting the uninformative version of the same fault. Setting TrackLockedPages to DWORD 1 under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management makes the system issue 0x000000CB instead, which carries the MDL and the page count. Driver Verifier’s pool tracking option can raise the same bug check. Both are diagnostics for a test machine, not settings to leave on an estate.

Using Driver Verifier on this class of fault

I/O verification is precisely the check for this. It is part of the standard option set, so verifier /standard /driver name.sys against the suspect drivers is enough – there is no need to reach for the aggressive options first. Enable it on a test machine, reproduce the workload, and let it bug check with the offending driver on the stack rather than the one that came second. Clear it with verifier /reset and restart when you have your answer.

Driver Verifier crashes machines deliberately and Microsoft says to run it only on computers used for testing and debugging. Take a backup, and enable it with verifier /bootmode resetonbootfail so a failed start clears it automatically.

When the stack looks clean and it still crashes

  • Compare several dumps. A module that changes between crashes points away from a single filter and towards pool corruption.
  • Check the System log around each crash for storage or device errors immediately before the bug check.
  • Confirm the remaining security product is a build its vendor supports on your Windows version. Kernel components fall behind quickly when a licence lapses and updates stop arriving.
  • Where two products genuinely have to coexist, apply each vendor’s documented exclusions for the other rather than removing either.
  • If the crash only appears under backup or replication, run that job with the other filters unloaded to narrow the pair involved.

Every code this article covers

Code What it points at Source
0x00000044 MULTIPLE_IRP_COMPLETE_REQUESTS: a driver called IoCompleteRequest for an IRP that was already complete. Microsoft’s stated case is two drivers each believing they own the packet – the first completion succeeds, the second bug checks Microsoft Learn
0x00000035 NO_MORE_IRP_STACK_LOCATIONS: a higher-level driver called IoCallDriver with no stack locations left in the packet, so it wrote off the end of the packet and corrupted other memory as well Microsoft Learn
0x00000048 CANCEL_STATE_IN_COMPLETED_IRP: an IRP that had a cancel routine set completed normally and the routine was then called. Parameter 2 is that cancel routine Microsoft Learn
0x0000002A INCONSISTENT_IRP: an IRP was found to contain inconsistent information, for example one being completed while still marked as queued to a driver’s device queue. Microsoft states this code is not currently used by the system and exists for debugging purposes Microsoft Learn
0x000000CB DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS: a driver or the I/O manager failed to release locked pages after an I/O operation. Issued only when TrackLockedPages is set to 1; otherwise the system issues 0x76 instead Microsoft Learn

Confirm the fix worked

  1. fltmc lists only the filters you intend to have, all belonging to products that are still installed.
  2. The workload that crashed – a full backup, a large file copy, whatever it was – completes without a new dump.
  3. The remaining security product reports itself active in Windows Security.
  4. No new files appear in %SystemRoot%\Minidump over several days of normal use.

Questions people ask about this

The dump names a Microsoft driver. Should I reinstall Windows?

No. On this bug check the named module is often the honest driver that made the second completion call after something else completed the packet early. Look at the whole device stack and at which third-party filters are attached before touching Windows itself.

Does fixing this cost anything?

No. Removing duplicated or obsolete software and updating what remains is free, and Microsoft Defender ships with Windows. Choosing between two products you already own is a decision about which to keep, not a purchase.

Which filter should I remove when both are wanted?

Keep the one that is currently supported on your Windows version and whose function you cannot replace. Where both vendors document coexistence, follow their exclusion guidance instead of removing either.

Can Driver Verifier find this?

Yes. I/O verification is part of the standard option set and is designed for this class of fault. Enable it against named third-party drivers on a test machine and clear it with verifier /reset when you have the answer.

I am seeing 0x0000002A. What now?

Check the code again. Microsoft states 0x0000002A is not currently used by the system, so a live machine should not be producing it. If your evidence is a screenshot or a ticket, the number has probably been transcribed wrong.

Related error codes

Was this article helpful?

Your feedback helps us improve our documentation.

Related articles

License Error IRQL_GT_ZERO_AT_SYSTEM_SERVICE 0x0000004A and kernel stack exhaustion on hosts Free Fix UNEXPECTED_STORE_EXCEPTION 0x00000154 on Windows 10 and Windows 11 Free Fix WHEA_UNCORRECTABLE_ERROR 0x00000124 – diagnosing a real hardware fault License Error DRIVER_POWER_STATE_FAILURE 0x0000009F on sleep, hibernate or shutdown
โ† Back to Knowledge Base