sequenza Surprise-Removal
Se l'utente rimuove il dispositivo senza avviso, semplicemente scollegandolo senza usare Gestione dispositivi o l'utilità Rimuovi hardware in modo sicuro, 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 di avvio possano gestire gli errori, in particolare gli errori causati dalla rimozione dell'hardware. Eventuali tentativi di accesso all'hardware non devono attendere per un periodo illimitato, ma devono essere soggetti a timeout o a un timer watchdog.
Il diagramma seguente mostra i callback coinvolti in una rimozione a sorpresa:
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.