윈도우 XP 시점인가를 기점으로 VerifyVersionInfo라는 함수가 생겼다. 등록 정보에서 호환성 모드를 설정한 경우에 GetVersion/GetVerionEx 함수가 페이크 값을 리턴하면서 원본 값을 구하기 위해서 생긴 함수였다. 근데 이게 윈도우 10 되면서 또 무용지물이 되었다.
윈도우 10부터 매니페스트에 윈도우 10을 타겟으로 컴파일되지 않은 바이너리는 GetVersion/GetVersionEx/VerifyVersionInfo 모두 페이크 값을 전달하도록 변경됐기 때문이다. 이뭐병 ㅠㅜ~
Applications not manifested for Windows 8.1 or Windows 10 Technical Preview will return the Windows 8 OS version value (6.2). Once an application is manifested for a given operating system version, GetVersionEx will always return the version that the application is manifested for in future releases. To manifest your applications for Windows 8.1 or Windows 10 Technical Preview, refer to Targeting your application for Windows.
– https://msdn.microsoft.com/en-us/library/windows/desktop/ms724451(v=vs.85).aspx
원본 값을 구하고 싶은 경우에는 VersionHelpers.h에 포함된 IsWindows10OrGreater 함수를 사용하면 된다. 결국은 RtlGetVersion 이라는 함수를 사용해서 버전을 구하는 꼼수를 보여주고 있다. 이 무슨 병신같은 시츄에이션인지 ㅠㅜ~