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.