Отчеты о сбоях устройств

Существует три способа сообщить о сбоях устройств.

Каждый из указанных выше методов приводит к тому, что платформа эффективно удаляет устройство. Если драйверы устройства не поддерживают другие устройства в системе, диспетчер ввода-вывода выгрузит драйверы.

Если функция обратного вызова объекта устройства драйвера возвращает значение, для которого NT_SUCCESS(status) равно FALSE, платформа уведомляет диспетчер PnP, который затем пытается перезапустить устройство, запрашивая у драйвера шины повторное обновление устройств. Драйвер будет перезагружен, если он был выгружен.

Если драйвер вызывает WdfDeviceSetFailed, он предоставляет входной аргумент, определяющий, будет ли устройство перезапущено. Значения аргументов : WdfDeviceFailedAttemptRestart и WdfDeviceFailedNoRestart.

UMDF До версии UMDF 2.15 драйвер UMDF должен задать для этого параметра значение WdfDeviceFailedNoRestart. Начиная с версии UMDF 2.15 драйвер UMDF может запросить повторное перечисление драйвера шины, вызвав WdfDeviceSetFailed с параметром FailedAction, для параметра FailedAction задано значение WdfDeviceFailedAttemptRestart. Дополнительные сведения см. в разделе WdfDeviceSetFailed.

Дополнительные сведения об этих значениях аргументов см. в разделе WDF_DEVICE_FAILED_ACTION. Прежде чем функция обратного вызова объекта устройства драйвера возвращает значение, для которого NT_SUCCESS(status) равно FALSE, функция обратного вызова может предотвратить перезапуски, вызвав WdfDeviceSetFailed с входным аргументом WdfDeviceFailedNoRestart. В противном случае этим функциям обратного вызова не нужно вызывать WdfDeviceSetFailed.

Если в течение короткого периода времени несколько последовательных попыток перезапуска завершаются ошибкой (так как перезапущенный драйвер снова сообщает об ошибке), платформа прекращает попытки перезапустить устройство.

Если функция EvtDeviceD0Entry водителя шины возвращает значение, для которого NT_SUCCESS(status) равно FALSE, платформа может по-прежнему вызывать функции EvtDeviceD0Entry водителей, связанных с дочерними устройствами водителя шины.