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


DIF_INSTALLDEVICE

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

При отправке

После выбора драйвера, регистрации всех установщиков устройств и любых интерфейсов устройств.

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

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

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

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

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

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

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

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

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

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

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

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

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

Параметры установки устройства
Установщик может изменять параметры установки устройства для DeviceInfoData. Например, установщик может установить флаг DI_NEEDREBOOT или флаг DI_DONOTCALLCONFIGMG, чтобы windows не могла динамически подключить устройство к сети с его недавно установленным драйвером и параметрами.

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

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

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

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

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

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

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

SetupDiInstallDevice

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

В ответ на запрос DIF_INSTALLDEVICE установщик обычно выполняет все окончательные операции установки, прежде чем обработчик по умолчанию установит устройство. Например, установщик может проверка и, возможно, изменить драйверы верхнего фильтра и драйверы нижнего фильтра для устройства, указанного в реестре.

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

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

Совместный установщик может обработать этот запрос DIF в проходе предварительной обработки и (или) в проходе постобработки. При прохождении предварительной обработки совместный установщик выполняет все операции, которые должны произойти до того, как Windows загрузит драйверы и запустит устройство.

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

Если установщик возвращает код ошибки Win32, Windows откажется от установки.

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

Если эта попытка завершается неудачно, Windows снова отправляет DIF_INSTALLDEVICE, на этот раз с флагом DI_FLAGSEX_SETFAILEDINSTALL, установленным в структуре SP_DEVINSTALL_PARAMS . В этом случае обработчик по умолчанию просто устанавливает флаг FAILEDINSTALL в значении реестра ConfigFlags устройства. Если установлен флаг DI_FLAGSEX_SETFAILEDINSTALL, установщики классов должны возвращать NO_ERROR или ERROR_DI_DO_DEFAULT, а совместные установщики должны возвращать NO_ERROR.

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

Вызов обработчика по умолчанию SetupDiInstallDevice

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

В редких случаях, когда установщик класса должен выполнять операции после завершения всех операций SetupDiInstallDevice , за исключением запуска устройства, установщик класса должен:

  1. Выполните операции, которые необходимо выполнить перед вызовом SetupDiInstallDevice.

  2. Установите флаг DI_DONOTCALLCONFIGMGR в SP_DEVINSTALL_PARAMS. Элемент flags для устройства. Если этот флаг установлен, SetupDiInstallDevice выполняет все операции установки по умолчанию, за исключением запуска устройства.

  3. Вызовите SetupDiInstallDevice для выполнения всех операций установки по умолчанию, за исключением запуска устройства.

  4. Выполните операции, которые необходимо выполнить после завершения всех операций установки по умолчанию, за исключением запуска устройства.

  5. Вызовите SetupDiRestartDevices , чтобы запустить устройство.

  6. Верните NO_ERROR, если установщик класса успешно завершил операцию установки, или ошибку Win32, если операция установки завершилась сбоем.

Требования

Версия

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

Заголовок

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

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

DIF_INSTALLDEVICEFILES

SetupDiInstallDevice

SP_DEVINFO_DATA

SP_DEVINSTALL_PARAMS