Función IoRaiseHardError (ntddk.h)

La rutina IoRaiseHardError hace que aparezca un cuadro de diálogo que advierte al usuario de que se ha producido un error de E/S del dispositivo, lo que podría indicar que se produce un error en un dispositivo físico.

Sintaxis

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

Parámetros

[in] Irp

Puntero al IRP que produjo un error debido a un error de E/S del dispositivo.

[in, optional] Vpb

Puntero al bloque de parámetros de volumen (VPB), si existe, para el objeto de archivo montado. Este parámetro es NULL si no hay ningún VPB asociado al objeto de dispositivo.

[in] RealDeviceObject

Puntero al objeto de dispositivo que representa el dispositivo físico en el que se produjo un error en la operación de E/S.

Valor devuelto

None

Observaciones

Los controladores de nivel más alto, especialmente los controladores del sistema de archivos, llaman a IoRaiseHardError.

Advertencia

Dado que IoRaiseHardError usa un APC de kernel normal para crear un cuadro de diálogo de usuario, se puede producir un interbloqueo si se deshabilitan las API normales del kernel cuando se produce un error de dispositivo. Por ejemplo:

  1. Un controlador de filtro de nivel superior llama a KeEnterCriticalRegion (que deshabilita las API de kernel normales) y envía una solicitud de E/S a un controlador del sistema de archivos. El controlador de filtro espera a la finalización de la solicitud por parte del controlador del sistema de archivos antes de que el controlador de filtro llame a KeLeaveCriticalRegion (que vuelve a habilitar las API normales del kernel).

  2. Se produce un error en el sistema de archivos y el controlador del sistema de archivos llama a IoRaiseHardError para notificar el error al usuario. El controlador del sistema de archivos espera en el cuadro de diálogo.

  3. El interbloqueo ahora existe: el APC de kernel normal creado por IoRaiseHardError para crear el cuadro de diálogo espera a que se habiliten las API normales del kernel. El sistema de archivos espera en el cuadro de diálogo antes de completar la solicitud de E/S. El controlador de filtro espera la finalización de la solicitud de E/S antes de llamar a KeLeaveCriticalRegion (que vuelve a habilitar las API de kernel normales).

El comportamiento de esta rutina depende del estado actual de errores duros para el subproceso en ejecución. Si se han deshabilitado los errores duros llamando a IoSetThreadHardErrorMode, esta rutina completa el IRP especificado por Irp sin transferir datos a búferes de usuario. Además, no se envía ningún mensaje para notificar al usuario de este error.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado ntddk.h (incluya Ntddk.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlIoApcLte(wdm)

Consulte también

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode