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


DIF_SELECTDEVICE

Запрос DIF_SELECTDEVICE позволяет установщику участвовать в выборе драйвера для устройства.

При отправке

При выборе драйвера для нового перечислимого устройства или нового драйвера для существующего устройства (изменение драйвера). Например, когда пользователь нажимает кнопку "Добавить или удалить оборудование" и выбирает класс модема. Или пользователь вставляет устройство PnP и выбирает "Выбрать драйвер из списка" в мастере обнаружения нового оборудования.

Кто обрабатывает

Совместный установщик класса

Может обрабатывать

Совместный установщик устройств

Не обрабатывает

Установщик классов

Может обрабатывать

Входные данные установщика

DeviceInfoSet
Предоставляет дескриптор для набора сведений об устройствах , содержащего устройство, для которого требуется выбрать драйвер. Существует класс настройки устройства , связанный с DeviceInfoSet.

DeviceInfoData
При необходимости предоставляет указатель на структуру SP_DEVINFO_DATA , которая идентифицирует устройство в наборе сведений об устройстве.

Если DeviceInfoData имеет значение NULL, этот запрос требуется для выбора драйвера для класса установки устройства , связанного с DeviceInfoSet.

Параметры установки устройства
Если deviceInfoData не равно NULL, с DeviceInfoData связаны параметры установки устройства (SP_DEVINSTALL_PARAMS). Если deviceInfoData имеет значение NULL, с DeviceInfoSet связаны параметры установки устройства.

Особый интерес представляет DriverPath, который содержит расположение inf(s) для использования при создании списка драйверов.

Параметры установки класса
Структура SP_SELECTDEVICE_PARAMS связана с DeviceInfoData, если DeviceInfoData не имеет значение NULL. В противном случае параметры установки класса связываются с набором сведений об устройстве в целом.

Выходные данные установщика

Параметры установки устройства
Установщик может изменять параметры установки устройства. Однако оно не должно изменять поле DriverPath .

Параметры установки класса
Установщик может изменять SP_SELECTDEVICE_PARAMS. Например, установщик может указать название и инструкции для Windows в диалоговом окне с запросом на выбор драйвера.

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

Возвращаемое значение установщика

Если совместное установщик не выполняет никаких действий для этого кода DIF, он возвращает NO_ERROR из этапа предварительной обработки. Если совместный установщик обрабатывает этот код DIF, он должен сделать это в своем проходе предварительной обработки и вернуть NO_ERROR или код ошибки Win32. К моменту вызова совместного установщика для постобработки драйвер уже был выбран.

Если установщик класса успешно обрабатывает этот запрос и SetupDiCallClassInstaller должен впоследствии вызвать обработчик по умолчанию, установщик класса возвращает ERROR_DI_DO_DEFAULT.

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

Примечание Установщик класса может напрямую вызывать обработчик по умолчанию, но установщик класса никогда не должен пытаться заменять операции обработчика по умолчанию.

Дополнительные сведения о вызове обработчика по умолчанию см. в разделе Вызов обработчиков кода DIF по умолчанию.

Если установщик класса обнаруживает ошибку, установщик должен вернуть соответствующий код ошибки Win32, и SetupDiCallClassInstaller впоследствии не вызовет обработчик по умолчанию.

Установщик класса возвращает ERROR_DI_BAD_PATH, если член DriverPath соответствующей структуры SP_DEVINSTALL_PARAMS не равен NULL, но нет допустимых драйверов в указанном расположении пути. Это может произойти, если в расположении пути нет драйверов или есть драйверы, но для элемента FlagsSP_DRVINSTALL_PARAMS структуры каждого драйвера был задан флаг DN_BAD_DRIVER. В ответ на этот код ошибки Windows выводит пользователю сообщение об ошибке.

Обработчик кода DIF по умолчанию

SetupDiSelectDevice

Операция установщика

