最可靠方式是调用 dism.exe /online /get-packages 解析纯文本输出,它无需管理员权限、免com、稳定适合自动化,且能准确列出含 kb 编号的安全补丁及其状态(如 installed、install pending),再结合注册表 currentstate 值交叉验证是否真正生效。

Windows Update日志文件位置与权限问题
系统补丁安装记录不通过标准API直接暴露,最可靠来源是 C:WindowsWindowsUpdate.log(旧版)或更现代的 ETW 日志。但注意:该文件在 Windows 10 1809+ 默认已停用,且即使存在也需管理员权限读取;普通用户进程打开会触发 Access is denied 错误。
实操建议:
- 不要硬编码路径并 fopen,先检查
GetLastError()是否返回ERROR_ACCESS_DENIED - 若目标是 Win10/11,跳过
WindowsUpdate.log,转向 WMI 或 DISM 接口 - 用
OpenProcessToken+AdjustTokenPrivileges提权无效——该日志受系统保护,提权无法绕过其 ACL
用 WMI 查询 InstalledUpdates 类(C++ 实现要点)
Win32_QuickFixEngineering 是最常用类,但它只返回 KB 编号、描述、安装时间,不包含状态(如“失败”“回滚”)。真正反映安装结果的是 Win32_InstalledWin32Program 不适用,应改用 Microsoft.Update.Session COM 接口配合 IUpdateSearcher::Search,但该方式只能查待安装项,不能查历史记录。
正确路径是 WMI 的 Win32_QuickFixEngineering,但要注意:
- 它不返回所有补丁——仅显示通过 Windows Update 安装的、且未被清理的热修复(Hotfix),SP 和累积更新可能缺失
- 必须链接
wbemuuid.lib,初始化 COM 时用COINIT_MULTITHREADED,否则CoCreateInstance返回RPC_E_WRONG_THREAD - 查询语句写成
"SELECT HotFixID, Description, InstalledOn FROM Win32_QuickFixEngineering",HotFixID字段值形如"KB5034441",不是整数
DISM 命令行输出解析(稳定、免COM、适合自动化)
比 WMI 更可靠的方式是调用 dism.exe /online /get-packages,它列出所有已部署的包(含补丁),每条记录含 Package Identity、State(如 Install Pending、Installed)、Release Type(Security Update 等)。输出为纯文本,无编码歧义,且无需管理员权限(只要能执行 dism)。
关键实操点:
- 用
CreateProcess启动dism.exe,重定向 stdout,**必须设置CREATE_NO_WINDOW和STARTF_USESTDHANDLES**,否则子进程卡住 - 逐行解析时注意:包名含空格和括号,
Package Identity行后紧跟的State行才是状态,不能靠字段索引硬切 - 过滤补丁推荐用正则匹配
^Package Identity *:.*KB\d+,避免误捕Package_for_RollupFix这类内部包
补丁状态 ≠ 安装成功,要交叉验证
仅靠 Win32_QuickFixEngineering 或 dism /get-packages 输出的 State: Installed 不能断定补丁生效。例如:某些 KB 在重启前处于 “Staged”,dism 显示 Install Pending,但系统已记录为已安装;又或者补丁被静默回滚,WMI 仍残留记录。
稳妥做法是组合判断:
- 查注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages下各 KB 子项的InstallTime和CurrentState(DWORD,值为 0x0 表示已应用) - 对关键 KB,调用
VerifyWindowsUpdate(非公开 API,不推荐)不如用systeminfo命令输出中的 “Hotfix(s)” 列表做二次比对 - 最易忽略的一点:
dism /get-packages输出中Release Type为Language Pack或Feature On Demand的条目,不是安全补丁,不应计入“系统补丁安装记录”主集合
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











