利用未文档化API:RtlGetNtVersionNumbers 获取系统版本号

转自:https://www.cnblogs.com/predator-wang/p/4775510.html

问题一:Windows SDK 8.1版本中的VersionHelper.h文件当中没有IsWindows10ORGreater,所以当你用IsWindows8Point1ORGreater判断出版本信息是Windows8.1以上的版本后,你就无法区分它到底是Win8.1还是Win10.

问题二:使用GetVersionEx这个API配合结构体OSVERSIONINFOEX这个方法获取版本信息,那么Win8以上的系统不论是Win8.1还是Win10都会被判定为主版本号为6,次版本号为2(即Win8的版本号)。

参考:

http://blog.csdn.net/pjl1119/article/details/8556693

和MSDN相关API说明。

那么如何区分Win8.1和Win10?

使用如下未文档化API:

RtlGetNtVersionNumbers

参考:

http://blog.csdn.net/magictong/article/details/40753519

使用方法如下:

复制代码

int main()
{
    HMODULE hm;
    if (hm = LoadLibrary("ntdll.dll"))
    {
        DWORD i = 0, j = 0, p = 0;
        typedef void (WINAPI *getver)(DWORD*, DWORD*, DWORD*);
        getver gv;
        gv = (getver)GetProcAddress(hm, "RtlGetNtVersionNumbers");
        if (gv)
        {
            gv(&i, &j, &p);
            printf("Major is %d\nMinor is %d\nOptional Build is %d\n", i, j, p);

        }

        FreeLibrary(hm);
    }
    system("pause");
    return 0;
}

复制代码

Windows7下返回结果:

Windows8.1下返回结果:

Windows10下返回结果:

这样我们即使不是用WindowsSDK10,也能区分开Win8.1和Win10了。

其他方法:

http://blog.csdn.net/k1988/article/details/47614529

其中这篇文章分析了很多方法:

http://blog.csdn.net/magictong/article/details/40753519

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值