Интерфейс совместного установщика
Примечание
Функции, описанные в этом разделе, не поддерживаются, и содержащиеся в них пакеты драйверов больше не будут получать подпись Майкрософт. См . раздел Использование универсального INF-файла.
Интерфейс совместного установщика состоит из экспортируемой функции точки входа и связанной структуры данных.
Точка входа совместного установщика
Совместный установщик должен экспортировать функцию точки входа со следующим прототипом:
typedef DWORD
(CALLBACK* COINSTALLER_PROC) (
IN DI_FUNCTION InstallFunction,
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL,
IN OUT PCOINSTALLER_CONTEXT_DATA Context
);
InstallFunction
Указывает обрабатываемый запрос на установку устройства, в котором может участвовать соустановщик. Эти запросы задаются с помощью кодов DIF, например DIF_INSTALLDEVICE. Дополнительные сведения см. в разделе Коды функций установки устройства.
DeviceInfoSet
Предоставляет дескриптор набору сведений об устройстве.
DeviceInfoData
При необходимости определяет устройство, которое является целевым объектом запроса на установку устройства. Если этот параметр не имеет значения NULL, он определяет элемент сведений об устройстве в наборе сведений об устройстве.
DeviceInfoData не имеет значения NULL , если SetupDiCallClassInstaller вызывает совместное установщик для конкретного устройства. Совместный установщик класса можно вызвать с помощью запроса DIF, имеющего значениеDeviceInfoData NULL, например DIF_DETECT или DIF_FIRSTTIMESETUP.
Контексте
Указывает на структуру COINSTALLER_CONTEXT_DATA .
Совместный установщик устройства возвращает одно из следующих значений:
NO_ERROR
Совместный установщик выполнил соответствующие действия для указанной функции InstallFunction, или совместный установщик определил, что ему не нужно выполнять какие-либо действия для запроса.
Совместный установщик также должен возвращать NO_ERROR, если получает нераспознанный код DIF. (Обратите внимание, что установщики классов возвращают ERROR_DI_DO_DEFAULT для нераспознанных кодов DIF.)
ERROR_DI_POSTPROCESSING_REQUIRED
Совместное средство установки выполнило все соответствующие действия для указанной функции InstallFunction и запрашивает вызов снова после того, как установщик классов обработает запрос.
Ошибка Win32
В совместном установщике произошла ошибка.
Совместный установщик не устанавливает состояние возврата ERROR_DI_DO_DEFAULT. Это состояние может использоваться только установщиком классов. Если совместный установщик возвращает это состояние, SetupDiCallClassInstaller не обработает запрос DIF_Xxx должным образом. Совместный установщик может распространять возвращаемое состояние ERROR_DI_DO_DEFAULT в своем проходе постобработки, но никогда не задает это значение.
COINSTALLER_CONTEXT_DATA
COINSTALLER_CONTEXT_DATA — это контекстная структура совместного установщика, описывающая запрос на установку. Формат структуры:
typedef struct
_COINSTALLER_CONTEXT_DATA {
BOOLEAN PostProcessing;
DWORD InstallResult;
PVOID PrivateData;
} COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA;
В следующем списке описаны элементы этой структуры:
PostProcessing имеет значение TRUE , если совместный установщик вызывается после того, как соответствующий установщик класса, если таковой имеется, обработал код DIF, указанный в InstallFunction. PostProcessing доступен только для чтения для совместного установщика.
Если PostProcessing имеет значение FALSE, InstallResult не имеет значения. Если PostProcessing имеет значение TRUE, InstallResult — это текущее состояние запроса на установку. Это значение NO_ERROR или состояние ошибки, возвращенное предыдущим компонентом, вызванным для этого запроса на установку. Совместный установщик может распространять состояние, возвращая это значение для возвращаемой функции, или может возвращать другое состояние. УстановкаResult доступна только для чтения в совместном установщике.
PrivateData указывает на буфер, выделенный совместно установщиком. Если совместный установщик задает этот указатель и запрашивает постобработку, SetupDiCallClassInstaller передает указатель на соинсталлер при вызове совместного установщика для постобработки.