Segnalazione degli errori dei dispositivi
Esistono tre modi per segnalare gli errori dei dispositivi:
Quando viene restituito dalle funzioni di callback dell'oggetto dispositivo, il driver può fornire un valore restituito per il quale NT_SUCCESS(stato) è uguale a FALSE.
Il driver può chiamare WdfDeviceSetFailed.
Quando si torna dalla routine di callback EvtDriverDeviceAdd , un driver di funzione può fornire un valore restituito per il quale NT_SUCCESS(status) è FALSE. Se un driver installato come filtro non riesce EvtDriverDeviceAdd, il sistema operativo ignora l'oggetto dispositivo filtro e non indica un errore PnP.
Ognuno dei metodi precedenti comporta la rimozione efficace del dispositivo nel framework. Se i driver del dispositivo non supportano altri dispositivi nel sistema, il gestore di I/O scarica i driver.
Se la funzione di callback dell'oggetto dispositivo di un driver restituisce un valore per il quale NT_SUCCESS(status) è FALSE, il framework invia una notifica al gestore PnP, che tenta di riavviare il dispositivo richiedendo al driver del bus di riesenumerare i dispositivi. Il driver verrà ricaricato, se è stato scaricato.
Se il driver chiama WdfDeviceSetFailed, fornisce un argomento di input che determina se il dispositivo verrà riavviato. I valori degli argomenti sono WdfDeviceFailedAttemptRestart e WdfDeviceFailedNoRestart.
UMDF Prima di UMDF 2.15 un driver UMDF deve impostare questo valore su WdfDeviceFailedNoRestart. A partire dalla versione 2.15 di UMDF, un driver UMDF può richiedere che il driver del bus sottostante lo enumera nuovamente chiamando WdfDeviceSetFailed con FailedAction impostato su WdfDeviceFailedAttemptRestart. Per altre informazioni, vedere WdfDeviceSetFailed.
Per altre informazioni su questi valori di argomento, vedere WDF_DEVICE_FAILED_ACTION. Prima che la funzione di callback dell'oggetto dispositivo di un driver restituisca un valore per il quale NT_SUCCESS(status) è uguale a FALSE, la funzione di callback può impedire i riavvii chiamando WdfDeviceSetFailed con un argomento di input di WdfDeviceFailedNoRestart. In caso contrario, queste funzioni di callback non devono chiamare WdfDeviceSetFailed.
Se, entro un breve periodo di tempo, diversi tentativi di riavvio consecutivi hanno esito negativo (perché il driver riavviato segnala di nuovo un errore), il framework smette di tentare di riavviare il dispositivo.
Se la funzione EvtDeviceD0Entry di un driver del bus restituisce un valore per il quale NT_SUCCESS(status) è false, il framework potrebbe comunque chiamare le funzioni EvtDeviceD0Entry dei driver associati ai dispositivi figlio del driver del bus.