본문 바로가기
Windows Internals

Windows 운영체제 version 및 버전 체크하는 방법 및 API

by oobw 2024. 5. 15.

Windows 운영 체제의 버전 정보를 확인하는 방법에는 여러 가지가 있습니다. Windows 8부터 GetVersionEx Windows API 함수는 기본적으로 OS 버전 번호를 6.2(Windows 8)로 반환합니다. 이는 호환성 문제를 최소화하기 위함이며, OS 버전을 정확히 확인하는 데 사용할 수 없습니다. 이 글에서는 Windows 버전을 확인하는 여러 가지 방법을 소개합니다.

Windows 운영체제 버전 리스트

먼저 이 전글에 정리했던 Windows 운영체제의 제품 이름, 내부 버전 번호 및 출시 날짜에 대한 테이블입니다.

Windows 이름 코드명 버전명 빌드번호 배포일 지원종료일
Windows 1.01 Interface Manager 1.01   1985-11-20 2001-12-31
Windows 2.01   2.01   1987-12-09 2001-12-31
Windows 2.1   2.1   1988-05-27 2001-12-31
Windows 2.11   2.11   1989-03-13 2001-12-31
Windows 3.0   3   1990-05-22 2001-12-31
Windows 3.1 Sparta 3.1 102 1992-10-31 2001-12-31
Windows NT 3.5 Daytona 3.5 807 1994-09-21 2000-12-31
Windows 95 Chicago 4.0 950 1995-08-24 2000-12-31
Windows NT 4.0 Shell Update Release 4.0 1381 1996-08-24 2004-06-30
Windows 98 Memphis 4.1 1998 1998-06-25 2006-07-11
Windows 98 SE   4.1 2222 1999-06-10 2006-07-11
Windows 2000 Windows NT 5.0 5.0 2195 2000-02-17 2010-07-13
Windows Me Millennium 4.9 3000 2000-09-14 2006-07-11
Windows XP Whistler 5.1 2600 2001-10-25 2014-04-08
Windows XP Symphony 5.1 2700 2004-10-12 2014-04-08
Windows XP Emerald 5.1 2710 2005-10-14 2014-04-08
Windows XP Anvil 5.2 3790 2005-04-25 2014-04-08
Windows Vista Longhorn 6.0 6002 2007-01-30 2017-04-11
Windows 7 Windows 7 6.1 7601 2009-10-22 2020-01-14
Windows 8 Windows 8 6.2 9200 2012-10-26 2016-01-12
Windows 8.1 Blue 6.3 9600 2013-10-17 2023-01-10
Windows 10 1507 TH (Threshold) 10.0 10240 2015-07-29 2025-10-14
Windows 10 1511 TH2 (Threshold 2) 10.0 10586 2015-11-10 2025-10-14
Windows 10 1607 RS1 (Redstone 1) 10.0 14393 2016-08-02 2025-10-14
Windows 10 1703 RS2 (Redstone 2) 10.0 15063 2017-04-05 2025-10-14
Windows 10 1709 RS3 (Redstone 3) 10.0 16299 2017-10-17 2025-10-14
Windows 10 1803 RS4 (Redstone 4) 10.0 17134 2018-04-30 2025-10-14
Windows 10 1809 RS5 (Redstone 5) 10.0 17763 2018-11-13 2025-10-14
Windows 10 1903 1903 10.0 18362 2019-05-21 2025-10-14
Windows 10 1909 1909 10.0 18363 2019-11-12 2025-10-14
Windows 10 2004 2004 10.0 19041 2020-05-27 2025-10-14
Windows 10 20H2 20H2 10.0 19042 2020-10-20 2025-10-14
Windows 10 21H1 21H1 10.0 19043 2021-05-18 2025-10-14
Windows 10 21H2 21H2 10.0 19044 2021-11-16 2025-10-14
Windows 10 22H2 22H2 10.0 19045 2022-10-18 2025-10-14
Windows 11 21H2 21H2 (Sun Valley) 10.0 22000 2021-10-05 2023-10-10
Windows 11 22H2 22H2 (Sun Valley 2) 10.0 22621 2022-09-20 2024-10-08
Windows 11 23H2 23H2 10.0 22631 2023-10-31 2025-11-11

