Compartir a través de


Creación de un archivo INF para un controlador de minifiltro

Introducción

Nota

A partir de Windows 10 versión 1903, se cambiaron los requisitos de INF para los controladores primitivos (como los controladores de minifiltro del sistema de archivos). Consulte Creación de un nuevo controlador primitivo para obtener más información.

Los controladores de filtro necesitan que se instale un archivo INF en el sistema operativo Windows. Encontrará archivos INF de ejemplo en los ejemplos de minifiltro.

Un archivo INF para un controlador de filtro del sistema de archivos suele contener las secciones siguientes:

Sección Notas
Versión Obligatorio
DestinationDirs Opcional, pero recomendado
DefaultInstall Requerido
DefaultInstall.Services Requerido
ServiceInstall Requerido
AddRegistry Requerido
Cadenas Requerido

Nota

A partir de Windows 10 versión 1903, se prohíben las secciones DefaultUninstall y DefaultUninstall.Services, (con excepción). Estas secciones eran opcionales en versiones anteriores del sistema operativo.

Todos los controladores que se ejecutan en versiones de 64 bits de los sistemas Windows deben estar firmados antes de que Windows los cargue. Consulte Firma de un controlador para obtener más información.

Sección de versión (obligatorio)

La sección Versión especifica una clase y un GUID determinados por el tipo de controlador de minifiltro, como se muestra en el ejemplo de código siguiente.

[Version]
Signature   = "$WINDOWS NT$"
Class       = "ActivityMonitor"
ClassGuid   = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2}
Provider    = %Msft%
DriverVer   = 10/09/2001,1.0.0.0
CatalogFile =
PnpLockdown = 1

En la tabla siguiente se muestran los valores que los controladores minifiltros del sistema de archivos deben especificar en la sección Versión .

Entrada Valor
Signature "$WINDOWS NT$"
Clase Consulte Clases de controlador de filtro del sistema de archivos y GUID de clase.
ClassGuid Consulte Clases de controlador de filtro del sistema de archivos y GUID de clase.
Proveedor En su propio archivo INF, debe especificar un proveedor distinto de Microsoft.
DriverVer Consulte la directiva INF DriverVer.
CatalogFile En el caso de los controladores de minifiltro antivirus firmados, esta entrada contiene el nombre de un archivo de catálogo proporcionado por WHQL. Todos los demás controladores de minifiltro deben dejar esta entrada en blanco. Para obtener más información, vea la descripción de la entrada CatalogFile en la sección versión inf.

La sección DestinationDirs especifica los directorios donde se copiarán los archivos de aplicación y el controlador de minifiltro.

En esta sección y en la sección ServiceInstall , puede especificar directorios del sistema conocidos mediante valores numéricos definidos por el sistema. Para obtener una lista de estos valores, vea sección INF DestinationDirs. En el ejemplo de código siguiente, el valor 12 hace referencia al directorio Drivers (%windir%\system32\drivers) y el valor 10 hace referencia al directorio de Windows (%windir%).

[DestinationDirs]
DefaultDestDir = 12
Minispy.DriverFiles = 12
Minispy.UserFiles   = 10,FltMgr

Sección DefaultInstall (obligatorio)

En la sección DefaultInstall , una directiva CopyFiles copia los archivos de controladores del controlador de minifiltro y los archivos de aplicación de usuario en los destinos especificados en la sección DestinationDirs .

Nota

La directiva CopyFiles no debe hacer referencia al archivo de catálogo ni al propio archivo INF. SetupAPI copia estos archivos automáticamente.

Puede crear un único archivo INF para instalar el controlador en varias versiones de los sistemas operativos Windows. Puede crear este tipo de archivo INF creando secciones DefaultInstall y DefaultInstall.Services adicionales para cada versión del sistema operativo. Cada sección se etiqueta con una decoración (por ejemplo, .ntx86, .ntia64 o .nt) que especifica la versión del sistema operativo a la que se aplica. Para obtener más información sobre cómo crear este tipo de archivo INF, vea Creating INF Files for Multiple Platforms and Operating Systems.

