IRP_MJ_PNP (controladores de filtro y FS)

Cuándo se envió

El administrador de Plug and Play envía la solicitud IRP_MJ_PNP cada vez que se produce Plug and Play actividad en el sistema. Otros componentes del sistema operativo y otros controladores en modo kernel también pueden enviar determinadas solicitudes de IRP_MJ_PNP, en función del código de función secundaria.

Para obtener más información sobre Plug and Play requisitos de procesamiento de IRP para controladores, consulte Plug and Play.

Para obtener información de referencia sobre IRP_MJ_PNP códigos de función menores, consulte Plug and Play IRP secundarias.

Operación: controladores del sistema de archivos

El sistema de archivos debe comprobar el código de función secundaria para determinar qué operación se solicita. Los sistemas de archivos deben controlar los siguientes códigos de función secundarias:

Código Descripción
IRP_MN_CANCEL_REMOVE_DEVICE Indica que se canceló una solicitud de dispositivo de eliminación de consultas anterior. Esta solicitud se envía para alertar al sistema de archivos en caso de que necesite realizar cualquier limpieza relacionada con la cancelación.
IRP_MN_QUERY_REMOVE_DEVICE Indica que un dispositivo está a punto de quitarse. Si se monta un sistema de archivos en el dispositivo, el Administrador de PnP envía esta solicitud al sistema de archivos y a cualquier filtro del sistema de archivos. Si hay identificadores abiertos en el dispositivo, el sistema de archivos suele producir un error en la solicitud de eliminación de consultas. Si no es así, el sistema de archivos normalmente bloquea el volumen para evitar que las solicitudes de creación futuras se realicen correctamente. Si un sistema de archivos montado no admite una solicitud de eliminación de consultas, el Administrador de PnP produce un error en la solicitud de eliminación de consultas para el dispositivo.
IRP_MN_REMOVE_DEVICE Indica que un dispositivo está a punto de quitarse. Si se monta un sistema de archivos en el dispositivo, el Administrador de PnP envía este IRP al sistema de archivos y a cualquier filtro del sistema de archivos. El sistema de archivos debe pasar inmediatamente este IRP al controlador de almacenamiento del dispositivo, estableciendo una rutina de finalización en la que el sistema de archivos desmonta el volumen.
IRP_MN_START_DEVICE Indica que se está iniciando un dispositivo. El sistema de archivos debe pasar este IRP al controlador de almacenamiento del dispositivo.
IRP_MN_SURPRISE_REMOVAL Indica que se ha quitado un dispositivo. Si se ha montado un sistema de archivos en el dispositivo, el Administrador de PnP envía este IRP al sistema de archivos y a cualquier filtro del sistema de archivos. El sistema de archivos debe pasar inmediatamente este IRP al controlador de almacenamiento del dispositivo, estableciendo una rutina de finalización en la que el sistema de archivos desmonta el volumen.

Operación: controladores de filtro del sistema de archivos heredados

Los controladores de filtro del sistema de archivos deben controlar los IRP de PnP según las siguientes directrices:

  • Cuando el usuario está a punto de quitar correctamente un volumen, el Administrador de PnP envía una solicitud de IRP_MN_QUERY_REMOVE_DEVICE. Al recibir este IRP, el filtro debe cerrar todos los identificadores abiertos del volumen y pasar el IRP hacia abajo hasta el controlador siguiente inferior de la pila. Este paso es importante. Si el controlador no cierra todos los identificadores abiertos, se impide que el volumen se desmonte, lo que a su vez impide que se expulse el dispositivo físico.

    Al recibir una solicitud de IRP_MN_QUERY_REMOVE_DEVICE, el sistema de archivos FAT desmonta inmediatamente todos los volúmenes que puede quitar de forma segura. Por lo tanto, cualquier filtro asociado a un volumen FAT debe esperar que se libere su objeto de dispositivo de filtro antes de llamar a la rutina de finalización del filtro. El sistema de archivos NTFS no lo hace. Por lo tanto, un filtro asociado a un volumen NTFS puede esperar que su objeto de dispositivo todavía esté conectado al volumen cuando se llame a la rutina de finalización del filtro.

  • Los IRP que se reciben después de una solicitud de IRP_MN_QUERY_REMOVE_DEVICE, pero antes de recibir una solicitud de IRP_MN_CANCEL_REMOVE_DEVICE o IRP_MN_REMOVE_DEVICE, se pueden pasar de forma segura a la pila del dispositivo de almacenamiento para que no se produzcan errores o se mantenga en una cola hasta que se reciba la solicitud cancel-remove o remove-device.

  • Si un filtro recibe una solicitud de IRP_MN_CANCEL_REMOVE_DEVICE después de que ya haya cerrado todos los identificadores abiertos de un volumen en respuesta a una solicitud de IRP_MN_QUERY_REMOVE_DEVICE, puede volver a abrir los identificadores. Sin embargo, el filtro solo puede volver a abrirse en su rutina de finalización, después de que el IRP se haya completado correctamente por los controladores debajo de él en la pila.

  • Cuando un filtro recibe una solicitud de IRP_MN_REMOVE_DEVICE, normalmente no es necesario realizar ningún procesamiento en el IRP, a menos que haya estado manteniendo IRP en una cola desde que recibe la solicitud de IRP_MN_QUERY_REMOVE_DEVICE. Si contiene IRP en una cola, el filtro debe poner en cola todos los IRP del volumen y conmutarlos antes de pasar el IRP al controlador inferior siguiente de la pila.

  • Al recibir una solicitud de IRP_MN_SURPRISE_REMOVAL, el filtro debe realizar las siguientes operaciones:

    • Cierre todos los identificadores abiertos en el volumen, ya que el sistema de archivos no puede limpiar la pila hasta que no haya referencias pendientes.

    • Si el filtro contiene IRP en una cola, puede conmutarlos por error o pasarlos por la pila del dispositivo de almacenamiento para que se produzcan errores.

Parámetros

Un controlador de filtro o sistema de archivos llama a IoGetCurrentIrpStackLocation para que el IRP determinado obtenga un puntero a su propia ubicación de pila en el IRP. En los parámetros siguientes, Irp apunta al IRP e IrpSp apunta al IO_STACK_LOCATION. El controlador puede usar la información establecida en los siguientes miembros del IRP y la ubicación de pila de IRP para procesar una solicitud de Plug and Play:

  • DeviceObject es un puntero al objeto de dispositivo de destino.

  • Irp->IoStatus apunta a una estructura de IO_STATUS_BLOCK que recibe el estado de finalización final e información sobre la operación solicitada.

  • IrpSp->FileObject debe apuntar a NULL para IRP de PnP.

  • IrpSp->MajorFunction se establece en IRP_MJ_PNP.

  • IrpSp->MinorFunction se establece en uno de los valores siguientes:

    • IRP_MN_CANCEL_REMOVE_DEVICE
    • IRP_MN_QUERY_REMOVE_DEVICE
    • IRP_MN_REMOVE_DEVICE
    • IRP_MN_START_DEVICE
    • IRP_MN_SURPRISE_REMOVAL

Consulte también

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_PNP (referencia del kernel de WDK)

IRP_MN_CANCEL_REMOVE_DEVICE

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_REMOVE_DEVICE

IRP_MN_START_DEVICE

IRP_MN_SURPRISE_REMOVAL