Rutinas de distribución del controlador de clase de almacenamiento
Los controladores de clase DRIVER_DISPATCH y las rutinas DispatchClose normalmente no tienen requisitos específicos del dispositivo. La mayoría de los controladores de clase de almacenamiento son controladores intermedios; sus rutinas de envío simplemente devuelven STATUS_SUCCESS para indicar que existe un objeto de dispositivo determinado para que los controladores de nivel superior y, indirectamente, las aplicaciones en modo de usuario puedan abrir el dispositivo para E/S y cerrar el dispositivo después.
Las rutinas DispatchDeviceControl y DispatchInternalDeviceControl del controlador de clase deben ser residentes; es decir, no pueden ser paginables ni formar parte de la sección pageable-image de un controlador. Dependiendo del IOCTL de una solicitud determinada, una rutina de envío podría llamar a una rutina paginada o esperar una llamada desde un objeto de sincronización o notificación (bloqueando así el subproceso en ejecución), pero la rutina de envío debe poder pasar un IOCTL desconocido a través de en DISPATCH_LEVEL.
Un controlador de clase de almacenamiento debe tener una rutina DispatchPnP para que las solicitudes inicien, detengan y quiten el dispositivo y respondan a otras solicitudes PnP, como la notificación de que el dispositivo está en la ruta de acceso de paginación. Para obtener más información sobre cómo controlar una solicitud de inicio de PnP, consulte Control de inicio de PnP en un controlador de clase de almacenamiento. Para obtener más información sobre el control de otras solicitudes PnP, consulte Control de solicitudes PnP a periféricos de almacenamiento.
Un controlador de clase de almacenamiento también debe tener una rutina DispatchPower para que las solicitudes establezcan el estado de energía de su dispositivo. Para obtener más información, consulte Control de solicitudes de energía a periféricos de almacenamiento.
Un controlador de clase de almacenamiento debe tener una rutina DispatchShutdown y, posiblemente, una rutina DispatchFlushBuffers si su dispositivo almacena en caché los datos internamente, si su dispositivo podría estar conectado a un bus controlado por un HBA que almacena en caché los datos internamente, o si un sistema de archivos se coloca por encima del controlador de clase. Para mantener la integridad de los datos, esta memoria caché debe vaciarse en el dispositivo antes de apagar el sistema.
Consulte también Escribir rutinas de envío para obtener más información sobre los requisitos generales de las rutinas de envío.