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


Функция DiInstallDriverA (newdev.h)

Функция DiInstallDriver предварительно устанавливает драйвер в хранилище драйверов , а затем устанавливает драйвер на устройствах, присутствующих в системе, которую поддерживает драйвер.

Синтаксис

BOOL DiInstallDriverA(
  [in, optional]  HWND   hwndParent,
  [in]            LPCSTR InfPath,
  [in]            DWORD  Flags,
  [out, optional] PBOOL  NeedReboot
);

Параметры

[in, optional] hwndParent

Дескриптор окна верхнего уровня, который DiInstallDriver используется для отображения любого компонента пользовательского интерфейса, связанного с установкой устройства. Этот параметр является необязательным и может иметь значение NULL.

[in] InfPath

Указатель на строку, завершающую значение NULL, которая предоставляет полный путь к INF-файлу пакета драйвера .

[in] Flags

Значение типа DWORD, указывающее ноль или сочетание одного или нескольких флагов, как описано здесь (Флаги обычно задано равным нулю).

Если Флаги равно нулю, DiInstallDriver устанавливает только указанный драйвер на устройстве, если драйвер лучше подходит для устройства, чем драйвер, установленный в данный момент на устройстве. Сведения о том, как Windows выбирает драйвер для устройства, см. в разделе Как Windows выбирает драйверы.

Если Флаги включают DIIRFLAG_FORCE_INF, DiInstallDriver устанавливает указанный драйвер на соответствующее устройство независимо от того, соответствует ли драйвер устройству, чем драйвер, установленный на устройстве. Если DIIRFLAG_INSTALL_AS_SET также указан, DIIRFLAG_FORCE_INF игнорируется.

осторожность принудительное установку драйвера может привести к замене более совместимого или более нового драйвера менее совместимым или старым драйвером.
 

Если Флаги включают DIIRFLAG_INSTALL_AS_SET (поддерживается в Windows 10 версии 1709 и более поздних версиях), InfPath следует указать каталог вместо полного пути к INF-файлу и DiInstallDriver установит все INF-файлы в этом каталоге с особым поведением. Все пакеты драйверов будут переведены в хранилище драйверов , но пока не будут доступны для установки на устройствах. После следующего завершения работы системы эти пакеты драйверов будут доступны для установки на устройствах, и они будут установлены на любых устройствах, которые они наиболее подходящи для того, чтобы устройства были готовы к следующей загрузке системы.

[out, optional] NeedReboot

Указатель на значение типа BOOL, которое DiInstallDriver наборов, чтобы указать, требуется ли перезагрузка системы для завершения установки. Этот параметр является необязательным и может быть null. Если параметр указан, а для завершения установки требуется перезагрузка системы, DiInstallDriver задает значение TRUE. В этом случае вызывающий объект должен заставить пользователя перезапустить систему. Если этот параметр указан, а для завершения установки не требуется перезагрузка системы, DiInstallDriver задает значение FALSE. Если параметр null и для завершения установки требуется перезагрузка системы, DiInstallDriver отобразит диалоговое окно перезагрузки системы. Дополнительные сведения об этом параметре см. в следующем разделе Примечания.

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

DiInstallDriver возвращает TRUE, если функция успешно предустановила указанный пакет драйвера вхранилище драйверов . DiInstallDriver также возвращает true, если функция успешно установила драйвер на одном или нескольких устройствах в системе. Если пакет драйвера не установлен в хранилище драйверов, DiInstallDriver возвращает FALSE, и ошибка журнала может быть получена путем вызова GetLastError. Ниже приведены некоторые распространенные значения ошибок, которые GetLastError:

Возвращаемый код Описание
ERROR_ACCESS_DENIED
Вызывающий объект не имеет прав администратора. По умолчанию Windows требует, чтобы вызывающий объект имеет права администратора для предварительной установки пакета драйвера в хранилище драйверов .
ERROR_FILE_NOT_FOUND
Путь к указанному INF-файлу не существует.
ERROR_INVALID_FLAGS
Значение, указанное для флагов , не равно нулю или DIIRFLAG_FORCE_INF.
ERROR_IN_WOW64
Вызывающее приложение — это 32-разрядное приложение, которое пытается выполнить в 64-разрядной среде, которая не допускается. Дополнительные сведения см. в разделе Установка устройств на 64-разрядных системах.

Замечания

DiInstallDriver выполняет следующие операции:

  1. Предварительно устанавливается пакет драйвера в хранилище драйверов . Если в хранилище драйверов уже есть экземпляр того же пакета драйвера, DiInstallDriver сначала удаляет этот экземпляр, а затем добавляет новый экземпляр пакета драйвера в хранилище драйверов.
  2. Перечисляет устройства, которые присутствуют в системе.
  3. Если Флаги равны нулю, устанавливает драйвер на устройстве только в том случае, если указанный драйвер лучше подходит для устройства, чем драйвер, установленный на устройстве.
  4. Если Флаги равны DIIRFLAG_FORCE_INF, устанавливает драйвер на устройстве независимо от того, соответствует ли пакет драйвера устройству лучше, чем драйвер, установленный на устройстве.
В общем случае приложение установки должно задать NeedReboot NULL для прямого DiInstallDriver, чтобы отправить пользователю запрос на перезагрузку системы, если для завершения установки требуется перезагрузка. Приложение должно предоставить указатель NeedReboot только в следующих случаях:
  • Чтобы завершить установку, приложение должно вызывать DiInstallDriver несколько раз. В этом случае приложение должно записать, возвращается ли значение TRUENeedReboot любым из вызовов DiInstallDriver и, если да, предложите пользователю перезапустить систему после последнего вызова DiInstallDriver.
  • Приложение должно выполнять необходимые операции, кроме вызова DiInstallDriver, прежде чем происходит перезагрузка системы. Если требуется перезагрузка системы, приложение должно завершить необходимые операции, а затем предложите пользователю перезапустить систему.
  • Приложение является установщиком классов, в этом случае установщик класса должен задать флаг DI_NEEDREBOOT в элементе флагов флагов структуры SP_DEVINSTALL_PARAMS для устройства.
Чтобы установить выбранный драйвер на выбранном устройстве, вызовите DiInstallDevice. Дополнительные сведения см. в разделе Функции setupAPI, упрощающие установку драйверов.

Заметка

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows Vista и более поздних версиях Windows.
целевая платформа Настольный
заголовка newdev.h (include Newdev.h)
библиотеки Newdev.lib

См. также

DiInstallDevice