CopyFiles 指令可以執行以下任一功能:
讓一個檔案從來源媒體複製到預設的目的地目錄。
參考 INF 中一個或多個由 INF writer 定義的區段,每個區段指定一個從來源媒體複製到目的地的檔案清單。
[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 章節中引用的安裝介面區段
每個由 CopyFiles 指令引用的命名區段,都有一個或多個以下形式的條目:
[file-list-section]
destination-file-name[,[source-file-name][,[unused][,flag]]]
...
INF 寫入者定義的 檔案清單區段 可以有任意數量的條目,每個條目都位於獨立的行。
每個檔案清單區塊都可以有一個可選的、對應的 file-list-section.security 區塊,格式如下:
[file-list-section.security]
"security-descriptor-string"
Entries
目的地檔名
指定目的檔案名稱。 若未提供 原始碼檔名稱 ,此規範同時也是原始碼檔案的名稱。
原始碼檔名
指定來源檔案名稱。 若檔案複製操作的來源與目標檔名相同,則可省略 來源檔名 。
閑置
此條目已不再支援於 Windows 2000 及更新版本的 Windows。
旗標
這些可選的旗標,以十六進位符號或區段中的十進位值表示,可用來控制特定來源檔案是否被複製到目的地。 以下系統定義標誌可指定一個或多個(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)
如果因為目的檔被使用而無法複製來源檔案,請先重新命名目標檔案,再將來源檔案複製到目標檔案,並刪除重新命名的目標檔案。 如果目的檔案無法重新命名,請在下一次系統重啟時完成複製操作。 若無法刪除已命名的目標檔案,則在下次系統重啟時刪除該已命名的目標檔案。
安全描述符字串
指定一個安全描述符,應用於所有由指定 檔案清單區段複製的檔案。
安全描述符字串是帶有標記的字串,用以表示 DACL (D:) 安全元件。
有關安全描述符字串的資訊,請參見安全描述符定義語言(Windows)。
若未指定檔案列表區段(file-list-section.security),檔案會繼承檔案複製目錄的安全特性。
若指定了檔案列表區段(file-list-section.security),必須包含以下 ACE,以便安裝與升級裝置及系統服務包:
(A;;GA;;;SY) − 授予所有存取本地系統的權限。
(A;;GA;;;BA) − 授權所有內建管理員存取權限。
不要指定授權非特權使用者寫入權限的 ACE 字串。
欲了解更多如何指定安全描述符的資訊,請參閱 建立安全裝置安裝。
Remarks
Windows 只有在驅動程式安裝時,才會將驅動程式套件複製到目的地位置,前提是該檔案有 INF CopyFiles 指令。 當作業系統複製檔案時,會在必要時自動產生暫存檔名,並在下一次啟動時重新命名複製的原始檔案。
INF檔案寫入器也必須透過INF SourceDisksNames 區段和INF SourceDisksFiles 區段,明確指定每個來源檔案相對於原始媒體INF檔案的路徑,提供從來源媒體複製的檔案路徑規格。
複製操作的目的地由 INF DestinationDirs 區塊控制。 此區控制所有檔案複製操作的目的地,具體如下:
如果 CopyFiles 指令所參考的命名區段在同一 INF 的 DestinationDirs 區段中有對應的條目,該條目會明確指定將所有在命名區段中列出的檔案複製到的目標目錄。 若命名區段未列於 DestinationDirs 區塊中,Windows 會使用 INF 檔案中 DestinationDirs 區塊中的 DefaultDestDir 條目。
如果 CopyFiles 指令使用@檔名語法,Windows 會在 INF 檔案的 DestinationDirs 區段使用 DefaultDestDir 條目。
以下幾點適用於 INF CopyFiles 指令:
每個 檔案清單區段 名稱必須對 INF 檔案唯一,但同一 INF 檔案中其他地方的 CopyFiles、 DelFiles 或 RenFiles 指令也可以參考。 章節名稱必須遵循 INF 檔案一般語法規則中所述的一般規則。
在檔名或檔案清單區段中指定的@檔案名稱,必須是來源媒體檔案的精確名稱。 你不能用 %strkey% token 來指定檔案名稱。 欲了解更多關於 %strkey% 代幣的資訊,請參閱 INF 字串章節。
CopyFiles 指令不支援以系統定義的平台副檔名(.nt、.ntx86、.ntia64 或 .ntamd64)裝飾檔案清單區段名稱。
請勿使用 CopyFiles 指令來複製 INF 檔案。 欲了解更多資訊,請參閱 複製 INF 檔案。
從 Windows Vista 開始,以下幾點同樣適用於 INF CopyFiles 指令:
當驅動程式套件在 驅動程式儲存中被分階段時,只有當該檔案具有對應的 INF CopyFiles 指令時,該檔案才會從驅動程式套件來源複製到驅動程式儲存庫。
作為 Windows 升級的一部分,Windows 只有在驅動程式遷移過程中,若該檔案帶有 INF CopyFiles 指令,才會將驅動程式套件檔案複製到驅動程式儲存庫。
Examples
此範例展示了 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 Driver Kit (WDK) src 目錄中包含的裝置驅動範例的 INF 檔案。