Site icon EfmSoft

Что означает код BSOD 283 (DRIVER_RETURNED_HOLDING_CANCEL_LOCK)?

 
Предыдущий Следующий
EM_INITIALIZATION_ERROR ATTEMPTED_WRITE_TO_CM_PROTECTED_STORAGE

DRIVER_RETURNED_HOLDING_CANCEL_LOCK

Проверка ошибки DRIVER_RETURNED_HOLDING_CANCEL_LOCK имеет значение 0x0000011B.
Она означает, что драйвер вернулся из подпрограммы отмены, продолжая удерживать глобальную блокировку отмены.
Из-за этого все последующие вызовы отмены завершаются неудачно, что приводит к взаимоблокировке или другой проверке ошибки.

Как правило, причиной такой ошибки являются некачественные драйверы принтеров.
Лучшее, хотя и не самое быстрое решение — запросить исправление у производителя. Для этого
свяжитесь с производителем и отправьте ему dmp-файлы, созданные при возникновении ошибки. Однако в качестве
временного решения можно использовать описанную ниже процедуру.

Как устранить DRIVER_RETURNED_HOLDING_CANCEL_LOCK при подключении сетевого принтера

Убедитесь, что KBKB5005565 и KB5005568 были полностью удалены.

Для проверки выполните следующие действия:

Также можно попробовать следующие действия:

МЕТОД 1: добавьте принтер вручную по его IP-адресу

МЕТОД 2: отключите RPC-шифрование диспетчера печати

Внутреннее устройство DRIVER_RETURNED_HOLDING_CANCEL_LOCK

Важно

Эта статья предназначена для программистов. Если при работе с компьютером появился синий экран с кодом DRIVER_RETURNED_HOLDING_CANCEL_LOCK, см. Устранение ошибок синего экрана.

Параметры DRIVER_RETURNED_HOLDING_CANCEL_LOCK

Параметр Описание
1 Адрес отменённого IRP; он может быть уже недействителен.
2 Адрес подпрограммы cancel.

Примечания

Спин-блокировка отмены должна была быть освобождена подпрограммой cancel.

Для отмены отдельного пакета запроса I/O (IRP) драйвер вызывает функцию IoCancelIrpIoCancelIrp.
Эта функция захватывает спин-блокировку отмены, устанавливает в IRP флаг отмены, а затем вызывает
подпрограмму cancel, указанную в соответствующем поле IRP, если она задана.
Подпрограмма cancel должна освободить спин-блокировку отмены. Если подпрограмма cancel
не задана, спин-блокировка отмены освобождается.

Использование системной спин-блокировки отмены и DRIVER_RETURNED_HOLDING_CANCEL_LOCK

Система предоставляет единственную спин-блокировку отмены, которая захватывается или освобождается, когда определённые системные подпрограммы
вызываются.

Подпрограммы драйвера, изменяющие состояние допускающих отмену IRP, включая все подпрограммы, которые могут завершить
IRP с состоянием STATUS_CANCELLED, должны захватывать и освобождать системную спин-блокировку отмены в соответствии с
рекомендациями этого раздела.

В драйверах, использующих очередь устройства диспетчера I/O, любая подпрограмма драйвера, кроме подпрограммы Cancel,
которая изменяет состояние отменяемости IRP, должна сначала вызвать IoAcquireCancelSpinLock для захвата системной
спин-блокировки отмены.

Захват спин-блокировки отмены гарантирует, что только вызывающая сторона сможет изменить состояние отменяемости этого IRP.
Пока вызывающая сторона удерживает спин-блокировку, диспетчер I/O не может вызвать подпрограмму Cancel драйвера для этого
IRP. Аналогично, другая подпрограмма драйвера, например DispatchCleanup, не может одновременно пытаться изменить
состояние отменяемости этого IRP.

В драйверах, самостоятельно управляющих очередями IRP и использующих собственные спин-блокировки для синхронизации доступа к очереди,
подпрограммам драйвера не требуется захватывать спин-блокировку отмены перед вызовом IoSetCancelRoutine.
Однако такие драйверы должны проверить указатель подпрограммы Cancel, возвращённый IoSetCancelRoutine, чтобы определить,
не началось ли уже выполнение подпрограммы Cancel. Подробности см. в разделе об использовании спин-блокировки, предоставляемой драйвером.

Любая подпрограмма драйвера, вызвавшая IoAcquireCancelSpinLock, должна как можно быстрее вызвать IoReleaseCancelSpinLock.
В противном случае система создаст проверку ошибки DRIVER_RETURNED_HOLDING_CANCEL_LOCK (0x0000011B).

Драйвер никогда не должен вызывать IoCompleteRequest для IRP, удерживая спин-блокировку. Попытка завершить
IRP при удержании спин-блокировки может привести к взаимоблокировке.


Нужно найти другой код? Найти другой код состояния или ошибки.

Exit mobile version