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 节中指定此指令:
由 DDInstall 中的 INF AddInterface 指令引用的 add-interface-section。“接口”部分。
INF InterfaceInstall32 节中引用的 install-interface-section
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 文件中其他位置的 CopyFiles、 DelFiles 或 RenFiles 指令引用。 节名称必须遵循 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 仅在驱动程序迁移过程中将驱动程序包文件复制到驱动程序存储。
示例
此示例演示 SourceDisksNames、 SourceDisksFiles 和 DestinationDirs 部分如何指定在处理简单设备驱动程序 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) 。