Creación de un archivo INF para un controlador de minifiltro
Los controladores de minifiltro del sistema de archivos necesitan un archivo INF para instalarse en el sistema operativo Windows. Puede encontrar varios archivos INF de muestra en los ejemplos de minifiltro que puede usar como punto de partida.
A partir de la versión 1903 de Windows 10, los requisitos INF cambiaron para los controladores primitivos, que incluyen los minifiltros del sistema de archivos. Consulte Creación de un nuevo controlador primitivo para obtener más información.
Secciones INF para un controlador de filtro de sistema de archivos
Un archivo INF para un controlador de filtro de sistema de archivos suele contener las siguientes secciones:
Sección | Notas |
---|---|
Versión | Obligatorio |
DestinationDirs | Obligatorio |
DefaultInstall | Obligatorio |
DefaultInstall.Services | Obligatorio |
ServiceInstall | Obligatorio |
AddRegistry | Obligatorio |
Cadenas | Obligatorio |
A partir de la versión 1903 de Windows 10, las secciones DefaultUninstall y DefaultUninstall.Services están prohibidas (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 sistemas Windows deben estar firmados para que Windows pueda cargarlos. Para obtener más información, consulte Firma de un controlador.
Sección Versión (obligatoria)
La sección Versión especifica una clase y un GUID que vienen determinados por el tipo de controlador del minifiltro, como se muestra en el siguiente ejemplo de código.
[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
La siguiente tabla muestra los valores que los controladores de minifiltros de sistemas de archivos deben especificar en la sección Versión.
Entrada | Valor |
---|---|
Signature | "$WINDOWS NT$" |
Clase | Ver Clases de controlador de filtro del sistema de archivos y GUID de clase. |
ClassGuid | Ver 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 | Para los controladores de minifiltros antivirus firmados, esta entrada contiene el nombre de un archivo de catálogo suministrado por WHQL. Todos los demás controladores de minifiltros deben dejar esta entrada en blanco. Para obtener más información, consulte la descripción de la entrada CatalogFile en la Sección Versión INF |
Sección DestinationDirs (obligatoria)
La sección DestinationDirs especifica los directorios en los que se copiarán los archivos del controlador del minifiltro y de la aplicación.
En esta sección y en la sección ServiceInstall, puede especificar directorios conocidos del sistema mediante valores numéricos definidos por el sistema. Para obtener una lista de estos valores, consulte la sección INF DestinationDirs. En el siguiente ejemplo de código, el valor 13 se refiere a una ubicación del almacén de controladores definida por el sistema operativo.
[DestinationDirs]
Minispy.DriverFiles = 13
Minispy.UserFiles = 13
Sección DefaultInstall (obligatoria)
En la sección DefaultInstall, una directiva CopyFiles copia los archivos del controlador del minifiltro y los archivos de la aplicación de usuario en los destinos especificados en la sección DestinationDirs.
Nota:
La directiva CopyFiles no debe referirse al archivo de catálogo o al propio archivo INF; estos archivos se copian automáticamente.
Puede crear un único archivo INF para instalar su controlador en varias versiones de los sistemas operativos Windows. Puede crear este tipo de archivo INF creando las secciones DefaultInstall y DefaultInstall.Services para cada versión del sistema operativo. Cada sección está etiquetada 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 la creación de este tipo de archivo INF, consulte Creación de archivos INF para múltiples plataformas y sistemas operativos.
El siguiente ejemplo de código muestra una sección DefaultInstall típica.
[DefaultInstall.NTamd64]
OptionDesc = %MinispyServiceDesc%
CopyFiles = Minispy.DriverFiles, Minispy.UserFiles
Sección DefaultInstall.Services (obligatoria)
La sección DefaultInstall.Services contiene una directiva AddService que controla cómo y cuándo se cargan los servicios de un controlador concreto, como se muestra en el siguiente ejemplo de código.
[DefaultInstall.NTamd64.Services]
AddService = %MinispyServiceName%,,Minispy.Service
Sección ServiceInstall (obligatoria)
La sección ServiceInstall contiene información utilizada para cargar el servicio del controlador. En el controlador de ejemplo de MiniSpy, esta sección se llama "Minispy.Service"; como se muestra en el siguiente ejemplo de código. El nombre de la sección ServiceInstall debe aparecer en una directiva AddService en la sección DefaultInstall.Services.
[Minispy.Service]
DisplayName = %MinispyServiceName%
Description = %MinispyServiceDesc%
ServiceBinary = %13%\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, consulte la Directiva INF AddService.
La entrada StartType especifica cuándo se debe iniciar el servicio. La siguiente tabla enumera los posibles valores de StartType y sus correspondientes tipos de inicio.
Valor | Descripción |
---|---|
0x00000000 | SERVICE_BOOT_START |
0x00000001 | SERVICE_SYSTEM_START |
0x00000002 | SERVICE_AUTO_START |
0x00000003 | SERVICE_DEMAND_START |
0x00000004 | SERVICE_DISABLED |
Para más información sobre estos tipos de inicio, consulte "Tipos de inicio de controladores" en Qué determina cuándo está cargado un controlador.
La entrada LoadOrderGroup proporciona al administrador de filtros la información que necesita para garantizar la interoperabilidad entre los controladores de minifiltros y los controladores de filtros de sistemas de archivos heredados. Debe especificar un valor LoadOrderGroup que sea apropiado para el tipo de controlador de minifiltro que está desarrollando. Para elegir un grupo de orden de carga, consulte Grupos de orden de carga y altitudes para controladores de minifiltro.
Debe especificar un valor LoadOrderGroup, incluso si el tipo de inicio de su controlador de minifiltro no es SERVICE_BOOT_START. De este modo, los controladores de minifiltro son diferentes de los controladores de filtro de 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 se cargue siempre antes que los controladores de minifiltros.
Para más información sobre cómo las entradas StartType y LoadOrderGroup determinan cuándo se carga el controlador, consulte Qué determina cuándo está cargado un controlador.
A diferencia de los controladores de filtro heredados, los valores StartType y LoadOrderGroup no determinan dónde se acopla el controlador del minifiltro en la pila de instancias del minifiltro. En su lugar, la altitud especificada para la instancia del minifiltro determina la ubicación.
La entrada ErrorControl especifica la acción a realizar si el servicio no se inicia durante el arranque del sistema. Los controladores de minifiltros deben especificar un valor de 1 (SERVICE_ERROR_NORMAL). Para obtener más información sobre la entrada ErrorControl, consulte la Directiva INF AddService.
La directiva AddReg hace referencia a una o varias secciones AddRegistry definidas por el escritor INF que contienen información que debe almacenarse en el registro para el servicio recién instalado. Los controladores de minifiltros usan secciones AddRegistry para definir instancias de controladores de minifiltros y para especificar una instancia predeterminada.
La entrada Dependencias especifica los nombres de los servicios o grupos de órdenes de carga de los que depende el controlador. Todos los controladores de minifiltros deben especificar FltMgr, que es el nombre del servicio del administrador de filtros.
Sección AddRegistry (obligatoria)
La sección AddRegistry añade claves y valores al registro. Los controladores de minifiltros usan una sección AddRegistry para definir instancias de minifiltros y especificar una instancia predeterminada. Esta información se utiliza cada vez que el administrador de filtros crea una nueva instancia para el controlador de minifiltros.
En el controlador de ejemplo MiniSpy, la siguiente sección AddRegistry, define tres instancias, una de las cuales es nombrada como la instancia por defecto del controlador de ejemplo MiniSpy.
Nota:
Los siguientes valores deben estar bajo la subclave Parámetros a partir de Windows 11 versión 24H2.
[Minispy.AddRegistry]
HKR,"Parameters","SupportedFeatures",0x00010001,0x3
HKR,"Parameters\Instances","DefaultInstance",0x00000000,%DefaultInstance%
HKR,"Parameters\Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude%
HKR,"Parameters\Instances\"%Instance1.Name%,"Flags",0x00010001,%Instance1.Flags%
HKR,"Parameters\Instances\"%Instance2.Name%,"Altitude",0x00000000,%Instance2.Altitude%
HKR,"Parameters\Instances\"%Instance2.Name%,"Flags",0x00010001,%Instance2.Flags%
HKR,"Parameters\Instances\"%Instance3.Name%,"Altitude",0x00000000,%Instance3.Altitude%
HKR,"Parameters\Instances\"%Instance3.Name%,"Flags",0x00010001,%Instance3.Flags%
Sección Cadenas (obligatoria)
La sección Cadenas define cada token %strkey% que se usa en el archivo INF.
Puede crear un único archivo INF internacional creando secciones Strings.LanguageID específicas para cada localización en el archivo INF. Para obtener más información sobre los archivos INF internacionales, consulte Creación de archivos INF internacionales.
El siguiente ejemplo de código muestra una sección Cadenas típica.
[Strings]
Msft = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"
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 antes de la versión 1903, las secciones DefaultUninstall y DefaultUninstall.Services eran opcionales pero recomendables si se podía desinstalar el controlador:
- DefaultUninstall contenía las directivas DelFiles y DelReg para eliminar archivos y entradas del registro.
- DefaultUninstall.Services contenía directivas DelService para eliminar los servicios del controlador del minifiltro. La directiva DelService siempre especificaba la marca SPSVCINST_STOPSERVICE (0x00000200) para detener el servicio antes de ser eliminado.
El siguiente ejemplo muestra las secciones DefaultUninstall y DefaultUninstall.Services típicas antes de Windows 10, versión 1903.
[DefaultUninstall.NTamd64]
DelFiles = Minispy.DriverFiles, Minispy.UserFiles
DelReg = Minispy.DelRegistry
[DefaultUninstall.NTamd64.Services]
DelService = Minispy,0x200