Example of getnativesysteminfo from msdn
# Include <windows. h> <br/> # include <tchar. h> <br/> # include <stdio. h> <br/> # define bufsize 80 <br/> typedef void (winapi * pgnsi) (lpsystem_info); <br/> int _ cdecl _ tmain () <br/>{< br/> osversioninfoex osvi; <br/> system_info Si; <br/> pgnsi; <br/> bool bosversioninfoex; <br/> zeromemory (& Si, sizeof (system_info); <br/> zeromemory (& osvi, sizeof (osversioninfoex); <br/> // try calling getversionex Using the osversioninfoex structure. <br/> // if that fails, try using the osversioninfo structure. <br/> osvi. dwosversioninfosize = sizeof (osversioninfoex); <br/> If (! (Bosversioninfoex = getversionex (osversioninfo *) & osvi) <br/>{< br/> osvi. dwosversioninfosize = sizeof (osversioninfo); <br/> If (! Getversionex (osversioninfo *) & osvi) <br/> return false; <br/>}< br/> // call getnativesysteminfo if supported <br/> // or getsysteminfo otherwise. <br/> pgnsi = (pgnsi) getprocaddress (<br/> getmodulehandle (text ("kernel32.dll"), <br/> "getnativesysteminfo "); <br/> If (null! = Pgnsi) <br/> pgnsi (& Si); <br/> else getsysteminfo (& Si); <br/> switch (osvi. dwplatformid) <br/>{< br/> // test for the Windows NT product family. <br/> case ver_platform_win32_nt: <br/> // test for the specific product. <br/> If (osvi. dwmajorversion = 6 & osvi. dwminorversion = 0) <br/>{< br/> If (osvi. wproducttype = ver_nt_workstation) <br/> printf ("Windows Vista"); <br/> else printf (" Windows Server/"Longhorn/" "); <br/>}< br/> If (osvi. dwmajorversion = 5 & osvi. dwminorversion = 2) <br/>{< br/> If (getsystemmetrics (sm_serverr2) <br/> printf ("Microsoft Windows Server 2003/" R2 /""); <br/> else if (osvi. wproducttype = ver_nt_workstation & <br/> Si. wprocessorarchitecture = processor_ubunture_amd64) <br/>{< br/> printf ("Microsoft Windows XP Professional x64 editi On "); <br/>}< br/> else printf (" Microsoft Windows Server 2003, "); <br/>}< br/> If (osvi. dwmajorversion = 5 & osvi. dwminorversion = 1) <br/> printf ("Microsoft Windows XP"); <br/> If (osvi. dwmajorversion = 5 & osvi. dwminorversion = 0) <br/> printf ("Microsoft Windows 2000"); <br/> If (osvi. dwmajorversion <= 4) <br/> printf ("Microsoft Windows NT"); <br/> // test for specific pro Duct on Windows NT 4.0 SP6 and later. <br/> If (bosversioninfoex) <br/>{< br/> // test for the workstation type. <br/> If (osvi. wproducttype = ver_nt_workstation & <br/> Si. wprocessorarchitecture! = Processor_ubunture_amd64) <br/>{< br/> If (osvi. dwmajorversion = 4) <br/> printf ("Workstation 4.0"); <br/> else if (osvi. wsuitemask & ver_suite_personal) <br/> printf ("Home Edition"); <br/> else printf ("professional "); <br/>}</P> <p> // test for the server type. <br/> else if (osvi. wproducttype = ver_nt_server | <br/> osvi. wproducttype = ver_nt_domain_controller) <br/> {<B R/> If (osvi. dwmajorversion = 5 & osvi. dwminorversion = 2) <br/>{< br/> If (SI. wprocessorarchitecture ==< br/> processor_ubunture_ia64) <br/>{< br/> If (osvi. wsuitemask & ver_suite_datacenter) <br/> printf ("datacenter edition" <br/> "for itanium-based systems"); <br/> else if (osvi. wsuitemask & ver_suite_enterprise) <br/> printf ("Enterprise Edition" <br/> "for itanium-based systems "); <Br/>}< br/> else if (SI. wprocessorarchitecture ==< br/> processor_ubunture_amd64) <br/>{< br/> If (osvi. wsuitemask & ver_suite_datacenter) <br/> printf ("datacenter x64 Edition"); <br/> else if (osvi. wsuitemask & ver_suite_enterprise) <br/> printf ("Enterprise x64 Edition"); <br/> else printf ("Standard x64 Edition "); <br/>}< br/> else <br/>{< br/> If (osvi. wsuitemask & V Er_suite_datacenter) <br/> printf ("datacenter edition"); <br/> else if (osvi. wsuitemask & ver_suite_enterprise) <br/> printf ("Enterprise Edition"); <br/> else if (osvi. wsuitemask & ver_suite_blade) <br/> printf ("web edition"); <br/> else printf ("Standard Edition "); <br/>}< br/> else if (osvi. dwmajorversion = 5 & osvi. dwminorversion = 0) <br/>{< br/> If (osvi. wsuitemask & Ver_suite_datacenter) <br/> printf ("datacenter server"); <br/> else if (osvi. wsuitemask & ver_suite_enterprise) <br/> printf ("Advanced Server"); <br/> else printf ("server "); <br/>}< br/> else // Windows NT 4.0 <br/> {<br/> If (osvi. wsuitemask & ver_suite_enterprise) <br/> printf ("Server 4.0, Enterprise Edition"); <br/> else printf ("Server 4.0 "); <br/>}< br // Test for specific product on Windows NT 4.0 SP5 and earlier <br/> else <br/>{< br/> hkey; <br/> tchar szproducttype [bufsize]; <br/> DWORD dwbuflen = bufsize * sizeof (tchar); <br/> long LRET; <br/> LRET = regopenkeyex (HKEY_LOCAL_MACHINE, <br/> text ("system // CurrentControlSet // control //" <br/> "productoptions"), 0, key_query_value, & hkey); <br/> If (LRET! = Error_success) <br/> return false; <br/> LRET = regqueryvalueex (hkey, text ("producttype"), <br/> null, null, (lpbyte) szproducttype, & dwbuflen); <br/> regclosekey (hkey); <br/> If (LRET! = Error_success) | <br/> (dwbuflen> bufsize * sizeof (tchar) <br/> return false; <br/> If (lstrcmpi (text ("winnt"), szproducttype) = 0) <br/> printf ("workstation "); <br/> If (lstrcmpi (text ("lanmannt"), szproducttype) = 0) <br/> printf ("server "); <br/> If (lstrcmpi (text ("servernt"), szproducttype) = 0) <br/> printf ("Advanced Server "); <br/> printf ("% d. % d ", osvi. dwmajorversion, osvi. dwminorversion); <br/>}< br/> // display Service Pack (if any) and build number. <br/> If (osvi. dwmajorversion = 4 & <br/> lstrcmpi (osvi. szcsdversion, text ("Service Pack 6") = 0) <br/>{< br/> hkey; <br/> long LRET; <br/> // test for SP6 versus SP6a. <br/> LRET = regopenkeyex (HKEY_LOCAL_MACHINE, <br/> text ("software // Microsoft // Windows NT // CurrentVersion //" <br/> "hotfix // q246009"), 0, key_query_value, & hkey); <br/> If (LRET = error_success) <br/> printf ("Service Pack 6a (build % d)/n", <br/> osvi. dwbuildnumber & 0 xFFFF ); <br/> else // Windows NT 4.0 prior to SP6a <br/> {<br/> _ tprintf (text ("% s (build % d)/n "), <br/> osvi. szcsdversion, <br/> osvi. dwbuildnumber & 0 xFFFF); <br/>}< br/> regclosekey (hkey ); <br/>}< br/> else // not Windows NT 4.0 <br/>{< br/> _ tprintf (text ("% s (build % d) /n "), <br/> osvi. szcsdversion, <br/> osvi. dwbuildnumber & 0 xFFFF); <br/>}< br/> break; <br/> // test for the Windows ME/98/95. <br/> case ver_platform_win32_windows: <br/> If (osvi. dwmajorversion = 4 & osvi. dwminorversion = 0) <br/>{< br/> printf ("Microsoft Windows 95"); <br/> If (osvi. szcsdversion [1] = 'C' | osvi. szcsdversion [1] = 'B') <br/> printf ("osr2"); <br/>}< br/> If (osvi. dwmajorversion = 4 & osvi. dwminorversion = 10) <br/>{< br/> printf ("Microsoft Windows 98"); <br/> If (osvi. szcsdversion [1] = 'A' | osvi. szcsdversion [1] = 'B') <br/> printf ("se"); <br/>}< br/> If (osvi. dwmajorversion = 4 & osvi. dwminorversion = 90) <br/>{< br/> printf ("Microsoft Windows Millennium Edition/N"); <br/>}< br/> break; <br/> case ver_platform_win32s: <br/> printf ("Microsoft win32s/N"); <br/> break; <br/>}< br/> return true; <br/>}< br/>