Последовательность Surprise-Removal
Если пользователь удаляет устройство без предупреждения, просто отключив его без использования диспетчер устройств или программы Безопасное удаление оборудования, устройство считается "неожиданно удаленным". В этом случае платформа выполняет несколько другую последовательность удаления. Он также следует за последовательностью неожиданного удаления, если другой драйвер вызывает IoInvalidateDeviceState на устройстве, даже если устройство по-прежнему физически присутствует. В последовательности неожиданного удаления платформа вызывает обратный вызов EvtDeviceSurpriseRemoval перед вызовом любого из других обратных вызовов в последовательности удаления. После завершения последовательности платформа уничтожает объект устройства. Драйверы для всех съемных устройств должны гарантировать, что обратные вызовы в путях завершения работы и запуска могут обрабатывать сбои, особенно сбои, вызванные удалением оборудования. Любые попытки доступа к оборудованию не должны ждать бесконечно, но должны быть подвержены истечению времени ожидания или сторожевого таймера.
На следующей схеме показаны обратные вызовы, участвующие в неожиданном удалении:
Если устройство не находилось в рабочем состоянии при удалении, платформа вызывает обратный вызов события EvtDeviceReleaseHardware сразу после EvtDeviceSurpriseRemoval. В нем пропускаются промежуточные шаги, которые уже были выполнены при выходе устройства из рабочего состояния.