winver.d revision 1.1.1.1
1/** 2 * Windows API header module 3 * 4 * Translated from MinGW Windows headers 5 * 6 * Authors: Stewart Gordon 7 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 8 * Source: $(DRUNTIMESRC core/sys/windows/_winver.d) 9 */ 10module core.sys.windows.winver; 11version (Windows): 12@system: 13import core.sys.windows.w32api; 14import core.sys.windows.winbase; 15import core.sys.windows.sdkddkver; 16 17version (ANSI) {} else version = Unicode; 18pragma(lib, "version"); 19 20import core.sys.windows.windef; 21 22// FIXME: type weirdness 23enum { 24 VS_FILE_INFO = 16, 25 VS_VERSION_INFO = 1, 26 VS_USER_DEFINED = 100 27} 28 29enum { 30 VS_FFI_SIGNATURE = 0xFEEF04BD, 31 VS_FFI_STRUCVERSION = 0x10000, 32 VS_FFI_FILEFLAGSMASK = 0x3F 33} 34 35enum { 36 VS_FF_DEBUG = 1, 37 VS_FF_PRERELEASE = 2, 38 VS_FF_PATCHED = 4, 39 VS_FF_PRIVATEBUILD = 8, 40 VS_FF_INFOINFERRED = 16, 41 VS_FF_SPECIALBUILD = 32 42} 43 44enum { 45 VOS_UNKNOWN = 0, 46 VOS_DOS = 0x10000, 47 VOS_OS216 = 0x20000, 48 VOS_OS232 = 0x30000, 49 VOS_NT = 0x40000, 50 VOS__BASE = 0, 51 VOS__WINDOWS16 = 1, 52 VOS__PM16 = 2, 53 VOS__PM32 = 3, 54 VOS__WINDOWS32 = 4, 55 VOS_DOS_WINDOWS16 = 0x10001, 56 VOS_DOS_WINDOWS32 = 0x10004, 57 VOS_OS216_PM16 = 0x20002, 58 VOS_OS232_PM32 = 0x30003, 59 VOS_NT_WINDOWS32 = 0x40004 60} 61 62enum { 63 VFT_UNKNOWN = 0, 64 VFT_APP = 1, 65 VFT_DLL = 2, 66 VFT_DRV = 3, 67 VFT_FONT = 4, 68 VFT_VXD = 5, 69 VFT_STATIC_LIB = 7 70} 71 72enum { 73 VFT2_UNKNOWN = 0, 74 VFT2_DRV_PRINTER = 1, 75 VFT2_DRV_KEYBOARD = 2, 76 VFT2_DRV_LANGUAGE = 3, 77 VFT2_DRV_DISPLAY = 4, 78 VFT2_DRV_MOUSE = 5, 79 VFT2_DRV_NETWORK = 6, 80 VFT2_DRV_SYSTEM = 7, 81 VFT2_DRV_INSTALLABLE = 8, 82 VFT2_DRV_SOUND = 9, 83 VFT2_DRV_COMM = 10, 84 VFT2_DRV_INPUTMETHOD = 11, 85 VFT2_FONT_RASTER = 1, 86 VFT2_FONT_VECTOR = 2, 87 VFT2_FONT_TRUETYPE = 3 88} 89 90enum : DWORD { 91 VFFF_ISSHAREDFILE = 1 92} 93 94enum : DWORD { 95 VFF_CURNEDEST = 1, 96 VFF_FILEINUSE = 2, 97 VFF_BUFFTOOSMALL = 4 98} 99 100enum : DWORD { 101 VIFF_FORCEINSTALL = 1, 102 VIFF_DONTDELETEOLD 103} 104 105enum { 106 VIF_TEMPFILE = 0x00001, 107 VIF_MISMATCH = 0x00002, 108 VIF_SRCOLD = 0x00004, 109 VIF_DIFFLANG = 0x00008, 110 VIF_DIFFCODEPG = 0x00010, 111 VIF_DIFFTYPE = 0x00020, 112 VIF_WRITEPROT = 0x00040, 113 VIF_FILEINUSE = 0x00080, 114 VIF_OUTOFSPACE = 0x00100, 115 VIF_ACCESSVIOLATION = 0x00200, 116 VIF_SHARINGVIOLATION = 0x00400, 117 VIF_CANNOTCREATE = 0x00800, 118 VIF_CANNOTDELETE = 0x01000, 119 VIF_CANNOTRENAME = 0x02000, 120 VIF_CANNOTDELETECUR = 0x04000, 121 VIF_OUTOFMEMORY = 0x08000, 122 VIF_CANNOTREADSRC = 0x10000, 123 VIF_CANNOTREADDST = 0x20000, 124 VIF_BUFFTOOSMALL = 0x40000 125} 126 127struct VS_FIXEDFILEINFO { 128 DWORD dwSignature; 129 DWORD dwStrucVersion; 130 DWORD dwFileVersionMS; 131 DWORD dwFileVersionLS; 132 DWORD dwProductVersionMS; 133 DWORD dwProductVersionLS; 134 DWORD dwFileFlagsMask; 135 DWORD dwFileFlags; 136 DWORD dwFileOS; 137 DWORD dwFileType; 138 DWORD dwFileSubtype; 139 DWORD dwFileDateMS; 140 DWORD dwFileDateLS; 141} 142 143extern (Windows) { 144 DWORD VerFindFileA(DWORD, LPCSTR, LPCSTR, LPCSTR, LPSTR, PUINT, LPSTR, 145 PUINT); 146 DWORD VerFindFileW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, PUINT, LPWSTR, 147 PUINT); 148 DWORD VerInstallFileA(DWORD, LPCSTR, LPCSTR, LPCSTR, LPCSTR, LPCSTR, LPSTR, 149 PUINT); 150 DWORD VerInstallFileW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR, 151 LPWSTR, PUINT); 152 DWORD GetFileVersionInfoSizeA(LPCSTR, PDWORD); 153 DWORD GetFileVersionInfoSizeW(LPCWSTR, PDWORD); 154 BOOL GetFileVersionInfoA(LPCSTR, DWORD, DWORD, PVOID); 155 BOOL GetFileVersionInfoW(LPCWSTR, DWORD, DWORD, PVOID); 156 DWORD VerLanguageNameA(DWORD, LPSTR, DWORD); 157 DWORD VerLanguageNameW(DWORD, LPWSTR, DWORD); 158 BOOL VerQueryValueA(LPCVOID, LPCSTR, LPVOID*, PUINT); 159 BOOL VerQueryValueW(LPCVOID, LPCWSTR, LPVOID*, PUINT); 160} 161 162version (Unicode) { 163 alias VerFindFileW VerFindFile; 164 alias VerQueryValueW VerQueryValue; 165 alias VerInstallFileW VerInstallFile; 166 alias GetFileVersionInfoSizeW GetFileVersionInfoSize; 167 alias GetFileVersionInfoW GetFileVersionInfo; 168 alias VerLanguageNameW VerLanguageName; 169 alias VerQueryValueW VerQueryValue; 170} else { 171 alias VerQueryValueA VerQueryValue; 172 alias VerFindFileA VerFindFile; 173 alias VerInstallFileA VerInstallFile; 174 alias GetFileVersionInfoSizeA GetFileVersionInfoSize; 175 alias GetFileVersionInfoA GetFileVersionInfo; 176 alias VerLanguageNameA VerLanguageName; 177 alias VerQueryValueA VerQueryValue; 178} 179 180alias VERSIONHELPERAPI = BOOL; 181VERSIONHELPERAPI IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor) 182{ 183 OSVERSIONINFOEXW osvi; 184 const DWORDLONG dwlConditionMask = VerSetConditionMask( 185 VerSetConditionMask( 186 VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), 187 VER_MINORVERSION, 188 VER_GREATER_EQUAL), 189 VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL 190 ); 191 osvi.dwMajorVersion = wMajorVersion; 192 osvi.dwMinorVersion = wMinorVersion; 193 osvi.wServicePackMajor = wServicePackMajor; 194 195 return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE; 196} 197 198VERSIONHELPERAPI IsWindowsXPOrGreater() 199{ 200 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0); 201} 202 203VERSIONHELPERAPI IsWindowsXPSP1OrGreater() 204{ 205 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 1); 206} 207 208VERSIONHELPERAPI IsWindowsXPSP2OrGreater() 209{ 210 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 2); 211} 212 213VERSIONHELPERAPI IsWindowsXPSP3OrGreater() 214{ 215 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 3); 216} 217 218VERSIONHELPERAPI IsWindowsVistaOrGreater() 219{ 220 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0); 221} 222 223VERSIONHELPERAPI IsWindowsVistaSP1OrGreater() 224{ 225 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 1); 226} 227 228VERSIONHELPERAPI IsWindowsVistaSP2OrGreater() 229{ 230 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 2); 231} 232 233VERSIONHELPERAPI IsWindows7OrGreater() 234{ 235 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 0); 236} 237 238VERSIONHELPERAPI IsWindows7SP1OrGreater() 239{ 240 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 1); 241} 242 243VERSIONHELPERAPI IsWindows8OrGreater() 244{ 245 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN8), LOBYTE(_WIN32_WINNT_WIN8), 0); 246} 247 248VERSIONHELPERAPI IsWindows8Point1OrGreater() 249{ 250 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0); 251} 252 253VERSIONHELPERAPI IsWindows10OrGreater() 254{ 255 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN10), LOBYTE(_WIN32_WINNT_WIN10), 0); 256} 257 258VERSIONHELPERAPI IsWindowsServer() 259{ 260 OSVERSIONINFOEXW osvi = { OSVERSIONINFOEXW.sizeof, 0, 0, 0, 0, [0], 0, 0, 0, VER_NT_WORKSTATION }; 261 const DWORDLONG dwlConditionMask = VerSetConditionMask( 0, VER_PRODUCT_TYPE, VER_EQUAL ); 262 263 return !VerifyVersionInfoW(&osvi, VER_PRODUCT_TYPE, dwlConditionMask); 264} 265