SP_DEVINSTALL_PARAMS_W结构(setupapi.h)
SP_DEVINSTALL_PARAMS结构包含与特定设备信息元素关联的设备安装参数或与设备信息集全局关联的设备安装参数。
语法
typedef struct _SP_DEVINSTALL_PARAMS_W {
DWORD cbSize;
DWORD Flags;
DWORD FlagsEx;
HWND hwndParent;
PSP_FILE_CALLBACK InstallMsgHandler;
PVOID InstallMsgHandlerContext;
HSPFILEQ FileQueue;
ULONG_PTR ClassInstallReserved;
DWORD Reserved;
WCHAR DriverPath[MAX_PATH];
} SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W;
成员
cbSize
SP_DEVINSTALL_PARAMS结构的大小(以字节为单位)。
Flags
用于控制安装和用户界面操作的标志。 在发送设备安装请求之前,可以设置某些标志,而其他标志在处理某些请求期间会自动设置。 标志 可以是以下值的组合。
标志值在组中列出:设备安装应用程序 和安装程序可写、只读(仅由 OS 设置)、保留和过时。 第一个组列出可写的标志:
DI_CLASSINSTALLPARAMS
设置为使用类安装参数。 SetupDiSetClassInstallParams 调用方指定参数时设置此标志,并在调用方 指定 NULL 参数指针时清除标志。
DI_COMPAT_FROM_CLASS
设置为强制 SetupDiBuildDriverInfoList 从其类驱动程序列表而不是 INF 文件生成设备的兼容驱动程序列表。
DI_DRIVERPAGE_ADDED
如果安装程序提供替换系统提供的驱动程序属性页的页面,则由类安装程序或共同安装程序设置。 如果设置了此标志,则操作系统不会显示系统提供的驱动程序页。
DI_DONOTCALLCONFIGMG
设置在执行某些设备安装函数时不应调用配置管理器以删除或恢复设备(例如,SetupDiInstallDevice)。
如果设置了此标志,则设备安装应用程序、类安装程序和共同安装程序不得调用以下函数:
CM_Reenumerate_DevNodeCM_Reenumerate_DevNode_ExCM_Query_And_Remove_SubTreeCM_Query_And_Remove_SubTree_ExCM_Setup_DevNodeCM_Setup_DevNode_ExCM_Set_HW_Prof_FlagsCM_Set_HW_Prof_Flags_ExCM_Enable_DevNodeCM_Enable_DevNode_ExCM_Disable_DevNodeCM_Disable_DevNode_Ex
DI_ENUMSINGLEINF
设置安装程序和其他 设备安装组件 应仅搜索由SP_DEVINSTALL_PARAMS指定的 INF 文件。DriverPath。 如果设置了此标志,DriverPath 包含单个 INF 文件的路径,而不是目录的路径。
DI_INF_IS_SORTED
设置为指示“选择设备”页应按它们在 INF 文件中显示的顺序列出驱动程序,而不是按字母顺序对驱动程序进行排序。
DI_INSTALLDISABLED
设置设备是否应默认处于禁用状态。 若要识别,必须在 Windows 调用 DIF_INSTALLDEVICE 请求的默认处理程序之前设置此标志。
DI_NEEDREBOOT
对于基于 NT 的操作系统,如果设备要求在设备安装或设备状态更改后重启计算机,则会设置此标志。 如果安装程序确定需要重启,类安装程序或共同安装程序可以随时在设备安装期间设置此标志。
DI_NEEDRESTART
与DI_NEEDREBOOT相同。
DI_NOBROWSE
设置为在用户选择 OEM 磁盘路径时禁用浏览。 设备安装应用程序将此标志设置为限制用户仅从安装媒体位置进行安装。
DI_NODI_DEFAULTACTION
如果类安装程序返回ERR_DI_DO_DEFAULT或没有类安装程序,则设置 SetupDiCallClassInstaller 不应执行任何默认操作。
DI_NOFILECOPY
设置设备安装应用程序和组件(如 SetupDiInstallDevice)是否应跳过文件复制。
DI_NOVCP
设置为禁用创建新复制队列。 在SP_DEVINSTALL_PARAMS中使用调用方提供的复制队列。FileQueue。
DI_NOWRITE_IDS
设置为防止 SetupDiInstallDevice 将 INF 指定的 硬件 ID 和 兼容的 ID 写入设备节点的设备属性(开发节点)。 仅应为根枚举设备设置此标志。
此标志替代DI_FLAGSEX_ALWAYSWRITEIDS标志。
DI_PROPERTIES_CHANGE
如果更改了设备的属性,则由设备管理器设置,这需要更新安装程序的用户界面。
DI_QUIETINSTALL
如果设备安装程序功能必须保持无提示,并尽可能使用默认选项,请设置。 如果设置了此标志,类安装程序和共同安装程序不得显示任何 UI。
DI_RESOURCEPAGE_ADDED
如果安装程序提供替换系统提供的资源属性页的页面,则由类安装程序或共同安装程序设置。 如果设置了此标志,则操作系统不会显示系统提供的资源页。
DI_SHOWOEM
设置为允许对 OEM 磁盘的支持。 如果设置了此标志,则操作系统在“选择设备”页上显示“有磁盘”按钮。 默认情况下,此标志在系统提供的向导中设置。
DI_USECI_SELECTSTRINGS
设置类安装程序或共同安装程序提供的字符串是否应在 SetupDiSelectDevice期间使用。
以下标志是只读的(仅由 OS 设置):
DI_DIDCLASS
设置 SetupDiBuildDriverInfoList 是否已为此类设备生成驱动程序列表。 如果已生成此列表,则它包含所有驱动程序信息,并且始终设置此标志。 SetupDiDestroyDriverInfoList 删除类驱动程序列表时清除此标志。
此标志是只读的。 只有操作系统设置此标志。
DI_DIDCOMPAT
设置 SetupDiBuildDriverInfoList 是否已为此设备生成兼容驱动程序列表。 如果已生成此列表,则它包含所有驱动程序信息,并且始终设置此标志。 SetupDiDestroyDriverInfoList 删除兼容的驱动程序列表时清除此标志。
此标志仅在与特定设备信息元素关联的设备安装参数中设置,而不是在设备信息集整体的参数中设置。
此标志是只读的。 只有操作系统设置此标志。
DI_MULTMFGS
如果 设备设置类的驱动程序列表 包含由多个制造商提供的驱动程序,则由 SetupDiBuildDriverInfoList 设置。
此标志是只读的。 只有操作系统设置此标志。
保留以下标志:
DI_AUTOASSIGNRES
DI_DISABLED
DI_FORCECOPY
DI_GENERALPAGE_ADDED
DI_OVERRIDE_INFFLAGS
DI_SHOWALL
DI_SHOWCLASS
DI_SHOWCOMPAT
以下标志已过时:
DI_NOSELECTICONS
DI_PROPS_NOCHANGEUSAGE
FlagsEx
提供对安装和用户界面操作的控制的其他标志。 某些标志可以在调用设备安装程序函数之前设置,而其他标志是在处理某些函数期间自动设置的。 FlagsEx 可以是以下值的组合。
标志值在组中列出:设备安装应用程序和安装程序可写、只读(仅由 OS 设置)、保留和过时。
第一个组列出可写的标志:
DI_FLAGSEX_ALLOWEXCLUDEDDRVS
如果已设置,请包含标记为“从选择中排除”的驱动程序。
例如,如果设置了此标志,SetupDiSelectDevice 显示具有“从选择中排除”状态的驱动程序,SetupDiBuildDriverInfoList 在请求的驱动程序列表中包括“从 Select 驱动程序中排除”。
如果驱动程序在 INF 文件中标记为 ExcludeFromSelect,或者它是在类安装程序 INF 中 NoInstallClass 或 NoUseClass 标记整个安装程序类的设备驱动程序,则驱动程序为“从选择中排除”。 PnP 设备的驱动程序通常是“从选择中排除”;不应手动安装 PnP 设备。 若要为 PnP 设备生成驱动程序文件列表,SetupDiBuildDriverInfoList 的调用方必须设置此标志。
DI_FLAGSEX_ALWAYSWRITEIDS
如果设置且DI_NOWRITE_IDS标志明确,请始终将硬件和兼容的 ID 写入开发节点的设备属性。 仅应为根枚举设备设置此标志。
DI_FLAGSEX_APPENDDRIVERLIST
如果已设置,SetupDiBuildDriverInfoList 将新的驱动程序列表追加到现有列表中。 搜索多个位置时,此标志是相关的。
DI_FLAGSEX_DRIVERLIST_FROM_URL
如果已设置,请从 SP_DEVINSTALL_PARAMS 中指定的 URL 从 INF(s)生成驱动程序列表。DriverPath。 如果 DriverPath 为空字符串,请使用 Windows 更新网站。
目前,操作系统不支持 URL。 使用此标志可指示 SetupDiBuildDriverInfoList 搜索 Windows 更新网站。
如果未设置DI_QUIETINSTALL,请不要设置此标志。
DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS
如果已设置,则生成驱动程序列表时不要包含旧的 Internet 驱动程序。 每当为设备生成潜在驱动程序列表时,都应设置此标志。 如果只是获取当前为设备安装的驱动程序列表,则可以清除此标志。
DI_FLAGSEX_FILTERCLASSES
如果已设置,SetupDiBuildClassInfoList 将检查类包含筛选器。 这意味着,如果设备类被标记为 NoInstallClass,则不会将其包含在类列表中。
DI_FLAGSEX_FILTERSIMILARDRIVERS
(Windows XP 及更高版本)。如果设置,SetupDiBuildDriverInfoList 在生成类驱动程序列表时包括“相似”驱动程序。 “相似”驱动程序是其中一个硬件 ID 或兼容 ID 在 INF 文件中部分(或完全)匹配硬件 ID 或硬件兼容的 ID 之一。
DI_FLAGSEX_FINISHINSTALL_ACTION
(Windows Vista 及更高版本)。有关详细信息,请参阅 将设备标记为具有执行 Finish-Install 操作。
DI_FLAGSEX_INET_DRIVER
如果已设置,则从 Internet 获取驱动程序。 Windows 不会使用设备的 INF 来安装未来的设备,因为 Windows 无法保证它可以从 Internet 再次检索驱动程序文件。
DI_FLAGSEX_INSTALLEDDRIVER
(Windows XP 及更高版本)。如果设置,SetupDiBuildDriverInfoList 在创建类驱动程序或与设备兼容的驱动程序的列表时仅包含当前安装的驱动程序。
DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE
(Windows XP 及更高版本)。如果设置,在创建类驱动程序列表时,SetupDiBuildDriverInfoList 将不会合并来自同一 INF 且具有相同驱动程序说明和排名的驱动程序列表中的节点。
DI_FLAGSEX_NO_DRVREG_MODIFY
请勿处理设备的硬件和软件(驱动程序)密钥的 AddReg 和 DelReg 条目。 也就是说,INF 文件中的 AddReg 和 DelReg 条目 DDInstall,DDInstall。HW 部分。
DI_FLAGSEX_POWERPAGE_ADDED
如果已设置,安装程序会为电源属性对话框添加自己的页面。 操作系统不会显示系统提供的电源属性页。 仅当设备支持电源管理时,此标志才相关。
DI_FLAGSEX_PROPCHANGE_PENDING
如果已设置,则用户对一个或多个设备属性表进行了更改。 属性页提供程序通常设置此标志。
当用户关闭设备属性表时,Device Manager 会检查DI_FLAGSEX_PROPCHANGE_PENDING标志。 如果设置了此标志,Device Manager 将清除此标志,设置DI_PROPERTIES_CHANGE标志,并向安装程序发送DIF_PROPERTYCHANGE请求,以通知它们已发生更改。
DI_FLAGSEX_RECURSIVESEARCH
(Windows Vista 及更高版本)。如果设置,SetupDiBuildDriverInfoList 搜索 DriverPath 值中指定的路径中的 INF 时,搜索将递归。
DI_FLAGSEX_SEARCH_PUBLISHED_INFS
(Windows Vista 及更高版本)。如果已设置,则当 SetupDiBuildDriverInfoList 用于搜索没有指定 INF 路径或搜索路径的 INF 时,这会将搜索限制为仅导入到驱动程序存储中的 INF。
DI_FLAGSEX_SETFAILEDINSTALL
如果安装失败,请设置。 如果设置了此标志,则 SetupDiInstallDevice 函数只需在设备的 ConfigFlags 注册表值中设置 FAILEDINSTALL 标志。 如果设置了DI_FLAGSEX_SETFAILEDINSTALL,则共同安装程序必须返回NO_ERROR以响应DIF_INSTALLDEVICE,而类安装程序必须返回NO_ERROR或ERROR_DI_DO_DEFAULT。
DI_FLAGSEX_USECLASSFORCOMPAT
生成兼容驱动程序列表时,筛选设备上的安装程序类上的 INF 文件。 如果已知设备设置类,则设置此标志可以减少在搜索未预编译的 INF 文件时生成兼容驱动程序列表所需的时间。 如果设置了DI_COMPAT_FROM_CLASS,则忽略此标志。
以下标志是只读的;仅操作系统设置以下标志:
DI_FLAGSEX_CI_FAILED
如果类安装程序无法加载或启动,则由操作系统设置。 此标志是只读的。
DI_FLAGSEX_DIDCOMPATINFO
Windows 已生成与设备兼容的 驱动程序节点 列表。 此标志是只读的。
DI_FLAGSEX_DIDINFOLIST
Windows 已生成驱动程序节点列表,其中包括指定安装程序类的 INF 文件中列出的所有驱动程序。 如果指定的安装类 NULL,因为 HDEVINFO 集或设备没有关联的类,则该列表包括所有可用 INF 文件中的所有驱动程序节点。 此标志是只读的。
DI_FLAGSEX_IN_SYSTEM_SETUP
如果已设置,则初始系统设置期间发生安装。 此标志是只读的。
以下标志是保留的,不应使用:
DI_FLAGSEX_ALTPLATFORM_DRVSEARCH
DI_FLAGSEX_BACKUPONREPLACE
DI_FLAGSEX_DEVICECHANGE
DI_FLAGSEX_OLDINF_IN_CLASSLIST
DI_FLAGSEX_PREINSTALLBACKUP
DI_FLAGSEX_RESTART_DEVICE_ONLY
DI_FLAGSEX_USEOLDINFSEARCH
以下标志已过时:
DI_FLAGSEX_AUTOSELECTRANK0
DI_FLAGSEX_NOUIONQUERYREMOVE
hwndParent
将拥有与此设备相关的用户界面对话框的窗口句柄。
InstallMsgHandler
用于在文件复制期间处理事件的回调。 例如,安装程序可以使用回调在提交文件队列时执行特殊处理。
InstallMsgHandlerContext
InstallMsgHandler 回调使用的专用数据。
FileQueue
调用方提供的文件队列的句柄,其中应对文件操作进行排队但未提交。
如果将文件队列与设备信息集(SetupDiSetDeviceInstallParams)相关联,则必须在删除设备信息集之前取消关联队列。 如果无法取消关联文件队列,Windows 无法在设备信息集上递减其引用计数,并且无法释放内存。
仅当设置了DI_NOVCP标志时,才使用此队列,指示应排队但未提交文件操作。
ClassInstallReserved
类安装程序数据的指针。 共同安装程序不得使用此字段。
Reserved
保留。 仅供内部使用。
DriverPath[MAX_PATH]
SetupDiBuildDriverInfoList 函数使用此路径。
言论
注意
setupapi.h 标头将SP_DEVINSTALL_PARAMS定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
标头 | setupapi.h (包括 Setupapi.h) |