Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Программа 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
Указатель на объект устройства, представляющий физическое устройство, на котором произошел сбой операции ввода-вывода.
Возвращаемое значение
Никакой
Замечания
Драйверы самого высокого уровня, особенно драйверы файловой системы, вызовите IoRaiseHardError.
Предупреждение
Так как IoRaiseHardError использует обычный APC ядра для создания диалогового окна пользователя, взаимоблокировка может возникать, если обычные API ядра отключены при возникновении ошибки устройства. Например:
Драйвер фильтра верхнего уровня вызывает KeEnterCriticalRegion (который отключает обычные API ядра) и отправляет запрос ввода-вывода драйверу файловой системы. Драйвер фильтра ожидает завершения запроса драйвером файловой системы, прежде чем драйвер фильтра вызывает KeLeaveCriticalRegion (который повторно использует обычные API ядра).
Ошибка возникает в файловой системе, а драйвер файловой системы вызывает IoRaiseHardError сообщить об ошибке пользователю. Драйвер файловой системы ожидает диалогового окна.
Взаимоблокировка теперь существует: обычное ядро APC, созданное IoRaiseHardError, для создания диалогового окна ожидает включения обычных API ядра. Файловая система ожидает завершения запроса ввода-вывода в диалоговом окне. Драйвер фильтра ожидает завершения запроса ввода-вывода перед вызовом KeLeaveCriticalRegion (который повторно использует обычные API ядра).
Поведение этой подпрограммы зависит от текущего состояния жестких ошибок для работающего потока. Если жесткие ошибки были отключены путем вызова IoSetThreadHardErrorMode, эта подпрограмма завершает IRP, указанную Irp без передачи данных в пользовательские буферы. Кроме того, сообщение не отправляется, чтобы уведомить пользователя об этом сбое.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | ntddk.h (include Ntddk.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |
правил соответствия DDI | HwStorPortProhibitedDIs(storport), IrqlIoApcLte(wdm) |