Windows 내장 명령어 사용: ver, winver

Windows 버전 정보를 확인하기 위해 명령어를 사용할 수 있습니다.

ver 명령어

명령 프롬프트에 ver을 입력하면 현재 운영 체제의 버전 정보를 볼 수 있습니다.

C:\Users\user>ver
Microsoft Windows [Version 10.0.19042.789]

winver 명령어

또한 winver 명령을 실행하면 그래픽 인터페이스를 통해 Windows 버전 정보를 확인할 수 있습니다.

windows winver 결과

VerifyVersionInfo 함수 사용

VerifyVersionInfo 함수를 사용하여 OS의 실제 버전 정보를 검증할 수 있습니다.

#include <windows.h>
#include <iostream>

void CheckWindowsVersion() {
    OSVERSIONINFOEX osvi;
    DWORDLONG dwlConditionMask = 0;
    int op = VER_GREATER_EQUAL;

    ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    osvi.dwMajorVersion = 10;
    osvi.dwMinorVersion = 0;

    VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, op);
    VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, op);

    if (VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask)) {
        std::cout << "Windows 10 이상 버전입니다." << std::endl;
    } else {
        std::cout << "Windows 10 미만 버전입니다." << std::endl;
    }
}

int main() {
    CheckWindowsVersion();
    return 0;
}

 

이 함수는 조건을 설정하여 특정 버전 이상인지 여부를 확인합니다.

ntdll에 있는 RtlGetVersion을 활용하는 방법

아래는 Python의 ctypes 라이브러리를 이용한 구현 예제입니다.

def winver():
    '''Major, Minor, BuildNumber 의 튜플을 리턴합니다.'''
    class OSVERSIONINFOEXW(ctypes.Structure):
        _fields_ = [
            ('dwOSVersionInfoSize', wintypes.DWORD),
            ('dwMajorVersion', wintypes.DWORD),
            ('dwMinorVersion', wintypes.DWORD),
            ('dwBuildNumber', wintypes.DWORD),
            ('dwPlatformId', wintypes.DWORD),
            ('szCSDVersion', wintypes.WCHAR * 128),
            ('wServicePackMajor', wintypes.WORD),
            ('wServicePackMinor', wintypes.WORD),
            ('wSuiteMask', wintypes.WORD),
            ('wProductType', wintypes.BYTE),
            ('wReserved', wintypes.BYTE),
        ]

    os_version = OSVERSIONINFOEXW()
    os_version.dwOSVersionInfoSize = ctypes.sizeof(OSVERSIONINFOEXW)

    if ctypes.windll.Ntdll.RtlGetVersion(ctypes.byref(os_version)) == 0:
        return os_version.dwMajorVersion, os_version.dwMinorVersion, os_version.dwBuildNumber
    else:
        print("OS 버전을 확인할 수 없습니다.")

if __name__ == "__main__":
    majorN, minorN, buildN = winver()
    print(f"Windows Version: {majorN}.{minorN}.{buildN}\n")

 

이 방법은 직접 RtlGetVersion 함수를 호출하여 정확한 OS 버전 정보를 얻을 수 있습니다.

VersionHelpers의 여러가지 API 사용

IsWindows8OrGreater, IsWindows8Point1OrGreater, IsWindows10OrGreater, IsWindowsServer와 같은 최신 버전 도우미 API를 통해 간접적으로 버전 정보를 얻을 수 있습니다.

#include <VersionHelpers.h>
#include <iostream>

void CheckWindowsVersion() {
    if (IsWindows10OrGreater()) {
        std::cout << "Windows 10 이상 버전입니다." << std::endl;
    } else if (IsWindows8Point1OrGreater()) {
        std::cout << "Windows 8.1 이상 버전입니다." << std::endl;
    } else if (IsWindows8OrGreater()) {
        std::cout << "Windows 8 이상 버전입니다." << std::endl;
    } else {
        std::cout << "Windows 8 미만 버전입니다." << std::endl;
    }
}

int main() {
    CheckWindowsVersion();
    return 0;
}

 

이 API들은 다양한 Windows 버전을 확인하는 데 유용합니다.