IRP_MJ_PNP (fs e driver di filtro)

Data di invio

Gestione Plug and Play invia la richiesta di IRP_MJ_PNP ogni volta che si verifica Plug and Play attività nel sistema. Altri componenti del sistema operativo e altri driver in modalità kernel possono anche inviare determinate richieste di IRP_MJ_PNP, a seconda del codice di funzione secondario.

Per altre informazioni sui requisiti di elaborazione IRP Plug and Play per i driver, vedere Plug and Play.

Per informazioni di riferimento sui codici di funzione secondaria IRP_MJ_PNP, vedere Plug and Play IRP secondari.

Operazione: Driver di file system

Il file system deve controllare il codice della funzione secondaria per determinare quale operazione è richiesta. I file system devono gestire i codici di funzione secondari seguenti:

Codice Descrizione
IRP_MN_CANCEL_REMOVE_DEVICE Indica che una richiesta di dispositivo di rimozione query precedente è stata annullata. Questa richiesta viene inviata per avvisare il file system nel caso in cui sia necessario eseguire qualsiasi pulizia correlata all'annullamento.
IRP_MN_QUERY_REMOVE_DEVICE Indica che un dispositivo sta per essere rimosso. Se un file system viene montato nel dispositivo, PnP Manager invia questa richiesta al file system e a qualsiasi filtro del file system. Se nel dispositivo sono presenti handle aperti, il file system non riesce in genere la richiesta di rimozione delle query. In caso contrario, il file system blocca in genere il volume per impedire che le richieste di creazione future abbiano esito positivo. Se un file system montato non supporta una richiesta di rimozione query, PnP Manager ha esito negativo sulla richiesta di rimozione delle query per il dispositivo.
IRP_MN_REMOVE_DEVICE Indica che un dispositivo sta per essere rimosso. Se un file system viene montato nel dispositivo, PnP Manager invia questo IRP al file system e a qualsiasi filtro del file system. Il file system deve passare immediatamente questo IRP al driver di archiviazione per il dispositivo, impostando una routine di completamento in cui il file system smonta quindi il volume.
IRP_MN_START_DEVICE Indica che viene avviato un dispositivo. Il file system deve passare questo IRP al driver di archiviazione per il dispositivo.
IRP_MN_SURPRISE_REMOVAL Indica che un dispositivo è stato rimosso. Se nel dispositivo è stato montato un file system, PnP Manager invia questo IRP al file system e a qualsiasi filtro del file system. Il file system deve passare immediatamente questo IRP al driver di archiviazione per il dispositivo, impostando una routine di completamento in cui il file system smonta quindi il volume.

Operazione: Driver di filtro del file system legacy

I driver di filtro del file system devono gestire i provider di integrazione PnP in base alle linee guida seguenti:

  • Quando l'utente sta per rimuovere correttamente un volume, PnP Manager invia una richiesta di IRP_MN_QUERY_REMOVE_DEVICE. Durante la ricezione di questa IRP, il filtro deve chiudere tutti gli handle aperti nel volume e passare l'IRP fino al driver inferiore successivo nello stack. Questo passaggio è importante. Se il driver non riesce a chiudere tutti gli handle aperti, il volume non viene smontato, che a sua volta impedisce l'inserimento del dispositivo fisico.

    Durante la ricezione di una richiesta di IRP_MN_QUERY_REMOVE_DEVICE, il file system FAT smonta immediatamente tutti i volumi che possono essere rimossi in modo sicuro. Pertanto, qualsiasi filtro collegato a un volume FAT dovrebbe prevedere che il relativo oggetto dispositivo di filtro verrà liberato prima che venga chiamata la routine di completamento del filtro. Il file system NTFS non esegue questa operazione. Pertanto, un filtro collegato a un volume NTFS può prevedere che l'oggetto dispositivo sia ancora collegato al volume quando viene chiamata la routine di completamento del filtro.

  • Gli IRP ricevuti dopo una richiesta di IRP_MN_QUERY_REMOVE_DEVICE, ma prima che venga ricevuta una richiesta di IRP_MN_CANCEL_REMOVE_DEVICE o IRP_MN_REMOVE_DEVICE, possono essere passati in modo sicuro allo stack per lo stack di dispositivi di archiviazione, oppure mantenuti in una coda finché non viene ricevuta la richiesta di annullamento o rimozione del dispositivo.

  • Se un filtro riceve una richiesta di IRP_MN_CANCEL_REMOVE_DEVICE dopo aver già chiuso tutti gli handle aperti per un volume in risposta a una richiesta di IRP_MN_QUERY_REMOVE_DEVICE, può riaprire gli handle. Tuttavia, il filtro può eseguire questa riapertura solo nella routine di completamento, dopo che l'IRP è stato completato correttamente dai driver sotto di esso nello stack.

  • Quando un filtro riceve una richiesta di IRP_MN_REMOVE_DEVICE, in genere non deve eseguire alcuna elaborazione sull'IRP, a meno che non sia stata tenuta in una coda i provider di servizi di rete da quando riceve la richiesta di IRP_MN_QUERY_REMOVE_DEVICE. Se è in attesa di IRP in una coda, il filtro deve dequeuere tutti gli IRP per il volume ed eseguirne l'errore prima di passare l'IRP fino al driver inferiore successivo nello stack.

  • Durante la ricezione di una richiesta di IRP_MN_SURPRISE_REMOVAL, il filtro deve eseguire le operazioni seguenti:

    • Chiudere tutti gli handle aperti al volume, perché il file system non può pulire lo stack fino a quando non sono presenti riferimenti in sospeso.

    • Se il filtro contiene irP in una coda, può avere esito negativo o passarli allo stack per lo stack di dispositivi di archiviazione per l'esito negativo.

Parametri

Un file system o un driver di filtro chiama IoGetCurrentIrpStackLocation per l'IRP specificato per ottenere un puntatore alla propria posizione dello stack in IRP. Nei parametri seguenti, Irp punta a IRP e IrpSp punta al IO_STACK_LOCATION. Il driver può usare le informazioni impostate nei membri seguenti dell'IRP e del percorso dello stack IRP per elaborare una richiesta di Plug and Play:

  • DeviceObject è un puntatore all'oggetto dispositivo di destinazione.

  • Irp->IoStatus punta a una struttura IO_STATUS_BLOCK che riceve lo stato di completamento finale e le informazioni sull'operazione richiesta.

  • IrpSp->FileObject deve puntare a NULL per PnP IRP.

  • IrpSp->MajorFunction è impostato su IRP_MJ_PNP.

  • IrpSp->MinorFunction è impostato su uno dei valori seguenti:

    • IRP_MN_CANCEL_REMOVE_DEVICE
    • IRP_MN_QUERY_REMOVE_DEVICE
    • IRP_MN_REMOVE_DEVICE
    • IRP_MN_START_DEVICE
    • IRP_MN_SURPRISE_REMOVAL

Vedi anche

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_PNP (informazioni di riferimento sul kernel WDK)

IRP_MN_CANCEL_REMOVE_DEVICE

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_REMOVE_DEVICE

IRP_MN_START_DEVICE

IRP_MN_SURPRISE_REMOVAL