失去操作系统版本号
得到操作系统版本号
InitWindowsVersion.h
IInitWindowsVersion.c
//************************************************************************** //* //* //* //*文件说明: //* 获取系统内核版本 //************************************************************************** #include "InitWindowsVersion.h" /************************************************************************ * 函数名称:GetWindowsVersion * 功能描述: * 参数列表: 无 * 返回 值:WIN_VER_DETAIL 枚举类型,返回操作系统类型 *************************************************************************/ WIN_VER_DETAIL GetWindowsVersion() { UNICODE_STRING ustrFuncName = { 0 }; RTL_OSVERSIONINFOEXW osverinfo = { sizeof(osverinfo) }; PFN_RtlGetVersion pfnRtlGetVersion = NULL; if (WinVersion) return WinVersion; RtlInitUnicodeString(&ustrFuncName, L"RtlGetVersion"); pfnRtlGetVersion = MmGetSystemRoutineAddress(&ustrFuncName); //The MmGetSystemRoutineAddress routine returns a pointer to a function specified by SystemRoutineName. if (pfnRtlGetVersion) { pfnRtlGetVersion((PRTL_OSVERSIONINFOW)&osverinfo); } else { PsGetVersion(&osverinfo.dwMajorVersion, &osverinfo.dwMinorVersion, &osverinfo.dwBuildNumber, NULL); } // KdPrint(("[xxxxxxxx] OSVersion NT %d.%d:%d sp%d.%d\n", // osverinfo.dwMajorVersion, osverinfo.dwMinorVersion, osverinfo.dwBuildNumber, // osverinfo.wServicePackMajor, osverinfo.wServicePackMinor)); if (osverinfo.dwMajorVersion == 5 && osverinfo.dwMinorVersion == 0) { WinVersion = WINDOWS_VERSION_2K; } else if (osverinfo.dwMajorVersion == 5 && osverinfo.dwMinorVersion == 1) { WinVersion = WINDOWS_VERSION_XP; } else if (osverinfo.dwMajorVersion == 5 && osverinfo.dwMinorVersion == 2) { if (osverinfo.wServicePackMajor==0) { WinVersion = WINDOWS_VERSION_2K3; } else { WinVersion = WINDOWS_VERSION_2K3_SP1_SP2; } } else if (osverinfo.dwMajorVersion == 6 && osverinfo.dwMinorVersion == 0) { WinVersion = WINDOWS_VERSION_2K3_SP1_SP2; } else if (osverinfo.dwMajorVersion == 6 && osverinfo.dwMinorVersion == 1) { WinVersion = WINDOWS_VERSION_7; } return WinVersion; }
InitWindowsVersion.h
#ifndef _SYSTEM_H #define _SYSTEM_H #include "ntifs.h" typedef enum WIN_VER_DETAIL { WINDOWS_VERSION_NONE, // 0 WINDOWS_VERSION_2K, WINDOWS_VERSION_XP, WINDOWS_VERSION_2K3, WINDOWS_VERSION_2K3_SP1_SP2, WINDOWS_VERSION_VISTA_2008, WINDOWS_VERSION_7 } WIN_VER_DETAIL; WIN_VER_DETAIL WinVersion; typedef NTSTATUS (NTAPI * PFN_RtlGetVersion)(OUT PRTL_OSVERSIONINFOW lpVersionInformation); WIN_VER_DETAIL GetWindowsVersion(); #endif