Compartir a través de


Creación de un archivo INF para un controlador del sistema de archivos

En este artículo se describe cómo crear un archivo INF para un controlador del sistema de archivos.

Para obtener información sobre cómo instalar y desinstalar un controlador del sistema de archivos mediante un archivo INF, siga las instrucciones que se proporcionan en los siguientes artículos para los controladores de filtro del sistema de archivos heredados:

Acerca de los archivos INF del sistema de archivos

El programa de instalación de Windows y los servicios del instalador de dispositivos, conocidos colectivamente como SetupAPI, proporcionan las funciones que controlan la instalación de Windows y la instalación del controlador. Los archivos INF controlan el proceso de instalación. Para obtener más información sobre los archivos INF, vea Creación de un archivo INF y Secciones y directivas de archivos INF.

Un archivo INF del controlador del sistema de archivos proporciona instrucciones que setupAPI usa para instalarlo. El archivo INF especifica los archivos que deben estar presentes para que el controlador se ejecute y los directorios de origen y destino de los archivos del controlador. Un archivo INF también contiene información de configuración del controlador que SetupAPI almacena en el registro, como el tipo de inicio del controlador y el grupo de pedidos de carga.

Puede crear un único archivo INF para instalar el controlador en varias versiones del sistema operativo Windows. Para obtener más información sobre cómo crear un archivo INF de este tipo, vea Crear archivos INF para varias plataformas y sistemas operativos y Crear archivos INF internacionales.

A partir de las versiones de 64 bits de Windows Vista, todos los componentes en modo kernel deben estar firmados para cargar y ejecutar. Este requisito incluye controladores que no son PnP (Plug and Play), como controladores del sistema de archivos (sistema de archivos, filtro heredado y controladores de minifiltro). Para obtener información general sobre la firma de controladores, consulte Firma de controladores.

Para estas versiones del sistema operativo Windows, la siguiente información es relevante para los controladores del sistema de archivos.

  • Los archivos INF para controladores no PnP, incluidos los del sistema de archivos, no necesitan contener secciones [Fabricante] o [Modelos].

  • La herramienta de línea de comandos SignTool , ubicada en el directorio \bin\xx.x.xxxxx.x\SelfSign del directorio de instalación de WDK, se puede usar para "insertar signo" directamente en un archivo ejecutable SYS del controlador. Por motivos de rendimiento, los controladores de arranque deben contener una firma incrustada.

  • Dado un archivo INF, se puede usar la herramienta de línea de comandos Inf2Cat para crear un archivo de catálogo (.cat) para un paquete de controladores.

  • Con privilegios de administrador, todavía se puede instalar un controlador sin firmar en sistemas basados en x64 a partir de Windows Vista. Sin embargo, el controlador no se cargará (y, por tanto, no se ejecutará) porque no está firmado.

  • Para obtener información detallada sobre el proceso de firma de controladores, incluido el proceso de firma de controladores para versiones de 64 bits de Windows Vista y versiones posteriores, consulte el documento de Word del tutorial Kernel-Mode Code Signing Walkthrough.

  • Todos los componentes del modo kernel, incluidas las herramientas de desarrollo en modo kernel personalizadas, deben estar firmados. Para obtener más información, vea Introducción a Test-Signing).

Los archivos INF no se pueden usar para leer información del Registro ni para iniciar una aplicación en modo de usuario.

Secciones de un archivo INF del controlador del sistema de archivos

Para construir su propio archivo INF del controlador del sistema de archivos, use la siguiente información como guía. Puede usar la herramienta InfVerif para comprobar la sintaxis del archivo INF.

Normalmente, un archivo INF para un controlador del sistema de archivos contiene las secciones siguientes.

Sección de versión (requisito obligatorio)

La sección Versión especifica la información de la versión del controlador, como se muestra en el ejemplo siguiente.

[Version]
Signature   = "$WINDOWS NT$"
Provider    = %Msft%
DriverVer   = 08/28/2000,1.0.0.1
CatalogFile =

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

Entrada Importancia
firma de $WINDOWS NT$
proveedor En su propio archivo INF, debe especificar un proveedor distinto de Microsoft.
DriverVer Consulte la directiva INF DriverVer.
CatalogFile Consulte Uso de Inf2Cat para crear un archivo de catálogo

La sección DestinationDirs especifica los directorios en los que se van a copiar los archivos del controlador del sistema de archivos.

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 Inf DestinationDirs Section. En el ejemplo siguiente, el valor "12" hace referencia al directorio Controladores (%windir%\system32\drivers).

[DestinationDirs]
DefaultDestDir = 12
ExampleFileSystem.DriverFiles = 12

Sección SourceDisksNames (obligatorio)

La sección SourceDisksNames especifica el medio de distribución que se va a usar.

