| 229 | |
| 230 | |
| 231 | bool IsWindowsVersionOrLater( OSType target ) |
| 232 | { |
| 233 | DWORDLONG Mask = 0; |
| 234 | RTL_OSVERSIONINFOEXW versionInfo; |
| 235 | |
| 236 | ZeroMemory( &versionInfo, sizeof( versionInfo ) ); |
| 237 | versionInfo.dwOSVersionInfoSize = sizeof( RTL_OSVERSIONINFOEXW ); |
| 238 | |
| 239 | if (target == Windows10) |
| 240 | { |
| 241 | if (ntdll::RtlGetVersion && ntdll::RtlGetVersion( (PRTL_OSVERSIONINFOW)&versionInfo ) == 0) |
| 242 | return (versionInfo.dwMajorVersion == 10); |
| 243 | |
| 244 | return false; |
| 245 | } |
| 246 | |
| 247 | if (target >= WinVista) |
| 248 | { |
| 249 | versionInfo.dwMajorVersion = 6; |
| 250 | |
| 251 | switch (target) |
| 252 | { |
| 253 | case WinVista: versionInfo.dwMinorVersion = 0; break; |
| 254 | case Windows7: versionInfo.dwMinorVersion = 1; break; |
| 255 | case Windows8: versionInfo.dwMinorVersion = 2; break; |
| 256 | default: |
| 257 | break; |
| 258 | } |
| 259 | } |
| 260 | else |
| 261 | { |
| 262 | versionInfo.dwMajorVersion = 5; |
| 263 | versionInfo.dwMinorVersion = (target >= WinXP) ? 1 : 0; |
| 264 | } |
| 265 | |
| 266 | VER_SET_CONDITION( Mask, VER_MAJORVERSION, VER_GREATER_EQUAL ); |
| 267 | VER_SET_CONDITION( Mask, VER_MINORVERSION, VER_GREATER_EQUAL ); |
| 268 | VER_SET_CONDITION( Mask, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL ); |
| 269 | VER_SET_CONDITION( Mask, VER_SERVICEPACKMINOR, VER_GREATER_EQUAL ); |
| 270 | return VerifyVersionInfoW( &versionInfo, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, Mask ) != FALSE; |
| 271 | } |
| 272 | |
| 273 | OSType GetOperatingSystemType( ) |
| 274 | { |
no outgoing calls
no test coverage detected