En el ejemplo de código siguiente se muestra una sección defaultInstall típica.

[DefaultInstall.NTamd64]
OptionDesc = %MinispyServiceDesc%
CopyFiles = Minispy.DriverFiles, Minispy.UserFiles

Sección DefaultInstall.Services (obligatorio)

La sección DefaultInstall.Services contiene una directiva AddService que controla cómo y cuándo se cargan los servicios de un controlador determinado, como se muestra en el ejemplo de código siguiente.

[DefaultInstall.NTamd64.Services]
AddService = %MinispyServiceName%,,Minispy.Service

Sección ServiceInstall (obligatorio)

La sección ServiceInstall contiene información que se usa para cargar el servicio de controlador. En el controlador de ejemplo de MiniSpy, esta sección se denomina "Minispy.Service", como se muestra en el ejemplo de código siguiente. El nombre de la sección ServiceInstall debe aparecer en una directiva AddService de la sección DefaultInstall.Services .

[Minispy.Service]
DisplayName    = %MinispyServiceName%
Description    = %MinispyServiceDesc%
ServiceBinary  = %12%\minispy.sys
ServiceType    = 2 ;    SERVICE_FILE_SYSTEM_DRIVER
StartType      = 3 ;    SERVICE_DEMAND_START
ErrorControl   = 1 ;    SERVICE_ERROR_NORMAL%
LoadOrderGroup = "FSFilter Activity Monitor"
AddReg         = Minispy.AddRegistry
Dependencies   = FltMgr

La entrada ServiceType especifica el tipo de servicio. Los controladores de minifiltro deben especificar un valor de 2 (SERVICE_FILE_SYSTEM_DRIVER). Para obtener más información sobre la entrada ServiceType , vea Inf AddService Directive.

La entrada StartType especifica cuándo iniciar el servicio. En la tabla siguiente se enumeran los valores posibles para StartType y sus tipos de inicio correspondientes.

Valor Descripción
0x00000000 SERVICE_BOOT_START
0x00000001 SERVICE_SYSTEM_START
0x00000002 SERVICE_AUTO_START
0x00000003 SERVICE_DEMAND_START
0x00000004 SERVICE_DISABLED

Para obtener más información sobre estos tipos de inicio, vea "Tipos de inicio de controlador" en What Determine When a Driver Is Loaded (Qué determina cuándo se carga un controlador).

La entrada LoadOrderGroup proporciona al administrador de filtros información que necesita para garantizar la interoperabilidad entre los controladores de minifiltro y los controladores de filtro del sistema de archivos heredados. Debe especificar un valor LoadOrderGroup adecuado para el tipo de controlador de minifiltro que está desarrollando. Para elegir un grupo de pedidos de carga, consulte Grupos de pedidos de carga y Altitudes para controladores de minifiltro.

Tenga en cuenta que debe especificar un valor LoadOrderGroup , incluso si el tipo de inicio del controlador de minifiltro no está SERVICE_BOOT_START. De esta manera, los controladores de minifiltro son diferentes de los controladores de filtro del sistema de archivos heredados.

Nota

El valor startType del administrador de filtros es SERVICE_BOOT_START y su valor LoadOrderGroup es FSFilter Infrastructure. Estos valores garantizan que el administrador de filtros siempre se cargue antes de que se carguen los controladores de minifiltro.

Para obtener más información sobre cómo determinan las entradas StartType y LoadOrderGroup cuándo se carga el controlador, vea ¿Qué determina cuándo se carga un controlador?

En el caso de los controladores de minifiltro, a diferencia de los controladores de filtro del sistema de archivos heredados, los valores StartType y LoadOrderGroup no determinan dónde se asocia el controlador de minifiltro en la pila de instancias de minifiltro. Esta ubicación viene determinada por la altitud especificada para la instancia de minifiltro.

La entrada ErrorControl especifica la acción que se realizará si el servicio no se inicia durante el inicio del sistema. Los controladores de minifiltro deben especificar un valor de 1 (SERVICE_ERROR_NORMAL). Para obtener más información sobre la entrada ErrorControl , vea INF AddService Directive.

