Previous | Next |
EM_INITIALIZATION_ERROR | ATTEMPTED_WRITE_TO_CM_PROTECTED_STORAGE |
DRIVER_RETURNED_HOLDING_CANCEL_LOCK
The
DRIVER_RETURNED_HOLDING_CANCEL_LOCK bug check has a value of 0x0000011B.
This bug check indicates that a driver has returned from a cancel routine that holds the global cancel lock.
This causes all later cancellation calls to fail, and results in either a deadlock or another bug check.
Generally speaking, the occurrence of this error is caused by poor-quality printer drivers.
The best way (but unfortunately not very fast) is to ask the manufacturer to make corrections. To do this,
you need to contact the manufacturer and send him the dmp files generated when an error occurs. But as a
temporary fix, you can use the procedure described below.
How to fix DRIVER_RETURNED_HOLDING_CANCEL_LOCK at connecting network printer
Please make sure that KBKB5005565 and KB5005568 have been uninstalled completely.
To confirm please follow the steps:
- Open Control Panel
- Click Programs > Under Programs and Features > Click View installed updates
- Look for KBKB5005565 and KB5005568 and uninstall them if it’s still there
You may so try performing the steps below:
METHOD 1: Manually adding the printer using its IP Address
- Go to Settings > Devices
- Click Devices and Printers
- Click Add a printer > Click on the link that says “The printer that I want isn’t listed”
- Select Add a printer using a TCP/IP or hostname
- Get your printer’s IP Address and follow the on-screen instructions
METHOD 2: Disable Print Spooler RPC Encryption
- Launch Registry Editor
- Navigate to HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print
- Right click on the Print key and select New > DWORD-32 bit Value
- Name the new key RpcAuthnLevelPrivacyEnabled
- Double click on the new key and set its value to 0 (zero)
DRIVER_RETURNED_HOLDING_CANCEL_LOCK internals
Important
This topic is for programmers. If you are a customer who has received a blue screen error code while using your computer, see Troubleshoot blue screen errors.
DRIVER_RETURNED_HOLDING_CANCEL_LOCK Parameters
Parameter | Description |
---|---|
1 | The address of the IRP that was canceled (might not be valid). |
2 | The address of the cancel routine. |
Remarks
The cancel spin lock should have been released by the cancel routine.
The driver calls the IoCancelIrpIoCancelIrp function to cancel an individual I/O request packet (IRP).
This function acquires the cancel spin lock, sets the cancel flag in the IRP, and then calls
the cancel routine specified by the appropriate field in the IRP, if a routine was specified.
The cancel routine is expected to release the cancel spin lock. If there is no cancel
routine, the cancel spin lock is released.
Using the System’s Cancel Spin Lock & DRIVER_RETURNED_HOLDING_CANCEL_LOCK
The system provides a single cancel spin lock, which is acquired or released when certain system routines
are called.
Driver routines that change the state of cancelable IRPs, including all routines that might complete
an IRP with STATUS_CANCELLED, must acquire and release the system cancel spin lock according to the
guidelines in this section.
In drivers that use the I/O manager-supplied device queue, any driver routine other than the Cancel routine
that changes the cancelable state of an IRP must first call IoAcquireCancelSpinLock to acquire the system
cancel spin lock.
Acquiring the cancel spin lock ensures that only the caller can change the cancelable state of that IRP.
While the caller holds the spin lock, the I/O manager cannot call the driver’s Cancel routine for that
IRP. Likewise, another driver routine, such as a DispatchCleanup routine, cannot simultaneously try to change
the cancelable state of that IRP.
In drivers that manage their own queues of IRPs and use driver-supplied spin locks to synchronize queue
access, the driver routines do not need to acquire the cancel spin lock before calling IoSetCancelRoutine.
However, these drivers should check the Cancel routine pointer that IoSetCancelRoutine returns to determine
whether the Cancel routine has already started. See Using a Driver-Supplied Spin Lock for details.
Any driver routine that calls IoAcquireCancelSpinLock must call IoReleaseCancelSpinLock as soon as possible.
Otherwise system will generate DRIVER_RETURNED_HOLDING_CANCEL_LOCK (0x0000011B) bug check.
A driver must never call IoCompleteRequest with an IRP while holding a spin lock. Attempting to complete
an IRP while holding a spin lock can cause a deadlock.