Relatando falhas de dispositivo

Há três maneiras de relatar falhas de dispositivo:

Cada um dos métodos acima resulta na remoção efetiva do dispositivo pela estrutura. Se os drivers do dispositivo não forem compatíveis com outros dispositivos no sistema, o gerenciador de E/S descarregará os drivers.

Se a função de retorno de chamada de objeto de dispositivo de um driver retornar um valor para o qual NT_SUCCESS(status) for igual a FALSE, a estrutura notificará o gerenciador PnP, que tentará reiniciar o dispositivo solicitando que o driver de barramento reenumere seus dispositivos. Seu driver será recarregado, se tiver sido descarregado.

Se o driver chamar WdfDeviceSetFailed, ele fornecerá um argumento de entrada que determina se o dispositivo será reiniciado. Os valores de argumento são WdfDeviceFailedAttemptRestart e WdfDeviceFailedNoRestart.

UMDF Antes do UMDF 2.15, um driver UMDF deve definir esse valor como WdfDeviceFailedNoRestart. A partir do UMDF versão 2.15, um driver UMDF pode solicitar que o driver de barramento subjacente enumere-o novamente chamando WdfDeviceSetFailed com FailedAction definido como WdfDeviceFailedAttemptRestart. Para obter mais informações, consulte WdfDeviceSetFailed.

Para obter mais informações sobre esses valores de argumento, consulte WDF_DEVICE_FAILED_ACTION. Antes que a função de retorno de chamada de objeto de dispositivo de um driver retorne com um valor para o qual NT_SUCCESS(status) é igual a FALSE, a função de retorno de chamada pode impedir reinicializações chamando WdfDeviceSetFailed com um argumento de entrada de WdfDeviceFailedNoRestart. Caso contrário, essas funções de retorno de chamada não precisam chamar WdfDeviceSetFailed.

Se, em um curto período de tempo, várias tentativas de reinicialização consecutivas falharem (porque o driver reiniciado relatará novamente um erro), a estrutura deixará de tentar reiniciar o dispositivo.

Se a função EvtDeviceD0Entry de um driver de barramento retornar um valor para o qual NT_SUCCESS(status) é igual a FALSE, a estrutura ainda poderá chamar as funções EvtDeviceD0Entry de drivers associados aos dispositivos filho do motorista do barramento.