Partilhar via


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.