Функция 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
Тип исходного носителя, на который ссылается информация о расположении. Этот параметр может иметь одно из следующих значений.
[in] CopyStyle
Указывает, как INF-файл копируется в каталог INF. Можно объединить следующие флаги.
Значение | Значение |
---|---|
|
Удалите исходный файл при успешном копировании. |
|
Копировать, только если этот файл уже существует в каталоге Inf. Этот флаг можно использовать для обновления сведений о расположении источника для существующего INF-файла. |
|
Копирование только в том случае, если указанные файлы в настоящее время не существуют в каталоге Inf. Если inf-файл существует в настоящее время, этот API завершается ошибкой, и GetLastError возвращает ERROR_FILE_EXISTS. В этом случае имя существующего INF-файла помещается в соответствующее поле в буферах выходных данных inf-файла назначения. |
|
Соответствующие файлы каталога указанного 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) |