共用方式為


報告裝置故障

有三種方式可以報告裝置失敗:

上述每個方法都會導致架構有效地移除裝置。 如果裝置的驅動程式不支持系統上的其他裝置,I/O 管理員會卸除驅動程式。

如果驅動程式的裝置物件回呼函式傳回的值,NT_SUCCESS(status)等於FALSE, 框架會通知 PnP 管理員,然後要求匯流排驅動程式重新列舉其裝置來嘗試重新啟動裝置。 如果您的驅動程式已被卸除,則將會重新載入。

如果您的驅動程式呼叫 WdfDeviceSetFailed,它會提供輸入自變數,以判斷裝置是否會重新啟動。 自變數值為 WdfDeviceFailedAttemptRestartWdfDeviceFailedNoRestart

UMDF UMDF 2.15 之前,UMDF 驅動程式必須將此值設定為 WdfDeviceFailedNoRestart。 從 UMDF 2.15 版開始,UMDF 驅動程式可以呼叫 WdfDeviceSetFailed 並將 FailedAction 設定為 WdfDeviceFailedAttemptRestart,以要求基礎總線驅動程式重新列舉它。 如需詳細資訊,請參閱 WdfDeviceSetFailed

如需這些自變數值的詳細資訊,請參閱 WDF_DEVICE_FAILED_ACTION。 在驅動程式的裝置物件回呼函式返回 NT_SUCCESS(status)等於 FALSE 的值之前,回呼函式可以透過呼叫 WdfDeviceSetFailed 並用 WdfDeviceFailedNoRestart 作為輸入參數來防止重新啟動。 否則,這些回呼函式不需要呼叫 WdfDeviceSetFailed

如果在短時間內,連續幾次重新啟動嘗試失敗(因為重新啟動的驅動程式再次回報錯誤),架構會停止嘗試重新啟動裝置。

如果總線驅動程式的 EvtDeviceD0Entry 函式傳回值,NT_SUCCESS(status) 等於 FALSE,架構仍可能會呼叫與總線驅動程式子裝置相關聯之驅動程式的 EvtDeviceD0Entry 函式。