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


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

[Эта функция доступна для использования в операционных системах, указанных в разделе Требования. В последующих версиях он может быть изменен или недоступен. SetupAPI больше не следует использовать для установки приложений. Вместо этого используйте установщик Windows для разработки установщиков приложений. SetupAPI по-прежнему используется для установки драйверов устройств.]

Функция SetupCopyOEMInf копирует указанный INF-файл в каталог %windir%/Inf.

Вызывающий объект этой функции должен иметь права администратора, в противном случае функция завершается ошибкой.

Синтаксис

WINSETUPAPI BOOL SetupCopyOEMInfW(
  [in]            PCWSTR SourceInfFileName,
  [in]            PCWSTR OEMSourceMediaLocation,
  [in]            DWORD  OEMSourceMediaType,
  [in]            DWORD  CopyStyle,
  [out, optional] PWSTR  DestinationInfFileName,
  [in]            DWORD  DestinationInfFileNameSize,
  [out, optional] PDWORD RequiredSize,
  [out, optional] PWSTR  *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:\". Если OEMSourceMediaLocation имеет значение NULL, предполагается, что путь является путем, в котором находится INF-файл. Если inf-файл имеет соответствующий PNF-файл в этом расположении, сведения об исходном носителе PNF-файла передаются в PNF-файл назначения.
SPOST_URL
OEMSourceMediaLocation содержит универсальный указатель ресурсов (URL-адрес), указывающий расположение в Интернете, из которого были извлечены inf/driver-файлы. Если OEMSourceMediaLocation имеет значение NULL, предполагается, что использовалось расположение диспетчера загрузки кода по умолчанию.

[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-файла копируются в папку %windir%\Inf. Если этот флаг указан, то при успешном возвращении вводятся сведения о целевом имени файла, если указанный 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.

Комментарии

Функция SetupCopyOEMInf копирует указанный 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= в разделе [Версия]. Если это так, для определения того, установлен ли каталог, используется основное имя файла %windir%\Inf с расширением .cat. Если каталог установлен, но он не совпадает с каталогом, связанным с исходным inf-файлом, это не считается совпадением, и перечисление продолжается. Можно иметь несколько идентичных INF-файлов с уникальными каталогами, содержащимися в каталоге %windir%\Inf. Если существующее совпадение не найдено, inf- и CAT-файлы устанавливаются с новым уникальным именем.

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

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

Если INF- и CAT-файлы уже существуют, используются существующие имена файлов, а поведение замены файлов основано на указанных флагах CopyStyle. Поведение замены относится только к информации об исходном носителе, хранящейся в PNF-файле. Существующие файлы INF, PNF и CAT не изменяются.

Примечание

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

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header setupapi.h
Библиотека Setupapi.lib
DLL Setupapi.dll
Набор API ext-ms-win-setupapi-classinstallers-l1-1-2 (появилось в Windows 10 версии 10.0.14393)

См. также

Функции

Обзор

SetupUninstallOEMInf