Поделиться через


Функция SetupCopyOEMInfA (setupapi.h)

[Эта функция доступна для использования в операционных системах, указанных в разделе "Требования". Он может быть изменен или недоступен в последующих версиях. SetupAPI больше не следует использовать для установки приложений. Вместо этого используйте установщик Windows для разработки установщиков приложений. 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/driver. Если 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-файла помещается в соответствующее поле в буферах выходных данных целевого INF-файла.
SP_COPY_OEMINF_CATALOG_ONLY
Указанный INF-файл соответствующих файлов каталога копируется в %windir%\Inf. Если этот флаг указан, то при успешном возвращении указанный INF-файл уже существует в каталоге Inf.

[out, optional] DestinationInfFileName

Указатель на буфер для получения имени INF-файла, назначенного ему в момент его копирования в каталог Inf. Буфер, если он указан, обычно должен быть MAX_PATH длиной. Если указан флаг SP_COPY_NOOVERWRITE , а функция setupCopyOEMIn f завершается ошибкой с кодом возврата 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.

Возвращаемое значение

Эта функция возвращает BOOL WINSETUPAPI.

Замечания

Функция setupCopyOEMIn f копирует указанный INF-файл в каталог %windir%\Inf. SetupCopyOEMInf не выполняет повторное копирование файла, если он находит, что двоичный образ указанного INF-файла уже существует в каталоге Inf с тем же именем или именем формы OEM*.inf. Если SetupCopyOEMInf копирует файл, он переименовывает скопированный файл в OEM*.inf. Предоставленное имя уникально и не может быть предсказано.

SetupCopyOEMInf использует следующую процедуру, чтобы определить, существует ли INF-файл в каталоге Inf:

Перечисляются все INF-файлы с именами формы OEM*.inf и все файлы с одинаковым размером файла, что и указанный INF-файл, сравниваются двоичными файлами.

В каталоге Inf выполняется поиск исходного имени файла INF-файла. Если INF-файл с тем же именем существует и имеет тот же размер, что и указанный INF-файл, эти два файла являются двоичными по сравнению с определением того, совпадают ли они.

Если указанный INF-файл уже существует, чтобы определить, содержит ли указанный INF-файл запись CatalogFile= в разделе [Версия]. В противном случае используется inf-файл %windir%\Inf primary filename with a .cat", чтобы определить, установлен ли каталог. Если установлен каталог, но он не совпадает с каталогом, связанным с исходным INF- файлом, он не считается совпадением и перечислениями продолжается. Можно использовать несколько идентичных INF-файлов с уникальными каталогами, содержащимися в каталоге %windir%\Inf. Если существующее совпадение не найдено, файлы INF и CAT устанавливаются под новым и уникальным именем.

OEM .inf-файлы, которые не указывают запись CatalogFile=, считаются недопустимыми в отношении проверки цифровой подписи.

В случаях, когда INF-файл должен быть скопирован в каталог %windir%\Inf, сообщается о любых сбоях проверки цифровой подписи.

Если файлы INF и CAT уже существуют, используются эти существующие имена файлов, а поведение замены файла основано на указанных флагах CopyStyle. Поведение замены относится только к данным исходного носителя, хранящимся в PNF. Существующие ФАЙЛЫ INF, PNF и CAT не изменяются.

Заметка

Заголовок setupapi.h определяет SetupCopyOEMInf как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские 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