Rotina RemoveDevice do Driver de Classe de Armazenamento
Quando um dispositivo está prestes a ser removido, o gerenciador PnP primeiro chama a rotina DispatchPnP do driver de classe com uma solicitação de remoção de consulta PnP (IRP_MJ_PNP com IRP_MN_QUERY_REMOVE_DEVICE. O driver de classe de armazenamento deve falhar na solicitação de remoção de consulta em qualquer um dos seguintes casos:
O dispositivo contém o arquivo de paginação do sistema ou o arquivo de hibernação.
O driver está executando uma operação longa que não deve ser cancelada (por exemplo, retroceder ou formatar uma fita).
Há identificadores pendentes para o dispositivo (CREATEs).
O driver de classe de armazenamento também poderá falhar em uma solicitação de remoção de consulta se o dispositivo for solicitado para despejo de memória, pois a remoção desse dispositivo desabilita o despejo de falha.
Se o driver de classe de armazenamento retornar STATUS_SUCCESS em resposta a uma solicitação de remoção de consulta, o gerenciador PnP chamará a rotina DispatchPnP do driver de classe com uma solicitação de remoção PnP (IRP_MJ_PNP com IRP_MN_REMOVE_DEVICE). A rotina DispatchPnP do driver de classe de armazenamento chama uma rotina interna de RemoveDevice ou implementa a mesma funcionalidade embutida.
A rotina RemoveDevice de um driver de classe de armazenamento deve fazer o seguinte:
Libere todos os recursos pendentes, como memória ou eventos, alocados pelo driver.
Exclua links simbólicos, se houver, criados pelo driver.
Exclua o FDO (objeto do dispositivo).
Encaminhe a solicitação para o driver mais baixo.
Se o driver de classe de armazenamento criou PDOs na inicialização (por exemplo, para representar partições em um dispositivo de mídia particionado), esses PDOs já foram removidos quando o gerenciador PnP envia a solicitação de remoção para o driver de classe de armazenamento.
Mesmo depois que um objeto de dispositivo tiver sido excluído, se ele tiver uma contagem de referência diferente de zero, o objeto do dispositivo persistirá no sistema até que sua contagem de referência atinja zero e, em seguida, desaparecerá silenciosamente. Um driver de classe de armazenamento não deve tentar usar o ponteiro do objeto do dispositivo depois que o objeto do dispositivo tiver sido excluído.
Para obter mais informações sobre como lidar com uma solicitação de remoção, consulte Removendo um dispositivo.