Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las rutinas de distribución 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 las solicitudes de IRP_MJ_CLOSE podrían funcionar más, según el controlador de dispositivo subyacente o en el dispositivo subyacente. Tenga en cuenta 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 se han cerrado todos los identificadores del objeto de archivo 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 mediante la paginación de su sección de imagen paginable cuando se cierran todos los identificadores de objeto de archivo para dichos objetos de dispositivo de controlador.
Algunos controladores gestionan solicitudes IRP_MJ_CLOSE solo por simetría estructural, porque, después de que sus objetos de dispositivo se han abierto mediante un subsistema protegido o un controlador de nivel superior, los objetos de los dispositivos de los controladores de nivel inferior no se cierran hasta que el sistema mismo se apaga. 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 dispatchClose para la simetría o que hayan combinado las rutinas DispatchCreateClose .
Si el dispositivo controlado por un controlador de nivel inferior debe estar disponible para que el sistema continúe ejecutándose, normalmente 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 de DRIVER_DISPATCH y DispatchClose independientes, los controladores a veces tienen una única rutina DispatchCreateClose para controlar las solicitudes de creación y cierre.