En el ejemplo siguiente, la sección SourceDisksNames enumera un único medio de distribución para el controlador del sistema de archivos. El identificador único del medio es 1. El nombre del medio se especifica mediante el token de %Disk1%, que se define en la sección Cadenas del archivo INF.

[SourceDisksNames]
1 = %Disk1%

Sección SourceDisksFiles (obligatorio)

La sección SourceDisksFiles especifica la ubicación y los nombres de los archivos que se van a copiar.

En el ejemplo siguiente, la sección SourceDisksFiles enumera el archivo que se va a copiar para el controlador del sistema de archivos y especifica que los archivos se pueden encontrar en el medio cuyo identificador único es 1 (este identificador se define en la sección SourceDisksNames del archivo INF).

[SourceDisksFiles]
examplefilesystem.sys = 1

Sección DefaultInstall (obligatorio)

En la sección DefaultInstall, una directiva CopyFiles copia los archivos del controlador del sistema de archivos al destino especificado en la sección DestinationDirs.

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 del sistema operativo Windows. Este tipo de archivo INF se crea mediante la creación de varias secciones DefaultInstall, DefaultInstall.Services, DefaultUninstall y DefaultUninstall.Services 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 Crear archivos INF para varias plataformas y sistemas operativos.

En el ejemplo siguiente, la directiva CopyFiles copia los archivos que aparecen en la sección ExampleFileSystem.DriverFiles del archivo INF.

[DefaultInstall]
OptionDesc = %ServiceDesc%
CopyFiles = ExampleFileSystem.DriverFiles

[ExampleFileSystem.DriverFiles]
examplefilesystem.sys

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.

En el ejemplo de código siguiente, la directiva AddService agrega el servicio del sistema de archivos al sistema operativo. El token de %ServiceName% contiene la cadena de nombre de servicio, que se define en la sección Cadenas del archivo INF. ExampleFileSystem.Service es el nombre de la sección ServiceInstall del controlador del sistema de archivos.

[DefaultInstall.Services]
AddService = %ServiceName%,,ExampleFileSystem.Service

Sección ServiceInstall (obligatorio)

La sección ServiceInstall agrega subclaves o nombres de valor al Registro y establece valores. El nombre de la sección ServiceInstall debe aparecer en una directiva AddService en la sección DefaultInstall.Services.

En el ejemplo siguiente se muestra la sección ServiceInstall para el controlador del sistema de archivos.

[ExampleFileSystem.Service]
DisplayName    = %ServiceName%
Description    = %ServiceDesc%
ServiceBinary  = %12%\examplefilesystem.sys
ServiceType    = 2 ;    SERVICE_FILE_SYSTEM_DRIVER
StartType      = 1 ;    SERVICE_SYSTEM_START
ErrorControl   = 1 ;    SERVICE_ERROR_NORMAL
LoadOrderGroup = "File System"
AddReg         = ExampleFileSystem.AddRegistry

La entrada DisplayName especifica el nombre del servicio. En el ejemplo anterior, la cadena de nombre de servicio se especifica mediante el token de %ServiceName%, que se define en la sección Cadenas del archivo INF.

La entrada Descripción especifica una cadena que describe el servicio. En el ejemplo anterior, el token de %ServiceDesc% especifica esta cadena, que se define en la sección Cadenas del archivo INF.

La entrada ServiceBinary especifica la ruta de acceso al archivo ejecutable del servicio. En el ejemplo anterior, el valor 12 hace referencia al directorio Controladores (%windir%\system32\drivers).

La entrada ServiceType especifica el tipo de servicio. En la tabla siguiente se enumeran los valores posibles para ServiceType y sus tipos de servicio correspondientes.

Importancia Descripción
0x00000001 SERVICE_KERNEL_DRIVER (Servicio de controlador del dispositivo)
0x00000002 SERVICE_FILE_SYSTEM_DRIVER (servicio de controlador de sistema de archivos o controlador de filtro del sistema de archivos)
0x00000010 SERVICE_WIN32_OWN_PROCESS (servicio Microsoft Win32 que se ejecuta en su propio proceso)
0x00000020 SERVICE_WIN32_SHARE_PROCESS (servicio Win32 que comparte un proceso)

La entrada ServiceType siempre debe establecerse en SERVICE_FILE_SYSTEM_DRIVER para un controlador del sistema de archivos.

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.

Importancia Descripción
0x00000000 INICIO_DE_SERVICIO_DE_ARRANQUE
0x00000001 INICIO_DEL_SISTEMA_DE_SERVICIO
0x00000002 SERVICIO_INICIO_AUTOMÁTICO
0x00000003 INICIO_DEMANDA_DE_SERVICIO
0x00000004 SERVICIO_DESACTIVADO

