Функция 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 отобразит диалоговое окно перезагрузки системы. Дополнительные сведения об этом параметре см. в следующем разделе Примечания.
Возвращаемое значение
Возвращаемый код | Описание |
---|---|
|
Вызывающий объект не имеет прав администратора. По умолчанию Windows требует, чтобы вызывающий объект имеет права администратора для предварительной установки пакета драйвера в хранилище драйверов . |
|
Путь к указанному INF-файлу не существует. |
|
Значение, указанное для флагов , не равно нулю или DIIRFLAG_FORCE_INF. |
|
Вызывающее приложение — это 32-разрядное приложение, которое пытается выполнить в 64-разрядной среде, которая не допускается. Дополнительные сведения см. в разделе Установка устройств на 64-разрядных системах. |
Замечания
DiInstallDriver выполняет следующие операции:
- Предварительно устанавливается пакет драйвера в хранилище драйверов . Если в хранилище драйверов уже есть экземпляр того же пакета драйвера, DiInstallDriver сначала удаляет этот экземпляр, а затем добавляет новый экземпляр пакета драйвера в хранилище драйверов.
- Перечисляет устройства, которые присутствуют в системе.
- Если Флаги равны нулю, устанавливает драйвер на устройстве только в том случае, если указанный драйвер лучше подходит для устройства, чем драйвер, установленный на устройстве.
- Если Флаги равны DIIRFLAG_FORCE_INF, устанавливает драйвер на устройстве независимо от того, соответствует ли пакет драйвера устройству лучше, чем драйвер, установленный на устройстве.
- Чтобы завершить установку, приложение должно вызывать DiInstallDriver несколько раз. В этом случае приложение должно записать, возвращается ли значение TRUENeedReboot любым из вызовов DiInstallDriver и, если да, предложите пользователю перезапустить систему после последнего вызова DiInstallDriver.
- Приложение должно выполнять необходимые операции, кроме вызова DiInstallDriver, прежде чем происходит перезагрузка системы. Если требуется перезагрузка системы, приложение должно завершить необходимые операции, а затем предложите пользователю перезапустить систему.
- Приложение является установщиком классов, в этом случае установщик класса должен задать флаг DI_NEEDREBOOT в элементе флагов флагов структуры SP_DEVINSTALL_PARAMS для устройства.
Заметка
Заголовок newdev.h определяет DiInstallDriver как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно в Windows Vista и более поздних версиях Windows. |
целевая платформа | Настольный |
заголовка | newdev.h (include Newdev.h) |
библиотеки |
Newdev.lib |