Compartir a través de


Responsabilidades opcionales de DriverEntry

Dependiendo de la posición de un controlador determinado en una cadena de controladores superpuestas, la naturaleza del dispositivo subyacente y el diseño del controlador, una rutina DriverEntry también puede ser responsable de las siguientes tareas:

  • Llamar a IoAllocateDriverObjectExtension para crear e inicializar una extensión de objeto de controlador, si el controlador requiere almacenamiento para los datos en todo el controlador. La extensión de objeto del controlador es una estructura de datos específica del controlador. Por ejemplo, un controlador podría usar su extensión de objeto de controlador para almacenar una ruta de acceso del registro u otra información global.

  • Llamar a PsCreateSystemThread para crear subprocesos de trabajo ejecutivos, si el controlador es un controlador de nivel superior (como un controlador del sistema de archivos) que usa dichos subprocesos. En este caso, el controlador también debe tener una rutina de devolución de llamada de tipo WORKER_THREAD_ROUTINE, que toma un único parámetro de entrada PVOID.

  • Registrar una rutina reinicializar . (Vea Escribir una rutina de reinicialización).

  • Controlar los requisitos de inicialización específicos de la clase que difieren de los que se describen aquí, como los que un controlador de miniporte o miniclase específico del dispositivo que trabaja en conjunto con un controlador de puerto o clase podría tener. Consulte la documentación específica del tipo de dispositivo en el Kit de controladores de Windows (WDK) para obtener más información.

Proporcionar almacenamiento para recursos del sistema

Asigne objetos por dispositivo en la rutina AddDevice o en la rutina Dispatch que controla la solicitud de IRP_MN_START_DEVICE PnP, no en DriverEntry.

Sin embargo, es posible que un controlador necesite asignar memoria de espacio del sistema adicional para otros usos del controlador en general. Si es así, la rutina DriverEntry puede llamar a una (o varias) de las siguientes rutinas:

Cada rutina DriverEntry se ejecuta en el contexto de un subproceso del sistema en IRQL = PASSIVE_LEVEL. Por lo tanto, cualquier memoria asignada con ExAllocatePoolWithTag para su uso exclusivamente durante la inicialización puede provenir de pools de memoria paginada, siempre que el controlador no controle el dispositivo que contiene el archivo de página del sistema. La memoria asignada debe liberarse con ExFreePool antes de que DriverEntry devuelva el control. Sin embargo, un controlador que establece una rutina Reinitialize puede pasar un puntero a esta memoria cuando llama a IoRegisterDriverReinitialization, por lo que la rutina Reinitialize del controlador es responsable de liberar la asignación de memoria.

Reclamar recursos de hardware

Los controladores antiguos que no son de PnP reclamaron recursos del registro. Por otro lado, los controladores PnP no reclaman recursos de dispositivo del Registro ni escriben directamente los requisitos de recursos en el Registro. En su lugar, estos controladores notifican los requisitos en respuesta a determinados IRP de PnP, como parte del proceso de enumeración del administrador de PnP. Un controlador PnP recibe sus recursos asignados en una solicitud PnP IRP_MN_START_DEVICE.

Los controladores que no interactúan directamente con el administrador de PnP, como determinados controladores de miniporte, pueden tener requisitos de informes diferentes impuestos por un controlador de clase o puerto que interactúe con el administrador de PnP. Estos requisitos son específicos de la clase de dispositivo. Para obtener detalles específicos del dispositivo y específicos de clase, consulte la documentación de la clase de dispositivo pertinente en el Kit de controladores de Windows (WDK).

Uso del Registro

Una rutina DriverEntry puede usar el Registro para obtener parte de la información que necesita para inicializar el controlador, o bien podría establecer información en el Registro para que otros controladores o subsistemas protegidos usen. La naturaleza de la información depende del tipo de dispositivo. Los controladores pueden acceder al registro mediante rutinas ZwXxx y RtlXxx . El parámetro RegistryPath de la rutina DriverEntry apunta a una cadena Unicode con recuento que especifica una ruta de acceso a la clave del Registro del controlador, \Registry\Machine\System\CurrentControlSet\Services\DriverName. La rutina debe guardar una copia de la cadena, no el propio puntero, ya que el puntero ya no es válido después de que DriverEntry devuelva.