ツ未ヰ来ャ 发表于 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((" 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
页: [1]
查看完整版本: 得到操作系统版本号