報告裝置失敗

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

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

如果驅動程式的裝置物件回呼函式傳回值,NT_SUCCESS (狀態) 等於 FALSE,架構會通知 PnP 管理員,然後藉由要求匯流排驅動程式繼續其裝置來重新開機裝置。 如果已卸載驅動程式,則會重載您的驅動程式。

如果您的驅動程式呼叫 WdfDeviceSetFailed,它會提供輸入引數來判斷裝置是否會重新開機。 引數值為 WdfDeviceFailedAttemptRestartWdfDeviceFailedNoRestart

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

如需這些引數值的詳細資訊,請參閱 WDF_DEVICE_FAILED_ACTION。 驅動程式的裝置物件回呼函式傳回之前,其值NT_SUCCESS (狀態) 等於FALSE,回呼函式可以藉由呼叫WdfDeviceSetFailed 搭配 WdfDeviceFailedNoRestart的輸入引數來防止重新開機。 否則,這些回呼函式不需要呼叫 WdfDeviceSetFailed

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

如果匯流排驅動程式的 EvtDeviceD0Entry 函式傳回值,NT_SUCCESS (狀態) 等於 FALSE,架構仍可能會呼叫與匯流排驅動程式子裝置相關聯的驅動程式 EvtDeviceD0Entry 函式。