Directiva INF CopyFiles

Una directiva CopyFiles puede hacer cualquiera de las siguientes acciones:

  • Hacer que se copie un único archivo del medio de origen en el directorio de destino predeterminado.

  • Haga referencia a una o varias secciones definidas por inf-writer en el INF que especifican una lista de archivos que se van a copiar del medio de origen al destino.

[DDInstall] | 
[DDInstall.CoInstallers] | 
[ClassInstall32] | 
[ClassInstall32.ntx86] | 
[ClassInstall32.ntia64] | (Windows XP and later versions of Windows)
[ClassInstall32.ntamd64] | (Windows XP and later versions of Windows)
[ClassInstall32.ntarm] | (Windows 8 and later versions of Windows)
[ClassInstall32.ntarm64] (Windows 10 version 1709 and later versions of Windows)
  
CopyFiles=@filename | file-list-section[, file-list-section]... 

Se puede especificar una directiva CopyFiles dentro de cualquiera de las secciones que se muestran en la instrucción de sintaxis formal. Esta directiva también se puede especificar en cualquiera de las secciones INF siguientes:

Cada sección con nombre a la que hace referencia una directiva CopyFiles tiene una o varias entradas de la forma siguiente:

[file-list-section]
destination-file-name[,[source-file-name][,[unused][,flag]]]
...

Una sección inf-writer-defined file-list-section puede tener cualquier número de entradas, cada una en una línea independiente.

Cada sección file-list-section puede tener una sección opcional asociada file-list-section.security del siguiente formulario:

[file-list-section.security]
"security-descriptor-string"

Entradas

destination-file-name
Especifica el nombre del archivo de destino. Si no se proporciona ningún nombre de archivo de origen, esta especificación también es el nombre del archivo de origen.

source-file-name
Especifica el nombre del archivo de origen. Si los nombres de archivo de origen y destino de la operación de copia de archivos son los mismos, se puede omitir source-file-name .

unused
Esta entrada ya no se admite en Windows 2000 y versiones posteriores de Windows.

flag
Estas marcas opcionales, expresadas en notación hexadecimal o como un valor decimal en una entrada de sección, se pueden usar para controlar cómo (o si) se copia un archivo de origen determinado en el destino. Se pueden especificar uno o varios valores (ORed) para las siguientes marcas definidas por el sistema. Sin embargo, algunas de estas marcas son mutuamente excluyentes:

0x00000001 (COPYFLG_WARN_IF_SKIP)
Envíe una advertencia si el usuario decide no copiar un archivo. Esta marca y la siguiente son mutuamente excluyentes y ambas son irrelevantes para los archivos INF firmados digitalmente.

0x00000002 (COPYFLG_NOSKIP)
No permita al usuario omitir la copia de un archivo. Esta marca está implícita si el paquete de controladores está firmado.

0x00000004 (COPYFLG_NOVERSIONCHECK)
Omita las versiones de archivo y escriba en los archivos existentes en el directorio de destino. Esta marca y las dos siguientes son mutuamente excluyentes. Esta marca es irrelevante para los archivos INF firmados digitalmente.

0x00000008 (COPYFLG_FORCE_FILE_IN_USE)
Forzar el comportamiento de archivo en uso: no copie en un archivo existente del mismo nombre si está abierto actualmente. En su lugar, copie el archivo de origen especificado con un nombre temporal para que se pueda cambiar el nombre y usarlo cuando se produzca el siguiente reinicio.

0x00000010 (COPYFLG_NO_OVERWRITE)
No reemplace un archivo existente en el directorio de destino por un archivo de origen con el mismo nombre. Esta marca no se puede combinar con ninguna otra marca.

0x00000020 (COPYFLG_NO_VERSION_DIALOG)
No escriba en un archivo en el directorio de destino con el archivo de origen si el archivo existente es más reciente que el archivo de origen.

La comprobación más reciente se realiza mediante la versión del archivo, tal como se extrae del recurso de versión del archivo VS_VERSIONINFO. Para obtener más información, consulta Información de versión. Si el archivo de destino no es una imagen ejecutable o de recurso, o el archivo no contiene información de versión de archivo, la instalación del dispositivo supone que el archivo de destino es anterior.

0x00000040 (COPYFLG_OVERWRITE_OLDER_ONLY)
Copie el archivo de origen en el directorio de destino solo si el archivo del destino se sustituye por una versión más reciente. Esta marca es irrelevante para los archivos INF firmados digitalmente. La comprobación de versiones usa el mismo procedimiento que se describió anteriormente en COPYFLG_NO_VERSION_DIALOG.

0x00000400 (COPYFLG_REPLACEONLY)
Copie el archivo de origen en el directorio de destino solo si el archivo ya está presente en el directorio de destino.

0x00000800 (COPYFLG_NODECOMP) (Windows 7 y versiones posteriores)
Copie el archivo de origen en el directorio de destino sin descomprimir el archivo de origen si está comprimido.

0x00001000 (COPYFLG_REPLACE_BOOT_FILE)
El cargador del sistema requiere este archivo. El sistema pedirá al usuario que reinicie el sistema.

0x00002000 (COPYFLG_NOPRUNE)
No elimine esta operación como resultado de la optimización.

Por ejemplo, Windows podría determinar que la operación de copia de archivos no es necesaria porque el archivo ya existe. Sin embargo, el escritor del INF sabe que la operación es necesaria y dirige a Windows para invalidar su optimización y realizar la operación de archivo.

Esta marca se puede usar para asegurarse de que los archivos se copian si también se especifican en una directiva Inf DelFiles o en una directiva RenFiles inf.

