Что означает код 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 bug check code 283 (0x0000011B)Проверка ошибки DRIVER_RETURNED_HOLDING_CANCEL_LOCK имеет значение 0x0000011B.
Она означает, что драйвер вернулся из подпрограммы отмены, продолжая удерживать глобальную блокировку отмены.
Из-за этого все последующие вызовы отмены завершаются неудачно, что приводит к взаимоблокировке или другой проверке ошибки.

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

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

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

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

  • Откройте панель управления.
  • Выберите «Программы» > «Программы и компоненты» > «Просмотр установленных обновлений».
  • Найдите KBKB5005565 и KB5005568 и удалите их, если они всё ещё установлены.

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

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

  • Откройте «Параметры» > «Устройства».
  • Нажмите «Устройства и принтеры».
  • Нажмите «Добавить принтер», затем ссылку «Необходимый принтер отсутствует в списке».
  • Выберите добавление принтера по TCP/IP-адресу или имени узла.
  • Узнайте IP-адрес принтера и следуйте инструкциям на экране.

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

  • Запустите редактор реестра.
  • Перейдите к HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print.
  • Щёлкните правой кнопкой мыши раздел Print и выберите «Создать» > «Параметр DWORD (32 бита)».
  • Назовите новый параметр RpcAuthnLevelPrivacyEnabled.
  • Дважды щёлкните новый параметр и задайте ему значение 0.

Fix network printer error 283

Внутреннее устройство 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 при удержании спин-блокировки может привести к взаимоблокировке.


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