处理 DIF 代码

注意

不支持本部分所述的功能,并且包含这些功能的驱动程序包将不再收到 Microsoft 签名。 请参阅 使用通用 INF 文件

设备安装应用程序通过调用 SetupDiCallClassInstaller设备安装功能代码 (DIF 代码) 发送到安装程序。 此函数又调用安装程序的入口点函数。 有关安装程序入口点的说明,请参阅:

辅助安装程序界面

每个 DIF 代码的参考页包含以下部分:

发送时间
描述设备安装应用程序发送此 DIF 请求的典型时间和原因。

谁处理
指定允许哪些安装程序处理此请求。 安装程序包括类安装程序、类辅助安装程序 (安装程序类范围的辅助安装程序) ,以及设备辅助安装程序 (特定于设备的辅助安装程序) 。

安装程序输入
除了 DIF 代码, SetupDiCallClassInstaller 还提供与特定请求相关的其他信息。 有关每个请求中提供的信息的详细信息,请参阅每个 DIF 代码的参考页。 以下列表包含其他输入参数的一般说明,并列出了安装程序可以调用以处理参数的设备 安装 函数 (SetupDiXxx 函数) :

DeviceInfoSet
提供设备信息集的句柄。

句柄是不透明的。 例如,使用 句柄标识调用 SetupDiXxx 函数时设置的设备信息。

DeviceInfoSet 可能具有关联的设备设置类。 如果是这样,请调用 SetupDiGetDeviceInfoListClass 以获取类 GUID。

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

设备安装参数
这些间接参数以 SP_DEVINSTALL_PARAMS 结构提供设备安装的信息。 如果 DeviceInfoData 不为 NULL,则存在与 DeviceInfoData 关联的设备安装参数。 如果 DeviceInfoDataNULL,则设备安装参数与 DeviceInfoSet 相关联。

调用 SetupDiGetDeviceInstallParams 以获取设备安装参数。

类安装参数
可选的间接参数特定于特定的 DIF 请求。 这些实质上是“DIF 请求参数”。例如,DIF_REMOVE安装请求的类安装参数包含在SP_REMOVEDEVICE_PARAMS结构中。

每个 SP_XXX_PARAMS 结构都以固定大小的SP_CLASSINSTALL_HEADER结构开头。

调用 SetupDiGetClassInstallParams 以获取类安装参数。

如果 DIF 请求具有类安装参数,则存在一组与 DeviceInfoSet 关联的参数,如果 DIF 请求指定 DeviceInfoData) ,则存在另一组与 DeviceInfoData 关联的参数 (。 SetupDiGetClassInstallParams 返回最具体的可用参数。

上下文
共同安装程序具有可选的上下文参数。

安装程序输出
描述此 DIF 代码的预期输出。

如果安装程序修改了设备安装参数,则安装程序必须调用 SetupDiSetDeviceInstallParams 以在返回之前应用更改。 同样,如果安装程序修改 DIF 代码的类安装参数,则安装程序必须调用 SetupDiSetClassInstallParams

安装程序返回值
指定 DIF 代码的相应返回值。 有关返回值的详细信息,请参阅下图。

默认 DIF 代码处理程序
指定 SetupDiXxx 函数,该函数对 DIF 代码执行系统定义的默认操作。 并非所有 DIF 代码都具有默认处理程序。 除非辅助安装程序或类安装程序采取措施阻止调用默认处理程序,否则 SetupDiCallClassInstaller 在调用类安装程序 (之后,但在调用为后处理) 注册的任何辅助安装程序之前,会调用 DIF 代码的默认处理程序。

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

如果类安装程序成功处理 DIF 代码(包括直接调用默认处理程序),则类安装程序应返回NO_ERROR并且 SetupDiCallClassInstaller 随后不会再次调用默认处理程序。 请注意,类安装程序可以直接调用默认处理程序,但类安装程序绝不应尝试取代默认处理程序的操作。

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

共同安装程序 不应 调用默认的 DIF 代码处理程序。

安装程序操作
介绍安装程序处理 DIF 请求可能采取的典型步骤。

另请参阅
列出相关信息的源。

下图显示了 SetupDiCallClassInstaller 中用于处理 DIF 代码的事件序列。

说明 setupdicallclassinstaller 中 dif 代码处理的流程的示意图。

操作系统为每个 DIF 代码执行一些操作。 供应商提供的辅助安装程序和类安装程序可以参与安装活动。 请注意,即使 DIF 代码失败, SetupDiCallClassInstaller 也会调用注册后处理的共同安装程序。