0x00004000 (COPYFLG_IN_USE_RENAME)
Si no se puede copiar el archivo de origen porque se usa el archivo de destino, cambie el nombre del archivo de destino, copie el archivo de origen en el archivo de destino y elimine el archivo de destino cuyo nombre ha cambiado. Si no se puede cambiar el nombre del archivo de destino, complete la operación de copia durante el siguiente reinicio del sistema. Si no se puede eliminar el archivo de destino cuyo nombre se ha cambiado, elimine el archivo de destino cuyo nombre ha cambiado durante el siguiente reinicio del sistema.

security-descriptor-string
Especifica un descriptor de seguridad que se aplicará a todos los archivos copiados por la sección file-list-section con nombre. La cadena security-descriptor-string es una cadena con tokens para indicar el componente de seguridad DACL (D:).

Para obtener información sobre las cadenas de descriptores de seguridad, vea Security Descriptor Definition Language (Windows).

Si no se especifica una sección file-list-section.security, los archivos heredan las características de seguridad del directorio en el que se copian los archivos.

Si se especifica una sección file-list-section.security, se deben incluir las siguientes ACE para que se puedan producir instalaciones y actualizaciones de dispositivos y service packs del sistema:

  • (A;; GA;;; SY) – Concede todo el acceso al sistema local.

  • (A;; GA;;; BA) – Concede acceso a todos los administradores integrados.

No especifique cadenas ACE que concedan acceso de escritura a usuarios sin privilegios.

Para obtener más información sobre cómo especificar descriptores de seguridad, consulte Creación de instalaciones de dispositivos seguros.

Comentarios

Windows solo copia un paquete de controladores en su ubicación de destino como parte de una instalación de controladores si el archivo tiene una directiva INF CopyFiles . Cuando copia archivos, el sistema operativo genera automáticamente nombres de archivo temporales, cuando sea necesario, y cambia el nombre de los archivos de origen copiados la próxima vez que se inicie el sistema operativo.

El escritor de archivos INF también debe proporcionar especificaciones de ruta de acceso para los archivos que se copian de los medios de origen mediante la sección INF SourceDisksNames y la sección INF SourceDisksFiles para especificar explícitamente la ruta de acceso de cada archivo de origen con respecto al archivo INF en el medio de origen.

El destino de las operaciones de copia se controla mediante la sección Inf DestinationDirs. En esta sección se controla el destino de todas las operaciones de copia de archivos, como se indica a continuación:

  • Si una sección con nombre a la que hace referencia una directiva CopyFiles tiene una entrada correspondiente en la sección DestinationDirs del mismo INF, esa entrada especifica explícitamente el directorio de destino en el que se copian todos los archivos que aparecen en la sección con nombre. Si la sección con nombre no aparece en la sección DestinationDirs , Windows usa la entrada DefaultDestDir en la sección DestinationDirs del archivo INF.

  • Si una directiva CopyFiles usa la @ sintaxis de nombre de archivo, Windows usa la entrada DefaultDestDir en la sección DestinationDirs del archivo INF.

Los siguientes puntos se aplican a la directiva INF CopyFiles :

  • Cada nombre de sección de lista de archivos debe ser único para el archivo INF, pero se puede hacer referencia a él mediante directivas CopyFiles, DelFiles o RenFiles en otra parte del mismo archivo INF. El nombre de la sección debe seguir las reglas generales que se describen en Reglas de sintaxis general para archivos INF.

  • Los nombres de archivo que se especifican en las @ entradas nombre de archivo o file-list-section deben ser el nombre exacto de un archivo en el medio de origen. No puede usar un token %strkey% para especificar el nombre de archivo. Para obtener más información sobre %strkey% tokens, vea sección Cadenas INF.

  • La directiva CopyFiles no admite la decoración de un nombre de sección file-list-section con una extensión de plataforma definida por el sistema (.nt, .ntx86, .ntia64 o .ntamd64).

  • No use directivas CopyFiles para copiar archivos INF. Para obtener más información, vea Copiar archivos INF.

A partir de Windows Vista, los siguientes puntos también se aplican a la directiva INF CopyFiles :

  • Cuando un paquete de controladores se almacena provisionalmente en el almacén de controladores, un archivo solo se copia del origen del paquete de controladores en el almacén de controladores si el archivo tiene una directiva CopyFiles inf correspondiente.

  • Como parte de una actualización de Windows, Windows solo copia un archivo de paquete de controladores en el almacén de controladores como parte de una migración de controladores si el archivo tiene una directiva INF CopyFiles .

Ejemplos

En este ejemplo se muestra cómo las secciones SourceDisksNames, SourceDisksFiles y DestinationDirs especifican las rutas de acceso para las operaciones de archivo de copia que se producen en el procesamiento de un SIMPLE INF del controlador de dispositivo.

[SourceDisksNames]
1 = %Floppy_Description%,,,\WinNT

[SourceDisksFiles.x86]
aha154x.sys = 2,\x86 ; on distribution disk 2, in subdir \WinNT\x86

[DestinationDirs]
DefaultDestDir = 13

; ... Manufacturer and Models sections omitted here

[AHA154X.NTx86]
CopyFiles=@AHA154x.SYS 
; ... some other directives and sections omitted here
; ...

Para obtener ejemplos adicionales de cómo usar la directiva COPYFiles de INF, consulta los archivos INF para los ejemplos de controladores de dispositivo que se incluyen en el directorio src del Kit de controladores de Windows (WDK).

Consulte también

AddInterface

ClassInstall32

DDInstall

DDInstall. Interfaces

DelFiles

DestinationDirs

InterfaceInstall32

RenFiles

SourceDisksFiles

SourceDisksNames

Cadenas

Versión