利用未文檔化API:RtlGetNtVersionNumbers 獲取系統版本號


問題一: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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM