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


Написание установщиков классов и Co-Installers

Примечание

Функции, описанные в этом разделе, не поддерживаются в универсальных или мобильных пакетах драйверов. См . раздел Использование универсального INF-файла.

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

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

Сохранение состояния установки устройства

Загрузка исполняемых или DLL-файлов

Запуск других процессов или служб

Дополнительные сведения о создании совместного установщика см. в разделе Написание совместного установщика.

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

Установка устройства в основном выполняется в системной (неинтерактивной) службе. Таким образом, пользователь не может видеть какой-либо пользовательский интерфейс, который отображается в этом контексте, или реагировать на него. Любое диалоговое окно, предоставляемое в совместном установщике во время обработки кода функции установки устройства (DIF ), приводит к тому, что установка устройства перестает отвечать на запросы.

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

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

Сохранение состояния установки устройства

Не сохраняйте состояние установки устройства в библиотеке динамической компоновки совместного установщика (DLL). Так как Windows обычно выгружает библиотеку DLL после обработки кода DIF установщиком, все сведения о состоянии, сохраненные в библиотеке DLL, не сохраняются.

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

  1. Чтобы получить дескриптор реестра к ключу драйвера для экземпляра устройства, используйте SetupDiOpenDevRegKey с параметром KeyType , для которого задано значение DIREG_DRV.

  2. Используйте SetupDiGetDevicePropertyKeys (для получения всех ключей свойств для экземпляра устройства) или SetupDiGetDeviceProperty (для получения указанного ключа свойства экземпляра устройства).

  3. Используйте SetupDiSetDeviceProperty , чтобы сохранить ключ свойства экземпляра устройства.

Загрузка исполняемых или DLL-файлов

Если ваш совместный установщик пытается загрузить неподписанный исполняемый файл или библиотеку DLL на 64-разрядной платформе Windows, операционные системы предотвращают его загрузку в этой безопасной среде.

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

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

Запуск других процессов или служб

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

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