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:
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).
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.
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) |