Para obtener descripciones detalladas de estos tipos de inicio para determinar cuál es la adecuada para el controlador del sistema de archivos, consulte ¿Qué determina cuándo se carga un controlador?

A partir de sistemas Windows Vista basados en x64, el archivo de imagen binaria de un controlador de arranque (un controlador que tiene un tipo de inicio de SERVICE_BOOT_START) debe contener una firma incrustada. Este requisito garantiza un rendimiento óptimo de arranque del sistema. Para obtener más información, consulte el documento de Word Guía de firma de códigoKernel-Mode.

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

La entrada ErrorControl especifica la acción que se va a realizar si el servicio no se inicia durante el inicio del sistema. En la tabla siguiente se enumeran los posibles valores de ErrorControl y sus valores de control de error correspondientes.

Importancia Descripción
0x00000000 SERVICE_ERROR_IGNORE (registre el error y continúe el inicio del sistema).
0x00000001 SERVICE_ERROR_NORMAL (registre el error, muestre un mensaje al usuario y continúe el inicio del sistema).
0x00000002 SERVICE_ERROR_SEVERE (cambie al conjunto de controles LastKnownGood del registro y continúe el inicio del sistema).
0x00000003 SERVICE_ERROR_CRITICAL (si el inicio del sistema no usa el conjunto de controles LastKnownGood del Registro, cambie a LastKnownGood e inténtelo de nuevo. Si el inicio sigue fallando, ejecute una rutina de comprobación de errores. Solo los controladores necesarios para que el sistema se inicie deben especificar este valor en sus archivos INF).

La entrada LoadOrderGroup siempre debe establecerse en "Sistema de archivos" para un controlador del sistema de archivos. Esta configuración es diferente de lo que se especifica para un controlador de filtro del sistema de archivos o un controlador de minifiltro del sistema de archivos donde la entrada LoadOrderGroup se establece en uno de los grupos de orden de carga del filtro del sistema de archivos. Para obtener más información sobre los grupos de orden de carga, consulte Grupos de orden de carga para controladores de filtro del sistema de archivos y Grupos de orden de carga y altitudes para controladores de minifiltro.

La directiva AddReg hace referencia a una o varias secciones addRegistry definidas por el escritor INF que contienen cualquier información que se va a almacenar en el Registro para el servicio recién instalado.

Si el archivo INF también se usará para actualizar el controlador después de la instalación inicial, las entradas contenidas en la sección AddRegistry deben especificar la marca 0x00000002 (FLG_ADDREG_NOCLOBBER). Al especificar esta marca se conservan las entradas del Registro en HKLM\CurrentControlSet\Services cuando se instalan los archivos posteriores. Por ejemplo:

[ExampleFileSystem.AddRegistry]
HKR,Parameters,ExampleParameter,0x00010003,1

Sección de desinstalación por defecto (opcional)

La sección DefaultUninstall es opcional, pero se recomienda si se puede desinstalar el controlador. Contiene directivas DelFiles y DelReg para quitar archivos y entradas del Registro.

En el ejemplo siguiente, la directiva DelFiles quita los archivos que aparecen en la sección ExampleFileSystem.DriverFiles del archivo INF.

[DefaultUninstall]
DelFiles   = ExampleFileSystem.DriverFiles
DelReg     = ExampleFileSystem.DelRegistry

La directiva DelReg hace referencia a una o varias secciones del DelRegistry definidas por el escritor INF que contienen cualquier información que se va a quitar del Registro para el servicio que se va a desinstalar.

Sección de DefaultUninstall.Services (opcional)

La sección DefaultUninstall.Services es opcional, pero se recomienda si se puede desinstalar el controlador. Contiene directivas DelService para quitar los servicios del controlador del sistema de archivos.

En el ejemplo siguiente, la directiva DelService quita el servicio del controlador del sistema de archivos del sistema operativo.

[DefaultUninstall.Services]
DelService = %ServiceName%,0x200

La directiva DelService siempre debe especificar la marca 0x200 (SPSVCINST_STOPSERVICE) para detener el servicio antes de que se elimine el servicio.

Hay ciertas clases de productos del sistema de archivos que no se pueden desinstalar completamente. En esta situación, solo puede desinstalar los componentes del producto que se pueden desinstalar y dejar los componentes que no se pueden desinstalar. Un ejemplo de este producto es la característica Microsoft Single Instance Store (SIS).

Sección de cuerdas (obligatoria)

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

Por ejemplo, el controlador del sistema de archivos define las siguientes cadenas en su archivo INF.

[Strings]
Msft        = "Microsoft Corporation"
ServiceDesc = "Example File System Driver"
ServiceName = "ExampleFileSystem"
ParameterPath = "SYSTEM\CurrentControlSet\Services\ExampleFileSystem\Parameters"
Disk1       = "Example File System Driver CD"

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