Функция IoRaiseHardError (ntddk.h)

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

Синтаксис

void IoRaiseHardError(
  [in]           PIRP           Irp,
  [in, optional] PVPB           Vpb,
  [in]           PDEVICE_OBJECT RealDeviceObject
);

Параметры

[in] Irp

Указатель на IRP, который завершился сбоем из-за ошибки ввода-вывода устройства.

[in, optional] Vpb

Указатель на блок параметров тома (VPB), если таковой есть, для подключенного объекта файла. Этот параметр имеет значение NULL, если с объектом устройства не связанА ни функция VPB.

[in] RealDeviceObject

Указатель на объект устройства, представляющий физическое устройство, на котором произошел сбой операции ввода-вывода.

Возвращаемое значение

None

Remarks

Драйверы самого высокого уровня, особенно драйверы файловой системы, вызывают IoRaiseHardError.

Предупреждение

Так как IoRaiseHardError использует обычный APC ядра для создания диалогового окна пользователя, при возникновении ошибки устройства может возникнуть взаимоблокировка. Пример:

  1. Драйвер фильтра верхнего уровня вызывает KeEnterCriticalRegion (который отключает обычные APC ядра) и отправляет запрос ввода-вывода в драйвер файловой системы. Драйвер фильтра ожидает завершения запроса драйвером файловой системы, прежде чем драйвер фильтра вызовет KeLeaveCriticalRegion (который повторно включает обычные APC ядра).

  2. В файловой системе возникает ошибка, и драйвер файловой системы вызывает IoRaiseHardError , чтобы сообщить об ошибке пользователю. Драйвер файловой системы ожидает диалогового окна.

  3. Теперь существует взаимоблокировка: обычный APC ядра, созданный IoRaiseHardError для создания диалогового окна, ожидает включения нормальных APC ядра. Файловая система ожидает в диалоговом окне перед выполнением запроса ввода-вывода. Драйвер фильтра ожидает завершения запроса ввода-вывода, прежде чем вызывать KeLeaveCriticalRegion (который повторно включает обычные APC ядра).

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

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntddk.h (включая Ntddk.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), IrqlIoApcLte(wdm)

См. также раздел

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode