Директива INF CopyFiles
Директива CopyFiles может выполнять одно из следующих действий:
Выполните копирование одного файла с исходного носителя в каталог назначения по умолчанию.
Сослаться на один или несколько определенных inf-writer разделов в 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:
Раздел интерфейса надстройки, на который ссылается директива INF AddInterface в DDInstall. Раздел "Интерфейсы".
Раздел интерфейса установки, на который ссылается раздел Интерфейса INFInstall32
Каждый именованный раздел, на который ссылается директива CopyFiles , содержит одну или несколько записей следующего вида:
[file-list-section]
destination-file-name[,[source-file-name][,[unused][,flag]]]
...
Раздел списка файлов, определяемый inf-writer, может содержать любое количество записей, каждая из которых размещена в отдельной строке.
Каждый раздел file-list-section может иметь необязательный связанный раздел file-list-section.security следующей формы:
[file-list-section.security]
"security-descriptor-string"
Записи
destination-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:
(A;; GA;;; SY) — предоставляет весь доступ к локальной системе.
(A;; GA;;; BA) — предоставляет полный доступ встроенным администраторам.
Не указывайте строки ACE, которые предоставляют доступ на запись непривилегированных пользователей.
Дополнительные сведения о том, как указать дескрипторы безопасности, см. в разделе Создание безопасных установок устройств.
Комментарии
Windows копирует пакет драйвера в место назначения в рамках установки драйвера, только если файл имеет директиву INF CopyFiles . При копировании файлов операционная система автоматически создает временные имена файлов, когда это необходимо, и переименовывать скопированные исходные файлы при следующем запуске операционной системы.
Модуль записи INF-файла также должен предоставить спецификации пути для файлов, копируемых с исходного носителя, с помощью разделов INF SourceDisksNames и INF SourceDisksFiles , чтобы явно указать путь к каждому исходному файлу относительно INF-файла на исходном носителе.
Назначение операций копирования управляется разделом INF DestinationDirs. Этот раздел управляет назначением для всех операций копирования файлов следующим образом:
Если именованный раздел, на который ссылается директива CopyFiles , имеет соответствующую запись в разделе DestinationDirs того же inf, эта запись явно указывает целевой каталог, в который копируются все файлы, перечисленные в именованном разделе. Если именованный раздел отсутствует в разделе DestinationDirs , Windows использует запись DefaultDestDir в разделе DestinationDirs INF-файла.
Если директива CopyFiles использует @ синтаксис имени файла, Windows использует запись DefaultDestDir в разделе DestinationDirs INF-файла.
Следующие моменты относятся к директиве INF CopyFiles :
Каждое имя раздела списка файлов должно быть уникальным для INF-файла, но на него могут ссылаться директивы CopyFiles, DelFiles или RenFiles в другом месте того же INF-файла. Имя раздела должно соответствовать общим правилам, описанным в разделе Общие правила синтаксиса для ФАЙЛОВ INF.
Имена файлов, указанные в @ записях filename или file-list-section, должны быть точным именем файла на исходном носителе. Маркер %strkey% нельзя использовать для указания имени файла. Дополнительные сведения о токенах %strkey% см. в разделе Inf Strings Section.
Директива CopyFiles не поддерживает декорирование имени раздела списка файлов с помощью системного расширения платформы (.nt, .ntx86, .ntia64 или .ntamd64).
Не используйте директивы CopyFiles для копирования INF-файлов. Дополнительные сведения см. в разделе Копирование ФАЙЛОВ INF.
Начиная с Windows Vista, следующие моменты также относятся к директиве INF CopyFiles :
При промежуточной подготовке пакета драйвера в хранилище драйверов файл копируется из источника пакета драйвера в хранилище драйверов, только если файл имеет соответствующую директиву INF CopyFiles .
В рамках обновления Windows Windows копирует файл пакета драйвера в хранилище драйверов только в рамках миграции драйвера, если файл имеет директиву INF CopyFiles .
Примеры
В этом примере показано, как в разделах 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 см. в inf-файлах для примеров драйверов устройств, включенных в каталог src комплекта драйверов Windows (WDK).