La directiva AddReg hace referencia a una o varias secciones AddRegistry definidas por el escritor INF que contienen información que se almacenará en el Registro para el servicio recién instalado. Los controladores de minifiltro usan secciones AddRegistry para definir instancias de controlador de minifiltro y especificar una instancia predeterminada.

La entrada Dependencias especifica los nombres de los servicios o grupos de pedidos de carga en los que depende el controlador. Todos los controladores de minifiltro deben especificar FltMgr, que es el nombre del servicio del administrador de filtros.

Sección AddRegistry (obligatorio)

La sección AddRegistry agrega claves y valores al Registro. Los controladores de minifiltro usan una sección AddRegistry para definir instancias de minifiltro y especificar una instancia predeterminada. Esta información se usa cada vez que el administrador de filtros crea una nueva instancia para el controlador de minifiltro.

En el controlador de ejemplo de MiniSpy, la siguiente sección AddRegistry , junto con las definiciones de token %strkey% de la sección Cadenas , define tres instancias, una de las cuales se denomina como la instancia predeterminada del controlador de ejemplo de MiniSpy.

[Minispy.AddRegistry]
HKR,%RegInstancesSubkeyName%,%RegDefaultInstanceValueName%,0x00000000,%DefaultInstance%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegAltitudeValueName%,0x00000000,%Instance1.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegFlagsValueName%,0x00010001,%Instance1.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegAltitudeValueName%,0x00000000,%Instance2.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegFlagsValueName%,0x00010001,%Instance2.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegAltitudeValueName%,0x00000000,%Instance3.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegFlagsValueName%,0x00010001,%Instance3.Flags%

Sección de cadenas (obligatorio)

La sección Cadenas define cada token %strkey% que se usa en el archivo INF.

Puede crear un único archivo INF internacional mediante la creación de cadenas específicas de la configuración regional adicionales. Secciones languageID del archivo INF. Para obtener más información sobre los archivos INF internacionales, vea Creating International INF Files.

En el ejemplo de código siguiente se muestra una sección de cadenas típica.

[Strings]
Msft               = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"
RegInstancesSubkeyName = "Instances"
RegDefaultInstanceValueName  = "DefaultInstance"
RegAltitudeValueName    = "Altitude"
RegFlagsValueName  = "Flags"

DefaultInstance    = "Minispy - Top Instance"
Instance1.Name     = "Minispy - Middle Instance"
Instance1.Altitude = "370000"
Instance1.Flags    = 0x1 ; Suppress automatic attachments
Instance2.Name     = "Minispy - Bottom Instance"
Instance2.Altitude = "365000"
Instance2.Flags    = 0x1 ; Suppress automatic attachments
Instance3.Name     = "Minispy - Top Instance"
Instance3.Altitude = "385000"
Instance3.Flags    = 0x1 ; Suppress automatic attachments

Secciones DefaultUninstall y DefaultUninstall.Services

Nota

Las secciones DefaultUninstall y DefaultUninstall.Services están prohibidas (con excepción) a partir de Windows 10 versión 1903.

En Windows 10 anteriores a la versión 1903, las secciones DefaultUninstall y DefaultUninstall.Services eran opcionales, pero se recomienda si el controlador podría desinstalarse:

  • DefaultUninstall contenía directivas DelFiles y DelReg para quitar archivos y entradas del Registro.
  • DefaultUninstall.Services contenía directivas DelService para quitar los servicios del controlador de minifiltro. La directiva DelService siempre especificó la marca SPSVCINST_STOPSERVICE (0x00000200) para detener el servicio antes de que se eliminara.

En el ejemplo siguiente se muestran las secciones DefaultUninstall y DefaultUninstall.Services típicas anteriores a Windows 10, versión 1903.

[DefaultUninstall.NTamd64]
DelFiles   = Minispy.DriverFiles, Minispy.UserFiles
DelReg     = Minispy.DelRegistry

[DefaultUninstall.NTamd64.Services]
DelService = Minispy,0x200