SetupScanFileQueueW 函数 (setupapi.h)

[此函数可用于“要求”部分所示的操作系统。 在后续版本中可能会更改或不可用。 不应再使用 SetupAPI 来安装应用程序。 请改用 Windows Installer 来开发应用程序安装程序。 SetupAPI 继续用于安装设备驱动程序。]

SetupScanFileQueue 函数扫描安装文件队列,对其复制列表中的每个节点执行操作。 操作由一组标志指定。 可以在提交队列之前或之后调用此函数。

语法

WINSETUPAPI BOOL SetupScanFileQueueW(
  [in]  HSPFILEQ            FileQueue,
  [in]  DWORD               Flags,
  [in]  HWND                Window,
  [in]  PSP_FILE_CALLBACK_W CallbackRoutine,
  [in]  PVOID               CallbackContext,
  [out] PDWORD              Result
);

参数

[in] FileQueue

处理要扫描或迭代其复制列表的设置文件队列。

[in] Flags

要合并以控制文件队列扫描操作的标志。 请注意,必须指定SPQ_SCAN_FILE_PRESENCE、SPQ_SCAN_USE_CALLBACK、SPQ_SCAN_USE_CALLBACKEX或SPQ_SCAN_FILE_VALIDITY。

意义
SPQ_SCAN_FILE_PRESENCE
复制队列中的目标文件已存在于目标上。
SPQ_SCAN_FILE_VALIDITY
复制队列中的目标文件已存在于具有有效签名的目标上。 适用于 Windows 2000 及更高版本。
SPQ_SCAN_USE_CALLBACK
队列的每个节点的回调例程。 如果回调例程返回非零值,队列处理将停止,SetupScanFileQueue 返回零。 发出 SPFILENOTIFY_QUEUESCAN 通知代码,并将指针作为 param1传递给目标路径。
SPQ_SCAN_USE_CALLBACKEX
队列的每个节点的回调例程。 如果回调例程返回非零值,队列处理将停止,SetupScanFileQueue 返回零。 发出SPFILENOTIFY_QUEUESCAN_EX通知,并将指向 FILEPATHS 结构的指针作为 Param1传递。 SPQ_SCAN_USE_CALLBACKEX还会检查文件是否具有有效的签名。 从 Windows 2000 开始可用。 仅在 Windows XP 上,可以通过将此标志与SPQ_SCAN_FILE_PRESENCE组合来关闭签名检查。
SPQ_SCAN_INFORM_USER
当队列中的所有文件通过检查有效签名时指定的标志。 SetupScanFileQueue 告知用户操作需要目标上已有的文件。 如果未指定SPQ_SCAN_FILE_PRESENCE或SPQ_SCAN_FILE_VALIDITY,则忽略此标志。 此标志不能用于SPQ_SCAN_PRUNE_COPY_QUEUE或SPQ_SCAN_PRUNE_DELREN。
SPQ_SCAN_PRUNE_COPY_QUEUE
结合SPQ_SCAN_FILE_PRESENCE,从复制队列中删除现有条目。 与SPQ_SCAN_FILE_VALIDITY结合使用时,从复制队列中删除已签名的条目。 从 Windows 2000 开始可用。 仅在 Windows XP 上,删除队列或重命名队列中指定的文件不会被修剪,除非指定了SPQ_SCAN_PRUNE_DELREN。
SPQ_SCAN_USE_CALLBACK_SIGNERINFO
从 Windows XP 开始可用。 问题SPFILENOTIFY_QUEUESCAN_SIGNERINFO通知,并将指针作为 param1 传递给 FILEPATHS_SIGNERINFO 结构。 检查每个文件是否有有效的签名,并通过回调函数报告签名信息。
SPQ_SCAN_PRUNE_DELREN
结合SPQ_SCAN_FILE_PRESENCE或SPQ_SCAN_FILE_VALIDITY,删除复制队列中的删除或重命名队列中的条目。 与SPQ_SCAN_PRUNE_COPY_QUEUE结合使用时,将从复制队列中删除的文件限制为不在删除或重命名队列中的文件。 从 Windows XP 开始可用。

[in] Window

窗口的可选句柄,用于拥有显示的对话框。 如果 标志 参数不包含SPQ_SCAN_FILE_PRESENCE,或者 标志 不包含SPQ_SCAN_INFORM_USER,则不使用此参数。

[in] CallbackRoutine

指向 FileCallback 回调函数的可选指针,该函数将在复制队列的每个节点上调用。 传递给回调函数的通知代码 SPFILENOTIFY_QUEUESCAN。 如果 标志 包含SPQ_SCAN_USE_CALLBACK,则此参数是必需的。

注释 必须提供由 CallbackRoutine指定的回调例程。 默认队列回调例程不支持 SetupScanFileQueue
 

[in] CallbackContext

指向包含传递给回调例程的调用方定义的数据的上下文的可选指针 CallbackRoutine

[out] Result

指向接收扫描操作结果的变量的指针。

返回值

如果处理队列中的所有节点,该函数将返回非零值。

如果设置了SPQ_SCAN_USE_CALLBACK标志,则 结果 中的值为 0。 CallbackRoutine 指定的回调例程将发送通知SPFILENOTIFY_QUEUESCAN。 CallbackRoutine.Param1 指定指向包含目标路径信息的数组的指针。 指针已转换为无符号整数,并且必须先重新转换为MAX_PATH元素的 TCHAR 数组,然后回调例程才能访问信息。 CallbackRoutine.Param2 设置为SPQ_DELAYED_COPY当前队列节点正在使用中,并且无法在系统重启之前复制。 否则,CallbackRoutine.Param2 获取值 0。

如果未设置SPQ_SCAN_USE_CALLBACK,Result 指示队列是否通过了状态或有效性检查,如下表所示。

返回代码 描述
0
队列未能通过检查或通过检查,但已指定SPQ_SCAN_INFORM_USER,并且用户想要文件的新副本。
1
队列通过了检查,如果指定了SPQ_SCAN_INFORM_USER,则用户指示不需要复制。 复制队列为空,删除或重命名队列中没有元素,因此调用方可以跳过队列提交。
2
队列通过了检查,如果指定了SPQ_SCAN_INFORM_USER,则用户指示不需要复制。 复制队列为空,但删除或重命名队列上有元素,因此调用方无法跳过队列提交。
 

如果发生错误或回调函数返回非零,该函数将返回零。 如果 结果 为非零,则它是停止队列处理的回调函数返回的值。 如果 结果 为零,可以通过调用 getLastError 来检索扩展错误信息。

言论

注意

setupapi.h 标头将 SetupScanFileQueue 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows XP [仅限桌面应用]
支持的最低服务器 Windows Server 2003 [仅限桌面应用]
目标平台 窗户
标头 setupapi.h
Setupapi.lib
DLL Setupapi.dll

另请参阅

FileCallback

Functions

概述

SetupCommitFileQueue

SetupDefaultQueueCallback