Condividi tramite


sequenza Surprise-Removal

Se l'utente rimuove il dispositivo senza avviso, semplicemente scollegandolo senza usare Gestione dispositivi o l'utilità Di rimozione sicura dell'hardware, il dispositivo viene considerato "rimosso a sorpresa". In questo caso, il framework segue una sequenza di rimozione leggermente diversa. Segue anche la sequenza di rimozione a sorpresa se un altro driver chiama IoInvalidateDeviceState nel dispositivo, anche se il dispositivo è ancora fisicamente presente. Nella sequenza di rimozione a sorpresa, il framework chiama il callback EvtDeviceSurpriseRemoval prima di chiamare qualsiasi altro callback nella sequenza di rimozione. Al termine della sequenza, il framework elimina definitivamente l'oggetto dispositivo. I driver per tutti i dispositivi rimovibili devono garantire che i callback nei percorsi di arresto e avvio possano gestire gli errori, in particolare gli errori causati dalla rimozione dell'hardware. Eventuali tentativi di accesso all'hardware non devono attendere a tempo indeterminato, ma devono essere soggetti a timeout o a un timer watchdog.

Il diagramma seguente mostra i callback coinvolti in una rimozione improvvisa.

Diagramma di flusso che illustra la sequenza di rimozione delle sorprese nei driver di dispositivo.

Se il dispositivo non era nello stato di lavoro quando è stato rimosso, il framework chiama il callback dell'evento EvtDeviceReleaseHardware immediatamente dopo EvtDeviceSurpriseRemoval. Omette i passaggi intermedi, che sono già stati eseguiti quando il dispositivo è uscito dallo stato di lavoro.