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


DIF_SELECTBESTCOMPATDRV

Примечание

Этот запрос не рекомендуется использовать в Windows 10 версии 1703 (Redstone 2). В более поздних версиях Windows этот обратный вызов больше не вызывается.

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

При отправке

Когда операционная система готовится к установке нового устройства PnP или выполняет операцию изменения драйвера на устройстве PnP.

Этот запрос DIF обычно используется во время настройки PnP. Если устройство устанавливается вручную, Windows отправляет запрос DIF_SELECTDEVICE .

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

Со-установщик класса

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

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

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

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

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

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

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

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

Параметры установки устройства
Существуют параметры установки устройства (SP_DEVINSTALL_PARAMS), связанные с DeviceInfoData.

Параметры установки класса
Нет

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

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

DeviceInfoData
В качестве побочных эффектов установщик может изменить список драйверов, связанный с DeviceInfoData, в частности, SP_DRVINSTALL_PARAMS.

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

Совместный установщик может возвращать NO_ERROR, ERROR_DI_POSTPROCESSING_REQUIRED или код ошибки Win32.

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

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

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

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

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

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

SetupDiSelectBestCompatDrv

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

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

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

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

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

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

    1. Получите сведения о первом драйвере в списке, вызвав SetupDiEnumDriverInfo и SetupDiGetDriverInstallParams. При необходимости измените параметры драйвера и примените их, вызвав SetupDiSetDriverInstallParams.

      Если драйвер является наихудшим вариантом, задайте ранг драйвера 0xFFFF или выше в параметрах установки драйвера. Дополнительные сведения см. в статье Выбор драйверов в Windows .

    2. Повторяйте предыдущий шаг, пока не обработаете все драйверы в списке. Убедитесь, что параметр MemberIndex увеличивается до параметра SetupDiEnumDriverInfo , как описано на справочной странице для этой функции.

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

  • Выберите лучший драйвер для устройства.

    Это действие менее распространено, но установщик может выбрать лучший драйвер для устройства. Такой установщик проверяет данные для каждого драйвера, выбирает драйвер и вызывает SetupDiSetSelectedDriver , чтобы задать драйвер. После установки выбранного драйвера установщик возвращает NO_ERROR.

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

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

Требования

Версия

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

Заголовок

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

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

SetupDiSelectBestCompatDrv

SetupDiSetSelectedDriver

SP_DEVINFO_DATA

SP_DEVINSTALL_PARAMS