共用方式為


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

位置資訊所參考的來源媒體類型。 此參數可能是下列其中一個值。

價值 意義
SPOST_NONE
.pnf 檔案中不會儲存任何來源媒體資訊。 在此情況下,會忽略 OEMSourceMediaLocation 的值。
SPOST_PATH
OEMSourceMediaLocation 包含來源媒體的路徑。 例如,如果媒體位於軟盤上,此路徑可能是 “A:\”。 如果 OEMSourceMediaLocationNULL,則路徑會假設為 .inf 所在的路徑。 如果 .inf 在該位置有對應的 .pnf,則 .pnf 檔案的來源媒體資訊會傳送至目的地 .pnf 檔案。
SPOST_URL
OEMSourceMediaLocation 包含通用資源定位器(URL),指定從中擷取 .inf/驅動程式檔案的因特網位置。 如果 OEMSourceMediaLocationNULL,則會假設使用預設的程式代碼下載管理員位置。

[in] CopyStyle

指定將 .inf 檔案複製到 .inf 目錄的方式。 可以合併下列旗標。

價值 意義
SP_COPY_DELETESOURCE
在成功複製時刪除來源檔案。
SP_COPY_REPLACEONLY
只有在此檔案已存在於 Inf 目錄中時,才複製 。 此旗標可用來更新現有 .inf 的來源位置資訊。
SP_COPY_NOOVERWRITE
只有當指定的檔案目前不存在於 Inf 目錄中時,才複製 。 如果 .inf 目前存在,此 API 會失敗,GetLastError 會傳回ERROR_FILE_EXISTS。 在此情況下,現有的 .inf 檔案檔名會放在目的地 .inf 檔案信息輸出緩衝區的適當字段中。
SP_COPY_OEMINF_CATALOG_ONLY
指定的 .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 中引進)

另請參閱

函式

概觀

SetupUninstallOEMInf