Share via


Informes de errores de dispositivo

Hay tres maneras de notificar errores del dispositivo:

Cada uno de los métodos anteriores da como resultado que el marco quite eficazmente el dispositivo. Si los controladores del dispositivo no admiten otros dispositivos del sistema, el administrador de E/S descarga los controladores.

Si la función de devolución de llamada del objeto de dispositivo de un controlador devuelve un valor para el que NT_SUCCESS(status) es igual a FALSE, el marco notifica al administrador de PnP, que después intenta reiniciar el dispositivo solicitando al controlador de bus que vuelva aumer sus dispositivos. El controlador se volverá a cargar, si se ha descargado.

Si el controlador llama a WdfDeviceSetFailed, proporciona un argumento de entrada que determina si se reiniciará el dispositivo. Los valores de argumento son WdfDeviceFailedAttemptRestart y WdfDeviceFailedNoRestart.

UMDF Antes de UMDF 2.15, un controlador UMDF debe establecer este valor en WdfDeviceFailedNoRestart. A partir de la versión 2.15 de UMDF, un controlador UMDF puede solicitar que el controlador de bus subyacente vuelva a enumerarlo llamando a WdfDeviceSetFailed con FailedAction establecido en WdfDeviceFailedAttemptRestart. Para obtener más información, vea WdfDeviceSetFailed.

Para obtener más información sobre estos valores de argumento, vea WDF_DEVICE_FAILED_ACTION. Antes de que la función de devolución de llamada del objeto de dispositivo de un controlador devuelva un valor para el que NT_SUCCESS(status) es igual a FALSE, la función de devolución de llamada puede evitar reinicios llamando a WdfDeviceSetFailed con un argumento de entrada de WdfDeviceFailedNoRestart. De lo contrario, estas funciones de devolución de llamada no tienen que llamar a WdfDeviceSetFailed.

Si, en un breve período de tiempo, se produce un error en varios intentos de reinicio consecutivos (porque el controlador reiniciado de nuevo notifica un error), el marco deja de intentar reiniciar el dispositivo.

Si la función EvtDeviceD0Entry de un controlador de bus devuelve un valor para el que NT_SUCCESS(status) es igual a FALSE, es posible que el marco siga llamando a las funciones EvtDeviceD0Entry de los controladores asociados a los dispositivos secundarios del controlador de bus.