Condividi tramite


Routine RemoveDevice del driver della classe di archiviazione

Quando un dispositivo sta per essere rimosso, il gestore PnP chiama prima la routine DispatchPnP del driver di classe con una richiesta di rimozione query PnP (IRP_MJ_PNP con IRP_MN_QUERY_REMOVE_DEVICE. Il driver della classe di archiviazione deve non riuscire la richiesta di rimozione query in uno dei casi seguenti:

  • Il dispositivo contiene il file di paging del sistema o il file di ibernazione.

  • Il driver esegue un'operazione lunga che non deve essere annullata, ad esempio riavvolgimento o formattazione di un nastro.

  • Esistono handle in sospeso per il dispositivo (CREATEs).

Il driver della classe di archiviazione potrebbe anche non riuscire una richiesta di rimozione di query se il dispositivo è richiesto per il dump di arresto anomalo del sistema, perché la rimozione di tale dispositivo disabilita il dump di arresto anomalo del sistema.

Se il driver della classe di archiviazione restituisce STATUS_SUCCESS in risposta a una richiesta di rimozione di query, il gestore PnP chiama la routine DispatchPnP del driver di classe con una richiesta di rimozione PnP (IRP_MJ_PNP con IRP_MN_REMOVE_DEVICE). La routine DispatchPnP del driver della classe di archiviazione chiama una routine RemoveDevice interna o implementa la stessa funzionalità inline.

La routine RemoveDevice di un driver della classe di archiviazione deve eseguire le operazioni seguenti:

  • Rilasciare tutte le risorse in sospeso, ad esempio memoria o eventi, allocate dal driver.

  • Eliminare i collegamenti simbolici, se presenti, creati dal driver.

  • Eliminare l'oggetto dispositivo (FDO).

  • Inoltrare la richiesta al driver successivo inferiore.

Se il driver della classe di archiviazione ha creato PDO all'avvio (ad esempio, per rappresentare le partizioni in un dispositivo multimediale partizionato), tali PDO sono già stati rimossi quando il gestore PnP invia la richiesta di rimozione al driver della classe di archiviazione.

Anche dopo l'eliminazione di un oggetto dispositivo, se ha un conteggio dei riferimenti diverso da zero, l'oggetto dispositivo persiste nel sistema fino a quando il numero di riferimenti non raggiunge lo zero, scompare automaticamente. Un driver della classe di archiviazione non deve tentare di usare il puntatore all'oggetto dispositivo dopo l'eliminazione dell'oggetto dispositivo.

Per altre informazioni sulla gestione di una richiesta di rimozione, vedere Rimozione di un dispositivo.