INF CopyFiles 指令

CopyFiles 指令可以执行以下任一操作:

  • 导致单个文件从源媒体复制到默认目标目录。

  • 在 INF 中引用一个或多个 INF 编写器定义的部分,其中每个节指定要从源媒体复制到目标的文件列表。

[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]... 

可以在形式语法语句中显示的任何部分中指定 CopyFiles 指令。 还可以在以下任一 INF 节中指定此指令:

CopyFiles 指令引用的每个命名节都有一个或多个以下形式的条目:

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

INF 编写器定义的 file-list-section 可以包含任意数量的条目,每个条目位于单独的行上。

每个 file-list-section 都可以具有以下格式的可选关联 file-list-section.security 节:

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

destination-file-name
指定目标文件的名称。 如果未提供 source-file-name ,则此规范也是源文件的名称。

source-file-name
指定源文件的名称。 如果文件复制操作的源文件名和目标文件名相同,则可以省略 source-file-name

unused
Windows 2000 及更高版本的 Windows 不再支持此项。

flag
这些可选标志(以十六进制表示法表示或部分条目中的十进制值表示)可用于控制如何 (或是否将特定源文件) 复制到目标。 可以为以下系统定义标志指定一个或多个 (ORed) 值。 但是,其中一些标志是互斥的:

0x00000001 (COPYFLG_WARN_IF_SKIP)
如果用户选择不复制文件,则发送警告。 此标志和下一个标志互斥,两者与经过数字签名的 INF 文件无关。

0x00000002 (COPYFLG_NOSKIP)
不允许用户跳过复制文件。 如果 驱动程序包 已签名,则此标志是隐含的。

0x00000004 (COPYFLG_NOVERSIONCHECK)
忽略文件版本并写入目标目录中的现有文件。 此标志和接下来的两个标志是互斥的。 此标志与数字签名的 INF 文件无关。

0x00000008 (COPYFLG_FORCE_FILE_IN_USE)
强制文件使用行为:如果当前打开,则不要复制同名的现有文件。 请改为复制具有临时名称的给定源文件,以便在下次重启时重命名和使用该文件。

0x00000010 (COPYFLG_NO_OVERWRITE)
不要将目标目录中的现有文件替换为同名的源文件。 此标志不能与任何其他标志组合使用。

0x00000020 (COPYFLG_NO_VERSION_DIALOG)
如果现有文件比源文件新,请不要使用源文件写入目标目录中的文件。

较新的检查使用文件版本完成,如从VS_VERSIONINFO文件版本资源中提取的那样。 有关详细信息,请参阅 版本信息。 如果目标文件不是可执行文件或资源映像,或者该文件不包含文件版本信息,则设备安装假定目标文件较旧。

0x00000040 (COPYFLG_OVERWRITE_OLDER_ONLY)
仅当目标上的文件被较新版本取代时,才将源文件复制到目标目录。 此标志与数字签名的 INF 文件无关。 版本检查使用上述COPYFLG_NO_VERSION_DIALOG中所述的过程相同。

0x00000400 (COPYFLG_REPLACEONLY)
仅当文件已存在于目标目录中时,才将源文件复制到目标目录。

0x00000800 (COPYFLG_NODECOMP) (Windows 7 及更高版本)
将源文件复制到目标目录,如果源文件已压缩,则不解压缩源文件。

0x00001000 (COPYFLG_REPLACE_BOOT_FILE)
系统加载程序需要此文件。 系统将提示用户重启系统。

0x00002000 (COPYFLG_NOPRUNE)
请勿由于优化而删除此操作。

例如,Windows 可能会确定文件复制操作没有必要,因为该文件已存在。 但是,INF 的编写者知道该操作是必需的,并指示 Windows 重写其优化并执行文件操作。

如果文件也在 INF DelFiles 指令或 INF RenFiles 指令中指定,则此标志可用于确保复制文件。

0x00004000 (COPYFLG_IN_USE_RENAME)
如果由于正在使用目标文件而无法复制源文件,请重命名目标文件,然后将源文件复制到目标文件,然后删除重命名的目标文件。 如果无法重命名目标文件,请在下一次系统重启期间完成复制操作。 如果无法删除重命名的目标文件,请在下一次系统重启期间删除重命名的目标文件。

