1+ #include < windows.h>
2+ #include < iostream>
3+ #include < string>
4+ #include < map>
5+
6+ struct IddCxVersionInfo {
7+ std::string windowsVersion;
8+ std::string iddcxVersion;
9+ ULONG versionValue;
10+ };
11+
12+ std::map<DWORD, IddCxVersionInfo> versionMap = {
13+ {26100 , {" Windows 11 24H2" , " 1.10" , 0x1A80 }},
14+ {22631 , {" Windows 11 23H2" , " 1.10" , 0x1A00 }},
15+ {22621 , {" Windows 11 22H2" , " 1.9" , 0x1900 }},
16+ {22000 , {" Windows 11 21H2" , " 1.8" , 0x1800 }},
17+ {19045 , {" Windows 10 22H2" , " 1.5" , 0x1500 }},
18+ {19044 , {" Windows 10 21H2" , " 1.5" , 0x1500 }},
19+ {19043 , {" Windows 10 21H1" , " 1.5" , 0x1500 }},
20+ {19042 , {" Windows 10 20H2" , " 1.5" , 0x1500 }},
21+ {19041 , {" Windows 10 20H1" , " 1.5" , 0x1500 }},
22+ {18363 , {" Windows 10 19H2" , " 1.4" , 0x1400 }},
23+ {18362 , {" Windows 10 19H1" , " 1.4" , 0x1400 }},
24+ {17763 , {" Windows 10 RS5" , " 1.3" , 0x1300 }},
25+ {17134 , {" Windows 10 RS4" , " 1.3" , 0x1300 }},
26+ {16299 , {" Windows 10 RS3" , " 1.3" , 0x1300 }},
27+ {15063 , {" Windows 10 Creators Update" , " 1.2" , 0x1200 }},
28+ {14393 , {" Windows 10 Anniversary Update" , " 1.0" , 0x1000 }},
29+ {10240 , {" Windows 10 RTM" , " 1.0" , 0x1000 }}
30+ };
31+
32+ DWORD GetWindowsBuildNumber () {
33+ OSVERSIONINFOEX osvi;
34+ ZeroMemory (&osvi, sizeof (OSVERSIONINFOEX));
35+ osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
36+
37+ HMODULE hMod = GetModuleHandleW (L" ntdll.dll" );
38+ if (hMod) {
39+ typedef NTSTATUS (WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW);
40+ RtlGetVersionPtr RtlGetVersion = (RtlGetVersionPtr)GetProcAddress (hMod, " RtlGetVersion" );
41+
42+ if (RtlGetVersion) {
43+ RTL_OSVERSIONINFOW rovi = { 0 };
44+ rovi.dwOSVersionInfoSize = sizeof (rovi);
45+ if (RtlGetVersion (&rovi) == 0 ) {
46+ return rovi.dwBuildNumber ;
47+ }
48+ }
49+ }
50+
51+ return 0 ;
52+ }
53+
54+ IddCxVersionInfo GetIddCxVersionFromBuild (DWORD buildNumber) {
55+ auto it = versionMap.find (buildNumber);
56+ if (it != versionMap.end ()) {
57+ return it->second ;
58+ }
59+
60+ for (auto & pair : versionMap) {
61+ if (buildNumber >= pair.first ) {
62+ return pair.second ;
63+ }
64+ }
65+
66+ return {" Unknown Windows Version" , " Unknown" , 0x0000 };
67+ }
68+
69+ int main () {
70+ std::cout << " IddCx Version Query Tool\n " ;
71+ std::cout << " ========================\n\n " ;
72+
73+ DWORD buildNumber = GetWindowsBuildNumber ();
74+
75+ if (buildNumber == 0 ) {
76+ std::cout << " Error: Could not retrieve Windows build number.\n " ;
77+ return 1 ;
78+ }
79+
80+ std::cout << " Windows Build Number: " << buildNumber << " \n " ;
81+
82+ IddCxVersionInfo versionInfo = GetIddCxVersionFromBuild (buildNumber);
83+
84+ std::cout << " Windows Version: " << versionInfo.windowsVersion << " \n " ;
85+ std::cout << " IddCx Version: " << versionInfo.iddcxVersion << " \n " ;
86+ std::cout << " IddCx Version Value: 0x" << std::hex << std::uppercase << versionInfo.versionValue << " \n\n " ;
87+
88+ if (versionInfo.iddcxVersion == " Unknown" ) {
89+ std::cout << " Note: This Windows build may not support IddCx or uses an unknown version.\n " ;
90+ std::cout << " IddCx was introduced in Windows 10 Creators Update (build 15063).\n " ;
91+ } else {
92+ std::cout << " IddCx Framework Information:\n " ;
93+ std::cout << " - IddCx (Indirect Display Driver Class eXtension) is a framework for\n " ;
94+ std::cout << " developing indirect display drivers in Windows.\n " ;
95+ std::cout << " - This version provides specific capabilities and APIs for indirect\n " ;
96+ std::cout << " display driver development.\n " ;
97+ }
98+
99+ std::cout << " \n Press any key to exit..." ;
100+ std::cin.get ();
101+
102+ return 0 ;
103+ }
0 commit comments