DIF_INSTALLDEVICE
DIF_INSTALLDEVICE请求允许安装程序在安装设备之前和/或之后执行任务。
发送时间
选择驱动程序后,注册任何设备辅助安装程序,并注册任何设备接口。
谁处理
类辅助安装程序 |
可以处理 |
设备辅助安装程序 |
可以处理 |
类安装程序 |
可以处理 |
安装程序输入
DeviceInfoSet
提供包含要安装的 设备的设备信息集 的句柄。
DeviceInfoData
提供指向设备信息集中设备的 SP_DEVINFO_DATA 结构的指针。
设备安装参数
有与 DeviceInfoData 关联的SP_DEVINSTALL_PARAMS) (设备安装参数。
安装程序输出
设备安装参数
安装程序可以修改 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 代码处理程序
安装程序操作
为了响应DIF_INSTALLDEVICE请求,安装程序通常会在默认处理程序安装设备之前执行任何最终安装操作。 例如,安装程序可以为注册表中列出的设备检查并可能修改上层筛选器驱动程序和低筛选器驱动程序。
除非在设备安装参数中设置了DI_NOFILECOPY标志,否则处理此 DIF 请求的安装程序应复制设备所需的文件,例如驱动程序文件和控制面板文件。
如果DI_NOFILECOPY标志为清除,但设置了DI_NOVCP标志,则安装程序必须将所有文件操作排入所提供的文件队列,但不得提交队列。
辅助安装程序可以在其预处理阶段和/或其后处理阶段处理此 DIF 请求。 在其预处理过程中,协同安装程序执行 Windows 加载驱动程序并启动设备之前必须执行的任何操作。
在其后处理阶段,除非设置了DI_NEEDREBOOT标志,否则设备已启动并运行。 如果设置了此标志,Windows 无法使设备动态联机。
如果安装程序返回 Win32 错误代码,Windows 将放弃安装。
如果 Windows 找不到新设备的 INF 文件,它会发送DIF_INSTALLDEVICE以尝试安装 null 驱动程序。 默认处理程序 (SetupDiInstallDevice) 检查设备是否支持 原始模式 ,还是 IoReportDetectedDevice) 报告的非 PnP 设备 (,在后一种情况下,Windows 为设备安装 null 驱动程序。
如果此尝试失败,Windows 将再次发送DIF_INSTALLDEVICE,这次是在SP_DEVINSTALL_PARAMS结构中设置 DI_FLAGSEX_SETFAILEDINSTALL 标志。 在这种情况下,默认处理程序仅在设备的 ConfigFlags 注册表值中设置 FAILEDINSTALL 标志。 如果设置了DI_FLAGSEX_SETFAILEDINSTALL标志,则类安装程序必须返回NO_ERROR或ERROR_DI_DO_DEFAULT,辅助安装程序必须返回NO_ERROR。
有关 DIF 代码的详细信息,请参阅 处理 DIF 代码。
调用默认处理程序 SetupDiInstallDevice
有关何时以及如何调用 SetupDiInstallDevice 的常规信息,请参阅 调用默认 DIF 代码处理程序。
在类安装程序必须在完成所有 SetupDiInstallDevice 操作(启动设备除外)之后执行操作的极少数情况下,类安装程序必须:
执行在调用 SetupDiInstallDevice 之前必须执行的操作。
在SP_DEVINSTALL_PARAMS中设置DI_DONOTCALLCONFIGMGR标志。设备的标志 成员。 如果设置了此标志, SetupDiInstallDevice 将执行除启动设备之外的所有默认安装操作。
调用 SetupDiInstallDevice 以执行除启动设备之外的所有默认安装操作。
执行所有默认安装操作(启动设备除外)完成后必须执行的操作。
调用 SetupDiRestartDevices 以启动设备。
如果类安装程序成功完成安装操作,则返回NO_ERROR;如果安装操作失败,则返回 Win32 错误。
要求
版本 |
在 Microsoft Windows 2000 及更高版本的 Windows 中受支持。 |
标头 |
Setupapi.h (包括 Setupapi.h) |