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


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

Функция SetupDiInstallDevice является обработчиком по умолчанию для запроса на установку DIF_INSTALLDEVICE.

Синтаксис

WINSETUPAPI BOOL SetupDiInstallDevice(
  [in]      HDEVINFO         DeviceInfoSet,
  [in, out] PSP_DEVINFO_DATA DeviceInfoData
);

Параметры

[in] DeviceInfoSet

Дескриптор набора сведений об устройстве для локальной системы, который содержит элемент сведений об устройстве, представляющий устанавливаемое устройство.

[in, out] DeviceInfoData

Указатель на структуру SP_DEVINFO_DATA , указывающую элемент сведений об устройстве в DeviceInfoSet. Это параметр IN-OUT, так как DeviceInfoData.При возврате в DevInst может быть обновлено новое значение дескриптора.

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

Функция возвращает ЗНАЧЕНИЕ TRUE , если оно выполнено успешно. В противном случае возвращается значение FALSE , а зарегистрированная ошибка может быть получена с помощью вызова Метода GetLastError.

Комментарии

SetupDiInstallDevice устанавливает драйвер из INF-файла. Определение "драйвера" в SetupAPI на самом деле является "узлом драйвера". Поэтому, когда эта функция устанавливает драйвер, она также устанавливает элементы из следующего списка:

  • Службы для устройства.
  • Файлы драйверов.
  • Совместные установщики для конкретных устройств (если таковые есть).
  • Поставщики страниц свойств (если таковые есть).
  • Апплеты панели управления (при наличии).
Эта функция также регистрирует все необходимые интерфейсы устройств.

Успешная установка включает в себя, помимо прочего, следующие действия:

  • Создайте раздел драйвера в реестре и запишите соответствующие записи (например , InfPath и ProviderName).
  • Найдите и обработайте раздел INF DDInstall для устройства. Раздел может быть специфичным для ОС или архитектуры. Записи AddReg и DelReg раздела DDInstall направлены на программный ключ устройства. Найдите и обработайте DDInstall. Раздел HW , записи AddReg и DelReg которого направлены на аппаратный ключ устройства. Найдите и обработайте раздел INF DDInstall.LogConfigOverride, если он имеется, чтобы предоставить конфигурацию переопределения для устройства. Найдите и обработайте раздел INF DDInstall.Services , чтобы добавить службы для устройства (и, возможно, удалить все старые службы, которые больше не нужны).
  • Скопируйте INF-файл в системный каталог INF.
  • Возможно, выполните другие операции с файлами на основе параметров флага в параметрах установки устройства.

    Если флаг DI_NOFILECOPY и флаг DI_NOVCP снят, выполните любые операции с файлами, указанные в разделе DDInstall . Если установлен флаг DI_NOVCP, поставить все операции с файлами в очередь.

    Если установлен флаг DI_NOFILECOPY, не копируйте файлы. Этот флаг может быть установлен, например, если для установки этого устройства уже была выполнена DIF_INSTALLDEVICEFILES операция.

  • Загрузите драйверы для устройства. Сюда входит драйвер функции и все драйверы верхнего или нижнего фильтров.
  • Вызовите процедуры AddDevice драйверов.
  • Запустите устройство, отправив IRP_MN_START_DEVICE пакет запроса ввода-вывода (IRP).
Windows не запускает устройство, если в структуре SP_DEVINSTALL_PARAMS установлен флаг DI_NEEDRESTART, DI_NEEDREBOOT или DI_DONOTCALLCONFIGMG.

Установщик класса должен возвращать ERROR_DI_DO_DEFAULT или вызывать эту функцию при обработке запроса DIF_INSTALLDEVICE . Эта функция выполняет множество задач для установки устройства, и этот список задач может быть расширен в будущих выпусках. Если установщик класса выполняет установку устройства без вызова этой функции, установщик класса может работать неправильно в будущих версиях операционной системы.

Если Windows не удается найти INF-файл для устройства, она отправит DIF_INSTALLDEVICE при попытке установить драйвер NULL. SetupDiInstallDevice устанавливает драйвер null только в том случае, если устройство поддерживает необработанный режим или является устройством без PnP (сообщает IoReportDetectedDevice). Дополнительные сведения см. в разделе DIF_INSTALLDEVICE.

Если флаг DI_FLAGSEX_SETFAILEDINSTALL задан в структуре SP_DEVINSTALL_PARAMS , SetupDiInstallDevice просто устанавливает флаг FAILEDINSTALL в значении реестра ConfigFlags устройства.

Примечание Только установщик класса должен вызывать SetupDiInstallDevice и только в тех ситуациях, когда установщик класса должен выполнять операции установки устройства после того , как SetupDiInstallDevice завершит операцию установки устройства по умолчанию. В таких ситуациях установщик класса должен напрямую вызывать SetupDiInstallDevice , когда установщик обрабатывает запрос DIF_INSTALLDEVICE. Дополнительные сведения о вызове обработчика по умолчанию см. в разделе Вызов обработчиков кода DIF по умолчанию.
 
Вызывающий объект SetupDiInstallDevice должен быть членом группы Администраторы.

Требования

Требование Значение
Минимальная версия клиента Доступно в Microsoft Windows 2000 и более поздних версиях Windows.
Целевая платформа Персональный компьютер
Верхняя часть setupapi.h (включая Setupapi.h)
Библиотека Setupapi.lib
DLL Setupapi.dll

См. также раздел

DIF_INSTALLDEVICE

SetupDiCallClassInstaller

SetupDiInstallDriverFiles