@@ -335,11 +335,37 @@ char* php_get_windows_name()
335
335
major = "Windows Server 2008 R2" ;
336
336
}
337
337
} else if ( osvi .dwMinorVersion == 2 ) {
338
- if ( osvi .wProductType == VER_NT_WORKSTATION ) {
339
- major = "Windows 8" ;
338
+ /* could be Windows 8/Windows Server 2012, could be Windows 8.1/Windows Server 2012 R2 */
339
+ OSVERSIONINFOEX osvi81 ;
340
+ DWORDLONG dwlConditionMask = 0 ;
341
+ int op = VER_GREATER_EQUAL ;
342
+
343
+ ZeroMemory (& osvi81 , sizeof (OSVERSIONINFOEX ));
344
+ osvi81 .dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX );
345
+ osvi81 .dwMajorVersion = 6 ;
346
+ osvi81 .dwMinorVersion = 3 ;
347
+ osvi81 .wServicePackMajor = 0 ;
348
+
349
+ VER_SET_CONDITION (dwlConditionMask , VER_MAJORVERSION , op );
350
+ VER_SET_CONDITION (dwlConditionMask , VER_MINORVERSION , op );
351
+ VER_SET_CONDITION (dwlConditionMask , VER_SERVICEPACKMAJOR , op );
352
+
353
+ if (VerifyVersionInfo (& osvi81 ,
354
+ VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR ,
355
+ dwlConditionMask )) {
356
+ osvi .dwMinorVersion = 3 ; /* Windows 8.1/Windows Server 2012 R2 */
357
+ if ( osvi .wProductType == VER_NT_WORKSTATION ) {
358
+ major = "Windows 8.1" ;
359
+ } else {
360
+ major = "Windows Server 2012 R2" ;
361
+ }
340
362
} else {
341
- major = "Windows Server 2012" ;
342
- }
363
+ if ( osvi .wProductType == VER_NT_WORKSTATION ) {
364
+ major = "Windows 8" ;
365
+ } else {
366
+ major = "Windows Server 2012" ;
367
+ }
368
+ }
343
369
} else {
344
370
major = "Unknown Windows version" ;
345
371
}
0 commit comments