DIF_SELECTDEVICE

DIF_SELECTDEVICE请求允许安装程序参与为设备选择驱动程序。

发送时间

为新枚举的设备选择驱动程序或为现有设备选择新驱动程序时, (更改驱动程序) 。 例如,当用户选择“添加/删除硬件”并选择调制解调器类时。 或者,用户插入 PnP 设备,并在“查找新硬件向导”中选择“从列表中选择驱动程序”。

谁处理

类辅助安装程序

可以处理

设备辅助安装程序

不处理

类安装程序

可以处理

安装程序输入

DeviceInfoSet
为包含要为其选择驱动程序 的设备的设备信息集 提供句柄。 有一个与 DeviceInfoSet 关联的设备安装类

DeviceInfoData
(可选)提供指向 SP_DEVINFO_DATA 结构的指针,该结构标识设备信息集中的设备。

如果 DeviceInfoDataNULL,则此请求是为与 DeviceInfoSet 关联的设备安装类选择驱动程序。

设备安装参数
如果 DeviceInfoData 不为 NULL,则设备安装参数 (SP_DEVINSTALL_PARAMS) 与 DeviceInfoData 相关联。 如果 DeviceInfoDataNULL,则存在与 DeviceInfoSet 关联的设备安装参数。

特别感兴趣的是 DriverPath,其中包含生成驱动程序列表时要使用的 INF () 的位置。

类安装参数
如果 DeviceInfoData 不为 NULL,则SP_SELECTDEVICE_PARAMS结构与DeviceInfoData 相关联。 否则,类安装参数与设备信息集作为一个整体相关联。

安装程序输出

设备安装参数
安装程序可以修改设备安装参数。 但是,它不应修改 DriverPath 字段。

类安装参数
安装程序可以修改 SP_SELECTDEVICE_PARAMS。 例如,安装程序可以在要求用户选择驱动程序的对话框中指定 Windows 要使用的标题和/或说明。

如果安装程序设置新的选择设备参数,而不是修改以前安装程序设置的参数,则安装程序必须将其未设置的字段归零。

安装程序返回值

如果辅助安装程序对此 DIF 代码不执行任何操作,它将从其预处理阶段返回NO_ERROR。 如果共同安装程序处理此 DIF 代码,则应在其预处理阶段执行此操作,并返回NO_ERROR或 Win32 错误代码。 在调用辅助安装程序进行后处理时,已选择驱动程序。

如果类安装程序成功处理此请求,并且 SetupDiCallClassInstaller 随后应调用默认处理程序,则类安装程序将返回ERROR_DI_DO_DEFAULT。

如果类安装程序成功处理此请求(包括直接调用默认处理程序),则类安装程序应返回NO_ERROR并且 SetupDiCallClassInstaller 随后不会再次调用默认处理程序。

注意 类安装程序可以直接调用默认处理程序,但类安装程序绝不应尝试取代默认处理程序的操作。

有关调用默认处理程序的详细信息,请参阅 调用默认 DIF 代码处理程序

如果类安装程序遇到错误,安装程序应返回相应的 Win32 错误代码, 并且 SetupDiCallClassInstaller 随后不会调用默认处理程序。

如果相应SP_DEVINSTALL_PARAMS结构的 DriverPath 成员不等于 NULL,但在指定路径位置没有有效的驱动程序,则类安装程序将返回ERROR_DI_BAD_PATH。 如果路径位置上没有驱动程序或存在驱动程序,但每个驱动程序的 SP_DRVINSTALL_PARAMS 结构的 Flags 成员是使用 DN_BAD_DRIVER 标志设置的,则可能会出现这种情况。 为了响应此错误代码,Windows 向用户显示错误。

默认 DIF 代码处理程序

SetupDiSelectDevice

安装程序操作

为了响应DIF_SELECTDEVICE请求,安装程序除了默认处理程序执行的操作外,还执行其设备或设备类所需的任何选择操作。 安装程序通常通过以下方式之一响应此 DIF 请求:

  • 不执行任何操作。

    如果安装程序没有特殊的选择要求,则它不会响应此 DIF 代码。 类安装程序返回ERROR_DI_DO_DEFAULT,辅助安装程序返回NO_ERROR。

  • 提供 Windows 将在选择 UI 中显示的选择字符串。

    安装程序可以提供类安装参数中的选择字符串 (SP_SELECTDEVICE_PARAMS) 。 例如,安装程序可以修改 指令 或窗口标题 标题

    如果辅助安装程序已提供 select 字符串,则类安装程序不应提供 select 字符串。 辅助安装程序可能具有更多相关信息。

    如果安装程序修改SP_SELECTDEVICE_PARAMS,安装程序还必须在SP_DEVINSTALL_PARAMS中设置DI_USECI_SELECTSTRINGS标志。

    如果安装程序成功提供选择字符串,Windows 仍必须调用默认处理程序。 因此,在这种情况下,辅助安装程序返回NO_ERROR,类安装程序返回ERROR_DI_DO_DEFAULT。

  • 修改设备安装参数。

    安装程序可以修改设备安装参数 (SP_DEVINSTALL_PARAMS) 。 例如,安装程序可能会将DI_SHOWOEM标志设置为让 Windows 显示“ 具有磁盘” 按钮。

    如果类安装程序成功修改了设备安装参数,则类安装程序将返回ERROR_DI_DO_DEFAULT。

  • 修改用户可以从中选择的驱动程序列表。

    此操作不太常见,但可行。 修改驱动程序列表的安装程序可能也提供选择字符串,也可能不提供选择字符串。

    修改驱动程序列表的安装程序通常会标记不适合设备的驱动程序 () 。 安装程序使用标志DNF_BAD_DRIVER标记此类驱动程序。 Windows 从它向用户显示的列表中省略这些驱动程序。

    安装程序通过执行以下步骤来标记错误的驱动程序:

    1. 通过使用 DriverType SPDIT_CLASSDRIVER调用 SetupDiBuildDriverInfoList 来生成驱动程序列表。
    2. 通过调用 SetupDiEnumDriverInfoSetupDiGetDriverInstallParams 获取有关列表中第一个驱动程序的信息。 如果驱动程序不适用于设备,请在参数的“ 标志 ”字段中设置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