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