В ответ на запрос DIF_SELECTDEVICE установщик выполняет все операции выбора, необходимые для своего устройства или класса устройства, помимо действий обработчика по умолчанию. Установщик обычно отвечает на этот запрос DIF одним из следующих способов:

  • Не делать ничего.

    Если у установщика нет особых требований к выбору, он не выполняет никаких действий в ответ на этот код DIF. Установщик класса возвращает ERROR_DI_DO_DEFAULT, а совместный установщик — NO_ERROR.

  • Предоставьте строки выбора, которые Windows будет отображать в пользовательском интерфейсе выбора.

    Установщик может указать строки выбора в параметрах установки класса (SP_SELECTDEVICE_PARAMS). Например, установщик может изменить инструкции или заголовок окна.

    Установщик класса не должен предоставлять строки выбора, если в совместном установщике уже предоставлены строки выбора. Возможно, у совместного установщика есть более релевантные сведения.

    Если установщик изменяет SP_SELECTDEVICE_PARAMS, установщик также должен установить флаг DI_USECI_SELECTSTRINGS в SP_DEVINSTALL_PARAMS.

    Если установщик успешно предоставляет строки выбора, Windows по-прежнему должен вызывать обработчик по умолчанию. Поэтому в этом случае совместный установщик возвращает NO_ERROR, а установщик класса — ERROR_DI_DO_DEFAULT.

  • Измените параметры установки устройства.

    Установщик может изменять параметры установки устройства (SP_DEVINSTALL_PARAMS). Например, установщик может установить флаг DI_SHOWOEM, чтобы Windows отображала кнопку Иметь диск .

    Если установщик класса успешно изменяет параметры установки устройства, установщик класса возвращает ERROR_DI_DO_DEFAULT.

  • Измените список драйверов, из которых пользователь может выбрать.

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

    Установщик, изменяющий список драйверов, обычно помечает неподходящие для устройства драйверы. Установщик помечает такие драйверы флагом DNF_BAD_DRIVER. Windows пропускает эти драйверы из списка, отображаемого для пользователя.

    Установщик помечает недопустимые драйверы, выполнив следующие действия.

    1. Создайте список драйверов, вызвав SetupDiBuildDriverInfoList с типом драйвера SPDIT_CLASSDRIVER.
    2. Получите сведения о первом драйвере в списке, вызвав SetupDiEnumDriverInfo и SetupDiGetDriverInstallParams. Если драйвер не подходит для устройства, установите флаг DNF_BAD_DRIVER в поле Флаги параметров. Примените изменения к параметрам, вызвав SetupDiSetDriverInstallParams.
    3. Повторяйте предыдущий шаг, пока не обработаете все драйверы в списке. Обязательно увеличьте параметр MemberIndex до SetupDiEnumDriverInfo , как описано на странице справочника по этой функции.

    Установщик может установить флаг DNF_BAD_DRIVER для одного или нескольких драйверов в списке драйверов, но установщик не должен очищать этот флаг.

    Если один или несколько установщиков успешно изменяют список драйверов, Windows по-прежнему должен вызывать обработчик по умолчанию. Поэтому в этом случае совместный установщик возвращает NO_ERROR, а установщик класса — ERROR_DI_DO_DEFAULT.

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

    Только установщик класса может отображать собственный пользовательский интерфейс выбора драйвера; Совместные установщики не должны. Например, установщик класса может отображать изображения вместо текстовых списков.

    Если установщик класса успешно задает выбранный драйвер, установщик класса возвращает NO_ERROR, а Windows не вызывает обработчик по умолчанию и поэтому не отображает интерфейс выбора по умолчанию.

Если флаг DI_ENUMSINGLEINF задан в параметрах установки устройства, DriverPath — это путь к одному INF-файлу, а не к каталогу. Установщик должен использовать только один inf-файл для создания списка драйверов.

Дополнительные сведения о кодах DIF см. в разделе Обработка кодов DIF.

Требования

Версия

Поддерживается в Microsoft Windows 2000 и более поздних версиях Windows.

Заголовок

Setupapi.h (включая Setupapi.h)

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

DIF_NEWDEVICEWIZARD_SELECT

SetupDiSelectDevice

SP_DEVINFO_DATA

SP_DEVINSTALL_PARAMS

SP_SELECTDEVICE_PARAMS