security-descriptor-string
指定要应用于由命名 file-list-section 复制的所有文件的安全描述符。 security-descriptor-string 是一个包含标记的字符串,用于指示 DACL (D:) 安全组件。

有关安全描述符字符串的信息,请参阅 安全描述符定义语言 (Windows)

如果未指定 file-list-section.security 节,文件将继承文件复制到的目录的安全特征。

如果指定了 file-list-section.security 节,则必须包括以下 ACE,以便安装和升级设备和系统 Service Pack:

  • (A;;Ga;;;SY) • 授予对本地系统的所有访问权限。

  • (A;;Ga;;;BA) • 向内置管理员授予所有访问权限。

不要指定向非特权用户授予写入访问权限的 ACE 字符串。

有关如何指定安全描述符的详细信息,请参阅 创建安全设备安装

注解

如果文件具有 INF CopyFiles 指令,则 Windows 仅在安装驱动程序过程中将驱动程序复制到其目标位置。 复制文件时,操作系统会在必要时自动生成临时文件名,并在下次启动操作系统时重命名复制的源文件。

INF 文件编写器还必须使用 INF SourceDisksNames 节和 INF SourceDisksFiles 部分为从源媒体复制的文件提供路径规范,以显式指定每个源文件相对于源媒体中的 INF 文件的路径。

复制操作的目标由 INF DestinationDirs 部分控制。 本部分控制所有文件复制操作的目标,如下所示:

  • 如果 CopyFiles 指令引用的命名节在同一 INF 的 DestinationDirs 节中具有相应的条目,则该条目显式指定目标目录,该目标目录将在其中复制命名节中列出的所有文件。 如果已命名节未在 DestinationDirs 部分列出,则 Windows 将使用 INF 文件的 DestinationDirs 节中的 DefaultDestDir 条目。

  • 如果 CopyFiles 指令使用@文件名语法,则 Windows 将使用 INF 文件的 DestinationDirs 节中的 DefaultDestDir 条目。

以下几点适用于 INF CopyFiles 指令:

  • 每个 file-list-section 名称对于 INF 文件必须是唯一的,但它可由同一 INF 文件中其他位置的 CopyFilesDelFilesRenFiles 指令引用。 节名称必须遵循 INF 文件的一般语法规则中所述的一般规则

  • 文件名file-list-section 条目中指定的@文件名必须是源媒体上文件的确切名称。 不能使用 %strkey% 令牌来指定文件名。 有关 %strkey% 令牌的详细信息,请参阅 INF 字符串部分

  • CopyFiles 指令不支持使用系统定义的平台扩展名 (.nt、.ntx86、.ntia64.ntamd64) 修饰文件列表节名称

  • 请勿使用 CopyFiles 指令来复制 INF 文件。 有关详细信息,请参阅 复制 INF 文件

从 Windows Vista 开始,以下几点也适用于 INF CopyFiles 指令:

  • 在驱动程序存储中暂存 驱动程序包时,仅当文件具有相应的 INF CopyFiles 指令时,文件才会从驱动程序包源复制到驱动程序存储。

  • 作为 Windows 升级的一部分,如果文件具有 INF CopyFiles 指令,则 Windows 仅在驱动程序迁移过程中将驱动程序包文件复制到驱动程序存储

示例

此示例演示 SourceDisksNamesSourceDisksFilesDestinationDirs 部分如何指定在处理简单设备驱动程序 INF 时发生的复制文件操作的路径。

[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
; ...

有关如何使用 INF CopyFiles 指令的其他示例,请参阅包含在 Windows 驱动程序工具包 的 src 目录中的设备驱动程序示例的 INF 文件 (WDK) 。

另请参阅

AddInterface

ClassInstall32

DDInstall

DDInstall。接口

DelFiles

DestinationDirs

InterfaceInstall32

RenFiles

SourceDisksFiles

SourceDisksNames

字符串

版本