Orden de carga del filtro del sistema de archivos
El sistema operativo Windows carga los controladores de filtro del sistema de archivos en función de:
- El tipo de inicio del controlador, donde cada tipo de inicio representa las fases de arranque de un sistema.
- Los grupos de orden de carga para los controladores de filtro del sistema de archivos que se cargan al iniciar el sistema. Los controladores de minifiltro necesitan el concepto de grupos de orden de carga para la interoperabilidad con controladores de filtro del sistema de archivos heredados. Se puede cargar un controlador de minifiltro en cualquier momento.
Es necesario comprender los tipos de inicio del controlador y los grupos de orden de carga antes de explorar cuándo y cómo se cargan los controladores de filtro del sistema durante la secuencia de arranque del sistema.
Tipos de inicio de controlador
Un tipo de inicio del controlador en modo kernel especifica si el controlador se va a cargar durante o después del inicio del sistema. Hay cinco tipos de inicio posibles:
Tipo de inicio | Descripción |
---|---|
SERVICE_BOOT_START (0x00000000) | Indica un controlador iniciado por el cargador del sistema operativo. Los controladores de filtro del sistema de archivos suelen usar este tipo de inicio o SERVICE_DEMAND_START. Los filtros del sistema de archivos heredados deben usar este tipo de inicio. Para obtener más información, consulte Grupos de orden de carga de filtros del sistema de archivos. |
SERVICE_SYSTEM_START (0x00000001) | Indica un controlador iniciado durante la inicialización del sistema operativo. El reconocedor del sistema de archivos usa este tipo de inicio. A excepción de los sistemas de archivos enumerados en "SERVICE_DISABLED", los sistemas de archivos (incluidos los componentes del sistema de archivos de red) suelen usar este tipo de inicio o SERVICE_DEMAND_START. Este tipo de inicio también lo usan los controladores de dispositivos para dispositivos PnP que se enumeran durante la inicialización del sistema, pero que no son necesarios para cargar el sistema. |
SERVICE_AUTO_START (0x00000002) | Indica un controlador iniciado por el Administrador de control de servicios durante el inicio del sistema. Rara vez se usa. |
SERVICE_DEMAND_START (0x00000003) | Indica un controlador iniciado a petición, ya sea por el Administrador de PnP (para controladores de dispositivos) o por el Administrador de control de servicios (para sistemas de archivos y controladores de filtro del sistema de archivos). |
SERVICE_DISABLED (0x00000004) | Indica un controlador que no lo inicia el cargador del sistema operativo, el Administrador de control de servicios o el Administrador de PnP. Lo usan los sistemas de archivos cargados por un reconocedor del sistema de archivos (excepto cuando son el sistema de archivos de arranque) o por otro sistema de archivos para EFS. Estos sistemas de archivos incluyen CDFS, EFS, FastFat, NTFS y UDFS. También se usa para deshabilitar temporalmente un controlador durante la depuración. |
Todos los controladores que especifican un tipo de inicio de SERVICE_BOOT_START se cargan antes que los controladores con un tipo de inicio de SERVICE_SYSTEM_START o SERVICE_AUTO_START. Dentro de cada categoría de tipo de inicio, el grupo de orden de carga determina cuándo se cargarán los controladores de filtro del sistema de archivos (y los controladores de filtro heredados).
Especificación del tipo de inicio
Un escritor de controladores puede especificar el tipo de inicio de un controlador en el momento de la instalación de cualquiera de las maneras siguientes:
Al especificar el tipo de inicio deseado para la entrada StartType en la service-install-section a la que hace referencia una directiva AddService en el archivo INF del controlador. Este método se describe en la sección ServiceInstall de Creación de un archivo INF para un controlador de filtro.
Al pasar el tipo de inicio deseado para el parámetro dwStartType al llamar a CreateService o ChangeServiceConfig desde un programa de instalación en modo de usuario. Este método se describe en las entradas de referencia de CreateService y ChangeServiceConfig en la documentación del SDK de Microsoft Windows.
Grupos de orden de carga de controladores
Dentro de los tipos de inicio SERVICE_BOOT_START y SERVICE_SYSTEM_START, el grupo de orden de carga de cada controlador especifica el orden relativo en el que los controladores se cargan.
Los controladores cuyo tipo de inicio es SERVICE_BOOT_START se denominan controladores de arranque. Los filtros que son controladores de arranque suelen pertenecer a uno de los grupos de orden de carga de FSFilter. Estos grupos de orden de carga se describen en detalle en Grupos de orden de carga para controladores de filtro del sistema de archivos.
Controlador cuyo tipo de inicio es SERVICE_SYSTEM_START también se cargan en el orden de los grupos de orden de carga a los que pertenecen. Sin embargo, no se carga ningún controlador de inicio del sistema hasta que se cargan todos los controladores de arranque.
Los grupos de orden de carga se omiten para los controladores cuyo tipo de inicio es SERVICE_AUTO_START, SERVICE_DEMAND_START o SERVICE_DISABLED.
Puede encontrar una lista completa y ordenada de los grupos de orden de carga en la subclave ServiceGroupOrder de la clave del Registro HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control.
El mismo orden de grupo de carga se usa para los controladores de SERVICE_BOOT_START y SERVICE_SYSTEM_START. Sin embargo, todos los controladores de SERVICE_BOOT_START se cargan e inician antes de que se carguen los controladores de SERVICE_SYSTEM_START.
Especificación del grupo de orden de carga
Un escritor de controladores puede especificar el grupo de orden de carga de un controlador en el momento de la instalación de cualquiera de las maneras siguientes:
Al especificar el grupo de orden de carga deseado para la entrada LoadOrderGroup en la service-install-section a la que hace referencia una directiva AddService en el archivo INF del controlador. Este método se describe en la sección ServiceInstall de Creación de un archivo INF para un controlador de filtro.
Al pasar el tipo de inicio deseado para el parámetro lpLoadOrderGroup al llamar a CreateService o ChangeServiceConfig desde un programa de instalación en modo de usuario. Este método se describe en las entradas de referencia de CreateService y ChangeServiceConfig en la documentación del SDK de Microsoft Windows.
Para obtener más información general sobre el orden de carga de controladores y los grupos de orden de carga, consulte Especificación del orden de carga de controladores.
Reglas para cargar un controlador de filtro
Las siguientes reglas sobre el tipo de inicio y los grupos de orden de carga determinan cuándo se cargará un controlador de filtro:
Un controlador de filtro que especifica un tipo de inicio determinado y un grupo de orden de carga se carga al mismo tiempo que todos los demás controladores de filtro de ese tipo de inicio y grupo de orden de carga.
Dentro de cada grupo de orden de carga, los controladores de filtro heredados y minifiltro se cargan generalmente en orden aleatorio. Este caso normalmente da como resultado que los controladores se carguen en función del orden en que se instaló el controlador.
Si un controlador de minifiltro o de filtro heredado no especifica un grupo de orden de carga, se carga después de todos los demás controladores del mismo tipo de inicio que sí especifican un grupo de orden de carga.