Introducción a los objetos de controlador

El administrador de E/S crea un objeto de controlador para cada controlador que se ha instalado y cargado. Los objetos driver se definen mediante estructuras de DRIVER_OBJECT .

Cuando el administrador de E/S llama a la rutina DriverEntry de un controlador, proporciona la dirección del objeto driver del controlador. El objeto driver contiene almacenamiento para los puntos de entrada a muchas de las rutinas estándar de un controlador. El controlador es responsable de rellenar estos puntos de entrada.

En la ilustración siguiente se muestra un objeto driver, con el conjunto de rutinas estándar definidas por el sistema que los controladores de nivel más bajo y de nivel superior pueden o deben tener.

Cada rutina estándar con un asterisco junto a su nombre recibe un paquete de solicitud de E/S (IRP) como entrada. Cada una de estas rutinas estándar también recibe un puntero al objeto de dispositivo de destino para la solicitud de E/S.

diagrama que ilustra un objeto de controlador.

El administrador de E/S define el tipo de objeto de controlador y usa objetos de controlador para registrar y realizar un seguimiento de la información sobre las imágenes cargadas de controladores. Tenga en cuenta que los puntos de entrada de distribución (DDDispatchXxx a DDDispatchYyy) del objeto de controlador corresponden a los códigos de función principales (IRP_MJ_XXX) que se pasan en las ubicaciones de pila de E/S de los IRP.

El administrador de E/S enruta primero cada IRP a una rutina de envío proporcionada por el controlador. Normalmente, una rutina de distribución del controlador de nivel inferior llama a una rutina de soporte técnico de E/S (IoStartPacket) para poner en cola (o pasar) cada IRP que tenga argumentos válidos para la rutina StartIo del controlador. La rutina StartIo inicia la operación de E/S solicitada en un dispositivo determinado. Normalmente, los controladores de nivel superior no tienen rutinas StartIo , pero pueden.