看流星社区

 找回密码
 注册账号
查看: 2159|回复: 0

得到操作系统版本号

[复制链接]

该用户从未签到

发表于 2017-6-2 13:31:16 | 显示全部楼层 |阅读模式
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
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-19 11:00

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表