SetupCopyOEMInfA 函式 (setupapi.h)
[此函式可用於需求一節所指出的作業系統。 後續版本可能會變更或無法使用。 安裝程式API 不應該再用於安裝應用程式。 請改用 Windows Installer 來開發應用程式安裝程式。 SetupAPI 會繼續用於安裝設備驅動器。]
SetupCopyOEMInf 函式會將指定的 .inf 檔案複製到 %windir%/Inf 目錄。
此函式的呼叫端必須具有系統管理許可權,否則函式會失敗。
語法
WINSETUPAPI BOOL SetupCopyOEMInfA(
[in] PCSTR SourceInfFileName,
[in] PCSTR OEMSourceMediaLocation,
[in] DWORD OEMSourceMediaType,
[in] DWORD CopyStyle,
[out, optional] PSTR DestinationInfFileName,
[in] DWORD DestinationInfFileNameSize,
[out, optional] PDWORD RequiredSize,
[out, optional] PSTR *DestinationInfFileNameComponent
);
參數
[in] SourceInfFileName
來源 .inf 檔案的完整路徑。 您應該使用以 Null 結尾的字串。 此路徑不應超過大小 MAX_PATH,包括終止 NULL。
[in] OEMSourceMediaLocation
要儲存在先行編譯的 .inf (.pnf) 中的來源位置資訊。 此位置資訊專屬於指定的來源媒體類型。 您應該使用以 Null 結尾的字串。 此路徑不應超過大小 MAX_PATH,包括終止 NULL。
[in] OEMSourceMediaType
位置資訊所參考的來源媒體類型。 此參數可能是下列其中一個值。
[in] CopyStyle
指定將 .inf 檔案複製到 .inf 目錄的方式。 可以合併下列旗標。
價值 | 意義 |
---|---|
|
在成功複製時刪除來源檔案。 |
|
只有在此檔案已存在於 Inf 目錄中時,才複製 。 此旗標可用來更新現有 .inf 的來源位置資訊。 |
|
只有當指定的檔案目前不存在於 Inf 目錄中時,才複製 。 如果 .inf 目前存在,此 API 會失敗,GetLastError 會傳回ERROR_FILE_EXISTS。 在此情況下,現有的 .inf 檔案檔名會放在目的地 .inf 檔案信息輸出緩衝區的適當字段中。 |
|
指定的 .inf 檔案對應的目錄檔案會複製到 \Inf %windir%。 如果指定此旗標,如果指定的 .inf 檔案已存在於 Inf 目錄中,則會在成功傳回時輸入目的地檔名資訊。 |
[out, optional] DestinationInfFileName
緩衝區的指標,以在複製到 Inf 目錄時接收指派給它的 .inf 檔名。 如果指定緩衝區,通常應該 MAX_PATH 長度。 如果指定了SP_COPY_NOOVERWRITE旗標,而且 SetupCopyOEMInf 函式會失敗,傳回碼為 ERROR_FILE_EXISTS,則此緩衝區會包含現有 .inf 檔案的名稱。 如果指定了SP_COPY_OEMINF_CATALOG_ONLY旗標,如果 .inf 檔案已存在於 Inf 目錄中,則此緩衝區會包含目的地 .inf 檔名。 否則,這個緩衝區會設定為空字串。 此參數可以是 NULL
[in] DestinationInfFileNameSize
未指定緩衝區時,DestinationInfFileName 緩衝區的大小,以字元為單位或零。 如果指定 DestinationInfFileName,且此緩衝區大小小於傳回目的地 .inf 檔名(包括完整路徑)所需的大小,則此函式會失敗。 在此情況下,GetLastError 會傳回ERROR_INSUFFICIENT_BUFFER。
[out, optional] RequiredSize
接收儲存目的地 .inf 檔名所需大小之變數的指標,包括終止 NULL。 如果指定了SP_COPY_OEMINF_CATALOG_ONLY旗標,則只有當 .inf 檔案已存在於 Inf 目錄中時,這個變數才會收到字串長度。 否則,此變數會設定為零。 此參數可以是 NULL
[out, optional] DestinationInfFileNameComponent
成功傳回時設定之字串的指標(或ERROR_FILE_EXISTS),指向儲存在 DestinationInfFileName 參數之路徑的檔名元件開頭。 如果指定SP_COPY_OEMINF_CATALOG_ONLY旗標,DestinationInfFileName 參數可能是空字串。 在此情況下,字元指標會在成功傳回時設定為 NULL。 此參數可以是 NULL
傳回值
此函式會傳回 WINSETUPAPI BOOL。
言論
SetupCopyOEMInf 函式會將指定的 .inf 檔案複製到 \Inf 目錄 %windir%。 SetupCopyOEMInf 如果發現指定的 .inf 檔案的二進位影像已存在於同名或 OEM*.inf 格式的 Inf 目錄中,則不會重新複製檔案。 SetupCopyOEMInf 複製檔案時,它會將複製的檔案重新命名為 OEM*.inf。 提供的名稱是唯一的,無法預測。
SetupCopyOEMInf 會使用下列程式來判斷 Inf 目錄中是否已存在 .inf 檔案:
會列舉所有具有 OEM*.inf 格式名稱的 .inf 檔案,而且任何檔案大小與指定 .inf 檔案相同的檔案都會進行二進位比較。
Inf 目錄會搜尋 .inf 檔案的來源檔名。 如果同名的 .inf 檔案存在,且大小與指定的 .inf 檔案相同,則兩個檔案會比較為二進位檔,以判斷檔案是否相同。
如果指定的 .inf 檔案已經存在,則會執行進一步檢查,以判斷指定的 .inf 檔案是否在其 [Version] 區段中包含 CatalogFile= 專案。 如果這樣做,.inf 檔案的 %windir%\Inf 主要檔名與 “.cat” 擴展名會用來判斷目錄是否已安裝。 如果已安裝目錄,但與來源 .inf 相關聯的目錄不同,這不會被視為相符專案,而且列舉會繼續。 可以有多個相同的 .inf 檔案,其中包含 %windir%\Inf 目錄中的唯一目錄。 如果找不到現有的相符專案,.inf 和 .cat 檔案會以新的和唯一名稱安裝。
未指定 CatalogFile= 專案的 OEM .inf 檔案在數位簽名驗證方面被視為無效。
如果 .inf 檔案必須複製到 %windir%\Inf 目錄,則會報告任何數位簽名驗證失敗。
如果 .inf 和 .cat 檔案已經存在,則會使用這些現有的檔名,而且檔案取代行為是以指定的 CopyStyle 旗標為基礎。 取代行為只會參考儲存在 .pnf 中的來源媒體資訊。 不會修改現有的 .inf、.pnf 和 .cat 檔案。
注意
setupapi.h 標頭會根據 UNICODE 預處理器常數的定義,將 SetupCopyOEMInf 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
支援的最低伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平臺 | 窗戶 |
標頭 | setupapi.h |
連結庫 | Setupapi.lib |
DLL | Setupapi.dll |
API 集 | ext-ms-win-setupapi-classinstallers-l1-1-2 (在 Windows 10 版本 10.0.14393 中引進) |