Compartir a través de


Rutinas de envío opcionales

Los controladores pueden incluir las siguientes rutinas de envío:

  • DispatchCleanup

    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 de 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 dispositivo serie y clase paralela controlan estas solicitudes estableciendo la longitud o la 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.

  • DispatchFlushBuffers

    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é leídos desde el dispositivo.

    Por ejemplo, el teclado del sistema y los controladores de clase del mouse, que tienen búferes de anillo interno para los datos de entrada de sus dispositivos, admiten la solicitud de vaciado. Los controladores de los dispositivos de almacenamiento masivo y los controladores superpuestas también admiten esta solicitud.

  • DispatchShutdown

    Cualquier controlador al que es probable que se llame antes de que el sistema se apague debe controlar IRP_MJ_SHUTDOWN. La rutina DispatchShutdown debe hacer cualquier limpieza determinada por el controlador es necesaria antes de que el administrador de energía envíe un IRP de configuración del sistema para apagar el sistema. Un controlador puede llamar a IoRegisterShutdownNotification o IoRegisterLastChanceShutdownNotification para registrarse para la notificación de apagado.

Los controladores de los dispositivos de almacenamiento masivo y los controladores intermedios superpuestas pueden depender de un controlador de sistema de archivos de nivel superior para enviarlos a apagar los IRP cuando el sistema está a punto de apagarse. Es decir, el FSD es responsable de asegurarse de que los datos de archivo almacenados en caché se escriben en dispositivos periféricos, llamando a los 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 memoria, pero su dispositivo no tiene caché interna, también debe proporcionar rutinas DispatchShutdown y DispatchFlushBuffers .

Cualquier controlador intermedio superpuesta por encima de un controlador que controla las solicitudes de IRP_MJ_FLUSH_BUFFERS y IRP_MJ_SHUTDOWN también proporcionan rutinas DispatchShutdown y DispatchFlushBuffers .