C++如何调用VerifyVersionInfo接口获取Windows系统版本号

来源:Golang编程网作者:河北彩花头衔:网络博主
导读:本期聚焦于小伙伴创作的《C++如何调用VerifyVersionInfo接口获取Windows系统版本号》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C++如何调用VerifyVersionInfo接口获取Windows系统版本号》有用,将其分享出去将是对创作者最好的鼓励。

在Windows平台开发中,获取准确的系统版本号是很多场景下的基础需求,比如程序需要根据系统版本开启不同的功能特性,或者做兼容性适配。早期开发者常通过GetVersionEx接口获取版本信息,但该接口在Windows 10之后返回的结果可能不符合预期,而VerifyVersionInfo是微软官方推荐的版本校验接口,能够准确获取系统版本相关信息。

C++如何调用VerifyVersionInfo接口获取Windows系统版本号

VerifyVersionInfo接口基本介绍

VerifyVersionInfo是Windows API中用于验证系统版本信息的函数,定义在winbase.h头文件中,对应的导入库是kernel32.lib,需要包含windows.h头文件才能使用。它的核心作用是对比传入的版本信息和当前系统的真实版本信息,同时可以获取完整的系统版本细节。

该函数的原型如下:

BOOL VerifyVersionInfo(
  LPOSVERSIONINFOEXW lpVersionInformation,
  DWORD              dwTypeMask,
  DWORDLONG          dwlConditionMask
);

参数说明:

  • lpVersionInformation:指向OSVERSIONINFOEX结构体的指针,该结构体用于存储需要校验的版本信息,调用后也会返回系统实际的版本信息
  • dwTypeMask:指定需要校验的版本信息类型,比如主版本号、次版本号、构建号等
  • dwlConditionMask:条件掩码,用于指定版本对比的规则,比如大于等于、等于等

相关结构体与辅助函数说明

OSVERSIONINFOEX结构体

OSVERSIONINFOEX是扩展的系统版本信息结构体,相比基础的OSVERSIONINFO,它包含了更多的版本相关字段,定义如下:

typedef struct _OSVERSIONINFOEXW {
  DWORD dwOSVersionInfoSize;  // 结构体大小,必须初始化
  DWORD dwMajorVersion;       // 系统主版本号
  DWORD dwMinorVersion;       // 系统次版本号
  DWORD dwBuildNumber;        // 系统构建号
  DWORD dwPlatformId;         // 平台标识,Windows NT系列为VER_PLATFORM_WIN32_NT
  WCHAR szCSDVersion[128];    // 补丁包信息,比如Service Pack版本
  WORD  wServicePackMajor;    // 补丁包主版本号
  WORD  wServicePackMinor;    // 补丁包次版本号
  WORD  wSuiteMask;           // 系统套件掩码
  BYTE  wProductType;         // 产品类型,比如工作站、服务器
  BYTE  wReserved;            // 保留字段
} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;

VerSetConditionMask辅助函数

VerSetConditionMask函数用于生成条件掩码dwlConditionMask,它的原型如下:

DWORDLONG VerSetConditionMask(
  DWORDLONG dwlConditionMask,
  DWORD     dwTypeBitMask,
  BYTE      dwConditionMask
);

参数说明:

  • dwlConditionMask:初始条件掩码,第一次调用时传入0即可
  • dwTypeBitMask:需要设置条件的版本类型,和VerifyVersionInfo的dwTypeMask对应
  • dwConditionMask:条件类型,可选值有VER_EQUAL(等于)、VER_GREATER(大于)、VER_GREATER_EQUAL(大于等于)等

C++调用VerifyVersionInfo获取系统版本完整示例

下面是完整的C++代码示例,演示如何调用VerifyVersionInfo获取当前Windows系统的版本信息:

#include <windows.h>
#include <iostream>
using namespace std;

int main() {
    // 初始化OSVERSIONINFOEX结构体
    OSVERSIONINFOEX osvi = { 0 };
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    
    // 设置需要获取的版本信息类型,这里获取主版本、次版本、构建号、平台ID
    DWORD dwTypeMask = VER_MAJORVERSION | VER_MINORVERSION | VER_BUILDNUMBER | VER_PLATFORMID;
    
    // 生成条件掩码,这里设置条件为大于等于0,目的是获取系统真实版本信息,不做对比校验
    DWORDLONG dwlConditionMask = 0;
    dwlConditionMask = VerSetConditionMask(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
    dwlConditionMask = VerSetConditionMask(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);
    dwlConditionMask = VerSetConditionMask(dwlConditionMask, VER_BUILDNUMBER, VER_GREATER_EQUAL);
    dwlConditionMask = VerSetConditionMask(dwlConditionMask, VER_PLATFORMID, VER_GREATER_EQUAL);
    
    // 调用VerifyVersionInfo获取版本信息
    if (VerifyVersionInfo(&osvi, dwTypeMask, dwlConditionMask)) {
        // 输出系统版本信息
        cout << "系统平台ID: " << osvi.dwPlatformId << endl;
        cout << "主版本号: " << osvi.dwMajorVersion << endl;
        cout << "次版本号: " << osvi.dwMinorVersion << endl;
        cout << "构建号: " << osvi.dwBuildNumber << endl;
        cout << "补丁包信息: " << osvi.szCSDVersion << endl;
        cout << "补丁包主版本: " << osvi.wServicePackMajor << endl;
        cout << "补丁包次版本: " << osvi.wServicePackMinor << endl;
    } else {
        // 获取失败,输出错误码
        DWORD errCode = GetLastError();
        cout << "获取系统版本失败,错误码: " << errCode << endl;
    }
    
    system("pause");
    return 0;
}

常见问题与注意事项

1. 结构体大小初始化问题

OSVERSIONINFOEX的dwOSVersionInfoSize字段必须设置为结构体的实际大小,否则VerifyVersionInfo调用会失败,返回错误码ERROR_INVALID_PARAMETER。

2. 条件掩码的设置逻辑

如果只需要获取系统版本信息,不需要做版本对比校验,可以将所有条件设置为大于等于0,这样无论系统版本是多少,都能正确获取到信息。如果要做版本判断,比如判断系统是否是Windows 10及以上,可以设置主版本号为10,条件为大于等于即可。

3. 系统版本对应关系

常见的Windows系统版本号对应关系如下:

系统版本主版本号次版本号构建号范围
Windows 7617600及以上
Windows 8629200及以上
Windows 8.1639600及以上
Windows 1010010240及以上
Windows 1110022000及以上

4. 权限问题

VerifyVersionInfo接口调用不需要特殊权限,普通用户权限即可正常获取系统版本信息,不需要以管理员身份运行程序。

总结

通过调用VerifyVersionInfo接口,结合OSVERSIONINFOEX结构体和VerSetConditionMask辅助函数,C++程序可以准确获取Windows系统的完整版本信息,避免了旧接口在Windows 10及以上版本获取结果不准确的问题。实际开发中可以根据获取到的版本号做对应的兼容性处理,提升程序的适配能力。

C++获取系统版本VerifyVersionInfoWindows系统版本OSVERSIONINFOEX修改时间:2026-07-18 03:06:42

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。