Процедура RemoveDevice драйвера класса хранилища
Когда устройство будет удалено, диспетчер PnP сначала вызывает подпрограмму DispatchPnP драйвера класса с запросом на удаление запроса PnP (IRP_MJ_PNP с IRP_MN_QUERY_REMOVE_DEVICE. Драйвер класса хранения должен завершить запрос на удаление запроса в любом из следующих случаев:
Устройство содержит системный файл подкачки или файл гибернации.
Драйвер выполняет длительную операцию, которую не следует отменять (например, перемотку или форматирование ленты).
На устройстве имеются необработанные дескрипторы (CREATE).
Драйвер класса хранения также может завершить запрос на удаление запроса, если устройство запрашивается для аварийного дампа, так как удаление такого устройства отключает аварийный дамп.
Если драйвер класса хранения возвращает STATUS_SUCCESS в ответ на запрос на удаление запроса, диспетчер PnP затем вызывает подпрограмму DispatchPnP драйвера класса с запросом на удаление PnP (IRP_MJ_PNP с IRP_MN_REMOVE_DEVICE). Подпрограмма DispatchPnP драйвера класса хранения либо вызывает внутреннюю подпрограмму RemoveDevice , либо реализует те же встроенные функции.
Подпрограмма RemoveDevice драйвера класса хранения должна выполнять следующие действия:
Освобождает все незавершенные ресурсы, такие как память или события, выделенные драйвером.
Удалите символьные ссылки, если таковые есть, созданные драйвером.
Удалите объект устройства (FDO).
Переадресуйте запрос следующему драйверу.
Если драйвер класса хранения создал PDO при запуске (например, для представления секций на секционированных устройствах мультимедиа), такие PDO уже были удалены, когда диспетчер PnP отправляет запрос на удаление драйверу класса хранения.
Даже после удаления объекта устройства, если у него есть ненулевое число ссылок, объект устройства сохраняется в системе до тех пор, пока его число ссылок не достигнет нуля, а затем исчезает автоматически. Драйвер класса хранения не должен пытаться использовать указатель объекта устройства после удаления объекта устройства.
Дополнительные сведения об обработке запроса на удаление см. в разделе Удаление устройства.