win 10下無法準確獲取系統版本號的修復辦法

博客文章移至這裏

win 10下通過GetVersionEx無法準確獲取系統的版本號,獲取後顯示是win 8.1的版本號,下面給出正確獲取系統版本號的方法,時間太久忘了參考自哪裏了,以後找到會補上:

//-------------------------------------------------------------------------
// 函數    : GetNtVersionNumbers
// 功能    : 調用RtlGetNtVersionNumbers獲取系統版本信息
// 返回值  : BOOL
// 附註    : 修復win8.1後無法正確獲取版本號的問題
//-------------------------------------------------------------------------
BOOL GetNtVersionNumbers(LPOSVERSIONINFO lpVersionInformation)
{
	BOOL bRet= FALSE;
	if(lpVersionInformation == NULL)
	{
		return bRet;
	}
	bRet = GetVersionEx(lpVersionInformation);
	HMODULE hModNtdll= NULL;
	if (hModNtdll= ::LoadLibrary(_T("ntdll.dll")))
	{
		typedef void (WINAPI *pfRTLGETNTVERSIONNUMBERS)(DWORD*,DWORD*, DWORD*);
		pfRTLGETNTVERSIONNUMBERS pfRtlGetNtVersionNumbers;
		pfRtlGetNtVersionNumbers = (pfRTLGETNTVERSIONNUMBERS)::GetProcAddress(hModNtdll, "RtlGetNtVersionNumbers");
		if (pfRtlGetNtVersionNumbers)
		{
			pfRtlGetNtVersionNumbers(&lpVersionInformation->dwMajorVersion, 
				&lpVersionInformation->dwMinorVersion,&lpVersionInformation->dwBuildNumber);
			lpVersionInformation->dwBuildNumber&= 0x0ffff;
			bRet = TRUE;
		}

		::FreeLibrary(hModNtdll);
		hModNtdll = NULL;
	}

	return bRet;
}


發佈了55 篇原創文章 · 獲贊 23 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章