Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para la mayoría de los sistemas, la jerarquía física de los dispositivos de un equipo determina el orden en el que Windows y el administrador PnP cargan los controladores. Windows y el administrador de PnP configuran dispositivos a partir del dispositivo raíz del sistema y, a continuación, configuran los dispositivos secundarios del dispositivo raíz (por ejemplo, un adaptador PCI), los elementos secundarios de esos dispositivos, etc. El administrador de PnP carga los controladores para cada dispositivo a medida que se configura el dispositivo, si los controladores no se cargaron previamente para otro dispositivo.
La configuración del archivo INF puede influir en el orden de carga del controlador. En este tema se describen los valores pertinentes que los proveedores deben especificar en la sección service-install-section a la que hace referencia la directiva INF AddService de un controlador. En concreto, en este tema se describen las entradas StartType, BootFlags, LoadOrderGroup y Dependencies .
Los controladores deben seguir estas reglas para especificar StartType:
El controlador PnP no es necesario al principio del arranque
Un controlador PnP debe tener un tipo de inicio de SERVICE_DEMAND_START (0x3), especificando que el administrador de PnP puede cargar el controlador cuando el administrador de PnP encuentra un dispositivo al que da servicio el controlador.
Controlador necesario para iniciar el equipo
Si se requiere un dispositivo para iniciar el equipo, los controladores del dispositivo deben tener un tipo de inicio de SERVICE_BOOT_START (0x0).
Controlador que no es controlador de arranque y que detecta dispositivos que no son enumerables PnP
Para un dispositivo que no sea PnP-enumerable, un controlador informa al administrador de PnP sobre el dispositivo mediante una llamada a IoReportRootDevice o IoReportDetectedDevice. Este controlador debe tener el tipo de inicio SERVICE_SYSTEM_START (0x01), por lo que Windows cargará el controlador durante la inicialización del sistema.
Solo los controladores que notifican hardware que no sea PnP deben establecer este tipo de inicio. Si un controlador admite dispositivos PnP y no PnP, debe establecer este tipo de inicio.
Controlador que no es PnP que debe iniciar el Administrador de control de servicios
Este controlador debe tener el tipo de inicio SERVICE_AUTO_START (0x02). Los controladores PnP no deben establecer este tipo de inicio.
Se debe escribir un controlador PnP para que se pueda cargar cuando Windows configure un dispositivo al que da servicio el controlador. Por el contrario, un controlador debe poder descargarse cada vez que el administrador de PnP determina que ya no hay dispositivos presentes que controla el controlador. Los únicos ordenes de carga de controladores de los que deben depender los controladores PnP son los siguientes:
Los controladores de un dispositivo hijo pueden depender del hecho de que se cargan los controladores del dispositivo padre.
Un controlador de la pila de dispositivos puede depender del hecho de que se cargan los controladores debajo de él.
Por ejemplo, el controlador de función puede estar seguro de que se cargan los controladores de filtro inferior.
Sin embargo, tenga en cuenta que un controlador de la pila de dispositivos no puede depender de cargarse secuencialmente después de los controladores inferiores de un dispositivo, ya que es posible que el controlador se haya cargado anteriormente cuando se configuró otro dispositivo.
Los controladores de filtro de un grupo de filtros no pueden determinar de antemano su orden de carga. Por ejemplo, si un dispositivo tiene tres controladores de filtro superior registrados, estos tres controladores se cargarán después del controlador de función, pero podrían cargarse en cualquier orden dentro de su grupo de filtros superior.
Si un controlador tiene una dependencia explícita de orden de carga en otro controlador, esa dependencia se debe implementar a través de una relación padre/hijo. Un controlador para un dispositivo secundario puede depender de que los controladores del dispositivo principal se carguen antes de cargar los controladores secundarios.
Para reforzar la importancia de establecer el valor StartType correcto, en la lista siguiente se describe cómo Windows y el administrador de PnP usan las entradas StartType en los archivos INF:
En el inicio del sistema, el cargador del sistema operativo carga controladores de tipo SERVICE_BOOT_START antes de transferir el control al kernel. Estos controladores están en memoria cuando el kernel obtiene el control.
Los controladores de arranque se cargan antes de configurar la mayoría de los dispositivos, por lo que su orden de carga no se puede determinar mediante la jerarquía de dispositivos. Los controladores de inicio de arranque pueden usar entradas LoadOrderGroup del INF para ordenar su carga. El sistema operativo omite las entradas INF Dependencies para los controladores de arranque.
El administrador de PnP llama a las rutinas DriverEntry de los controladores de SERVICE_BOOT_START para que los controladores puedan atender los dispositivos de arranque.
Si un dispositivo de arranque tiene dispositivos secundarios, se enumeran esos dispositivos. Los dispositivos hijo se configuran e inician si sus controladores también son controladores de inicio en el arranque. Si los controladores de un dispositivo no son todos controladores de inicio de arranque, el administrador de PnP crea un nodo de dispositivo (devnode) para el dispositivo, pero aún no inicia el dispositivo.
Una vez que se han cargado todos los controladores de arranque y se han iniciado los dispositivos de arranque, el administrador de PnP configura el resto de los dispositivos PnP y carga sus controladores.
El administrador de PnP recorre el árbol de dispositivos y carga los controladores de los nodos de dispositivo que aún no se han iniciado (es decir, los nodos de dispositivo no iniciados del paso anterior). A medida que se inicia cada dispositivo, el administrador de PnP enumera los elementos secundarios del dispositivo, si los hay.
A medida que configura estos dispositivos, el administrador de PnP carga los controladores para los dispositivos, independientemente de los valores StartType de los controladores (excepto cuando StartType sea SERVICE_DISABLED) antes de continuar para iniciar los dispositivos. Muchos de estos drivers son drivers SERVICE_DEMAND_START.
El administrador de PnP omite las entradas del Registro que se crearon como resultado de las entradas INF Dependencies y las entradas LoadOrderGroup para los controladores que carga en este paso. El orden de carga se basa en la jerarquía del dispositivo físico.
Al final de este paso, todos los dispositivos están configurados, excepto los dispositivos que no son enumerables PnP y los descendientes de esos dispositivos. (Los descendientes podrían ser o no enumerables PnP).
El administrador de PnP carga controladores de StartType SERVICE_SYSTEM_START que aún no están cargados.
Estos controladores detectan y notifican sus dispositivos no PnP. El administrador de PnP procesa las entradas del Registro que son el resultado de las entradas inf LoadOrderGroup para estos controladores. Omite las entradas del Registro que se crearon debido a las entradas INF de Dependencies para estos controladores.
El administrador de control de servicio carga controladores de StartType SERVICE_AUTO_START que aún no están cargados.
El administrador de control de servicios procesa la información de la base de datos de servicio en relación con las dependencias DependOnGroup y DependOnServices de los servicios. Esta información procede de las entradas Dependencies de las entradas AddService de INF. Tenga en cuenta que la información de dependencias solo se procesa para controladores que no son PnP porque los controladores PnP necesarios se cargaron en un paso anterior del inicio del sistema. El Administrador de control de servicios omite la información de INF LoadOrderGroup.
Consulte la documentación del SDK de Microsoft Windows para obtener más información sobre el Administrador de control de servicios.
Uso de BootFlags para elevar el StartType de un controlador en el arranque en función del escenario de arranque
El sistema operativo puede promover el StartType de un controlador para que sea un controlador de arranque en función del valor BootFlags especificado en el INF del controlador. Puede especificar uno o varios (combinados mediante OR) de los siguientes valores numéricos en el archivo INF, expresados como un valor hexadecimal:
- Si se debe promover un driver para que sea un driver de inicio de arranque en el arranque de red, especifique 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD).
- Si se debe elevar la prioridad de un controlador al arrancar desde un disco duro virtual, especifique 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD)
- Si se debe dar prioridad a un controlador durante el arranque desde un disco USB, especifique 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD).
- Si se debe cargar un controlador durante el arranque desde el almacenamiento SD, especifique 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD)
- Si se debe cargar un controlador durante el arranque desde un disco en un controlador USB 3.0, especifique 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD).
- Si se debe cargar un controlador durante el arranque con el arranque medido habilitado, especifique 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD).
- Si se debe cargar un controlador durante el arranque con el arranque del comprobador habilitado, especifique 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD).
- Si se debe cargar un controlador en el arranque de WinPE, especifique 0x80 (CM_SERVICE_WINPE_BOOT_LOAD).
Para obtener más información sobre la promoción de StartType de un controlador en el arranque, en función del escenario de arranque, vea directiva INF AddService.