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.
Los controladores pueden incluir las siguientes rutinas de distribución:
-
IRP_MJ_CLEANUP indica que se está cerrando el último identificador de un objeto de archivo asociado al objeto de dispositivo de destino. Es posible que todavía existan solicitudes de E/S pendientes para el objeto de archivo. Los controladores pueden implementar una rutina DispatchCleanup para realizar la limpieza que no es específica de ningún identificador de archivo determinado. Los controladores también pueden usar su rutina DispatchClose para el mismo propósito.
DispatchQueryInformation, DispatchSetInformation
Algunos controladores de nivel superior pueden tener que procesar IRP_MJ_QUERY_INFORMATION y IRP_MJ_SET_INFORMATION IRP. Estas solicitudes indican que una aplicación en modo de usuario, un componente en modo kernel o un controlador han solicitado información sobre la longitud del objeto de archivo (que representa el objeto de dispositivo del controlador) para la que el solicitante en modo de usuario tiene un identificador, o que el solicitante en modo de usuario está intentando establecer un archivo de fin de archivo en ese objeto de archivo.
Los controladores de dispositivos de clase paralela y en serie gestionan estas solicitudes estableciendo la longitud o posición de FILE_STANDARD_INFORMATION o FILE_POSITION_INFORMATION en cero. Otros controladores de dispositivo de nivel superior deben admitir estas solicitudes, especialmente si una aplicación en modo de usuario o un controlador en modo kernel podría llamar a funciones en tiempo de ejecución de C para manipular el objeto de archivo. Los controladores del sistema de archivos deben admitir estas solicitudes de forma más completa que estos controladores de dispositivo de nivel superior.
-
Un controlador que almacena en caché los datos de un dispositivo o almacena en búfer los datos internamente en la memoria asignada por el controlador pueden recibir IRP_MJ_FLUSH_BUFFERS. La recepción de esta solicitud indica que el controlador debe escribir sus datos almacenados en búfer o vaciar los datos almacenados en caché en el dispositivo, o bien descartar los datos almacenados en búfer o almacenados en caché que se leyeron desde el dispositivo.
Por ejemplo, los controladores de clase para el teclado y el mouse del sistema, que tienen búferes de anillo internos para los datos de entrada de sus dispositivos, admiten la petición de vaciado. Los controladores de los dispositivos de almacenamiento masivo y los controladores superpuestos también admiten esta solicitud.
-
Cualquier controlador que probablemente se llame antes de que el sistema se apague debe controlar IRP_MJ_SHUTDOWN. La rutina DispatchShutdown debe realizar cualquier limpieza que determine el controlador como necesaria antes de que el administrador de energía envíe un IRP de establecimiento de energía del sistema para apagar el sistema. Un controlador puede llamar a IoRegisterShutdownNotification o IoRegisterLastChanceShutdownNotification para registrarse para la notificación de apagado.
Los controladores para dispositivos de almacenamiento masivo y los controladores intermedios que están sobre ellos pueden depender de un controlador de sistema de archivos de nivel superior para enviarles los IRP de apagado cuando el sistema esté a punto de apagarse. Es decir, el FSD es responsable de asegurarse de que los datos de archivos almacenados en caché se escriben en dispositivos periféricos, llamando a controladores subyacentes para vaciar los datos de sus memorias caché o búferes de dispositivos (si los hay), etc. antes de apagar el sistema.
El controlador de un dispositivo de almacenamiento masivo que almacena en caché los datos internamente debe proporcionar rutinas DispatchShutdown y DispatchFlushBuffers . Si un controlador de almacenamiento masivo almacena en búfer los datos en la memoria, pero su dispositivo no tiene ninguna caché interna, también debe proporcionar rutinas DispatchShutdown y DispatchFlushBuffers .
Cualquier controlador intermedio encapsulado sobre un controlador que maneja solicitudes IRP_MJ_FLUSH_BUFFERS y IRP_MJ_SHUTDOWN también proporciona las rutinas DispatchShutdown y DispatchFlushBuffers.