Introducción a las rutinas de controlador estándar
Cada controlador en modo kernel se construye alrededor de un conjunto de rutinas de controladores estándar definidas por el sistema. Los controladores en modo kernel procesan paquetes de solicitud de E /S (IRP) dentro de estas rutinas estándar llamando a rutinas de soporte técnico de controladores proporcionados por el sistema.
Todos los controladores, independientemente de su nivel en una cadena de controladores conectados, deben tener un conjunto básico de rutinas estándar para procesar IRP. Si un controlador debe implementar rutinas estándar adicionales depende de si el controlador controla un dispositivo físico o se superpone a un controlador de dispositivo físico, así como a la naturaleza del dispositivo físico subyacente. Los controladores de nivel más bajo que controlan los dispositivos físicos tienen rutinas más necesarias que los controladores de nivel superior, que normalmente pasan IRP a un controlador inferior para su procesamiento.
Las rutinas de controlador estándar se pueden dividir en dos grupos: las que cada controlador en modo kernel debe tener y las que son opcionales, en función del tipo de controlador y la ubicación de la pila de dispositivos.
En la tabla siguiente se enumeran las rutinas estándar necesarias.
Rutinas de controlador estándar necesarias | Propósito | Dónde se describe |
---|---|---|
DriverEntry | Inicializa el controlador y su objeto driver. | Escribir una rutina DriverEntry |
AddDevice | Inicializa los dispositivos y crea objetos de dispositivo. | Escribir una rutina AddDevice |
Rutinas de envío | IrP de recepción y procesamiento. | Escribir rutinas de envío |
Descargar | Libere los recursos del sistema adquiridos por el controlador. | Escribir una rutina de descarga |
En la tabla siguiente se enumeran varias rutinas opcionales.
Rutinas de controlador estándar opcionales | Propósito | Dónde se describe |
---|---|---|
Reinicializar | Completa la inicialización del controlador si DriverEntry no puede. | Escribir una rutina de reinicialización |
StartIo | Inicia una operación de E/S en un dispositivo físico. | Escribir una rutina StartIo |
Rutina de servicio de interrupción | Guarda el estado de un dispositivo cuando se interrumpe. | Escritura de un ISR |
Llamadas a procedimiento diferido | Completa el procesamiento de una interrupción del dispositivo después de que un ISR guarde el estado del dispositivo. | DPC Objects and DPC (Objetos DPC y DPC) |
SynchCritSection | Sincroniza el acceso a los datos del controlador. | Uso de secciones críticas |
AdapterControl | Inicia operaciones DMA. | Objetos de adaptador y DMA |
IoCompletion | Completa el procesamiento de un controlador de un IRP. | Finalización de IRP |
Cancelar | Cancela el procesamiento de un controlador de un IRP. | Cancelación de IRP |
CustomTimerDpc, IoTimer | Tiempo y sincronización de eventos. | Técnicas de sincronización |
El IRP actual y el objeto de dispositivo de destino son parámetros de entrada para muchas rutinas estándar. Cada controlador procesa cada IRP en fases a través de su conjunto de rutinas estándar.
Por convención, los controladores proporcionados por el sistema anteponen un prefijo de identificación, específico del controlador o específico del dispositivo al nombre de cada rutina estándar excepto DriverEntry. Por ejemplo, esta documentación usa "DD", como se muestra en la ilustración de Introducción a los objetos de controlador. Siguiendo esta convención, resulta más fácil depurar y mantener controladores.