]> granicus.if.org Git - php/commitdiff
Backported the patch from bug #67407 into 5.5+
authorAnatol Belski <ab@php.net>
Tue, 8 Jul 2014 07:54:36 +0000 (09:54 +0200)
committerAnatol Belski <ab@php.net>
Tue, 8 Jul 2014 07:54:36 +0000 (09:54 +0200)
ext/standard/info.c

index 2c44a8260f724f8196806c7fcb00a58bbbdba8a8..b2ff32db92c07f2c7010a3e488061a47fffabce7 100644 (file)
@@ -335,11 +335,37 @@ char* php_get_windows_name()
                                        major = "Windows Server 2008 R2";
                                }
                        } else if ( osvi.dwMinorVersion == 2 ) {
-                               if( osvi.wProductType == VER_NT_WORKSTATION )  {
-                                       major = "Windows 8";
+                               /* could be Windows 8/Windows Server 2012, could be Windows 8.1/Windows Server 2012 R2 */
+                               OSVERSIONINFOEX osvi81;
+                               DWORDLONG dwlConditionMask = 0;
+                               int op = VER_GREATER_EQUAL;
+
+                               ZeroMemory(&osvi81, sizeof(OSVERSIONINFOEX));
+                               osvi81.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
+                               osvi81.dwMajorVersion = 6;
+                               osvi81.dwMinorVersion = 3;
+                               osvi81.wServicePackMajor = 0;
+
+                               VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, op);
+                               VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, op);
+                               VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMAJOR, op);
+
+                               if (VerifyVersionInfo(&osvi81, 
+                                       VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR,
+                                       dwlConditionMask)) {
+                                       osvi.dwMinorVersion = 3; /* Windows 8.1/Windows Server 2012 R2 */
+                                       if( osvi.wProductType == VER_NT_WORKSTATION )  {
+                                               major = "Windows 8.1";
+                                       } else {
+                                               major = "Windows Server 2012 R2";
+                                       }
                                } else {
-                                       major = "Windows Server 2012";
-                               }
+                                       if( osvi.wProductType == VER_NT_WORKSTATION )  {
+                                               major = "Windows 8";
+                                       } else {
+                                               major = "Windows Server 2012";
+                                       }
+                               } 
                        } else {
                                major = "Unknown Windows version";
                        }