Share via


Independientes dispatchCreate y DispatchClose Routines

Las rutinas de envío de un controlador para IRP_MJ_CREATE y IRP_MJ_CLOSE solicitudes podrían no hacer nada más que completar el IRP de entrada con STATUS_SUCCESS. Para obtener más información, consulte Finalización de IRP.

Las rutinas de envío de otro controlador para IRP_MJ_CREATE y IRP_MJ_CLOSE solicitudes pueden hacer más trabajo, dependiendo del controlador de dispositivo subyacente o del dispositivo subyacente. Considere los siguientes escenarios:

  • Al recibir una solicitud de creación, un controlador de clase podría inicializar una cola interna y enviar una solicitud de IRP_MJ_INTERNAL_DEVICE_CONTROL al controlador de puerto correspondiente que solicita información de configuración del dispositivo o acceso exclusivo a un puerto de controlador.

  • La recepción de IRP_MJ_CLOSE indica que se ha quitado la última referencia al objeto de archivo asociado al objeto de dispositivo de destino. Esto implica que todos los identificadores del objeto de archivo se han cerrado y se han completado o cancelado todas las solicitudes de E/S pendientes.

  • Al recibir una solicitud de creación, un controlador de un dispositivo usado con poca frecuencia podría llamar a MmLockPagableCodeSection para hacer residentes algunas de las rutinas del controlador que procesan otras solicitudes IRP_MJ_XXX . Al recibir una solicitud de cierre recíproca, el controlador podría llamar a MmUnlockPagableImageSection para conservar la memoria del sistema al paginar su sección de imagen paginable cuando se cierran todos los identificadores de objeto de archivo para estos objetos de dispositivo del controlador.

Algunos controladores controlan IRP_MJ_CLOSE solicitudes solo de simetría porque, después de que sus objetos de dispositivo se hayan abierto mediante un subsistema protegido o un controlador de nivel superior, los objetos de dispositivo de los controladores de nivel inferior no se cierran hasta que el propio sistema se apague. Por ejemplo, los controladores de teclado y mouse configuran objetos de dispositivo que representan dispositivos físicos que deben ser funcionales mientras se ejecuta el sistema, por lo que estos controladores pueden tener rutinas mínimas de DispatchClose para la simetría o que hayan combinado rutinas DispatchCreateClose .

Si el dispositivo controlado por un controlador de nivel inferior debe estar disponible para que el sistema continúe ejecutándose, generalmente no se llamará a la rutina DispatchClose del controlador. Por ejemplo, algunos de los controladores de disco del sistema no tienen ninguna rutina DispatchClose , pero estos controladores suelen tener rutinas DispatchFlushBuffers y DispatchShutdown para completar las operaciones pendientes de E/S de archivos antes de que se apague el sistema.

Aunque puede implementar rutinas independientes de DRIVER_DISPATCH y DispatchClose , los controladores a veces tienen una sola rutina DispatchCreateClose para controlar las solicitudes de creación y cierre.