Bug #69642 [NEW]: Windows 10 reported as Windows 8 in phpinfo()
| From: | wenz@php.net | Date: | Fri, 15 May 2015 20:25:10 +0000 |
| Subject: | Bug #69642 [NEW]: Windows 10 reported as Windows 8 in phpinfo() | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-192685@lists.php.net to get a copy of this message | ||
From: wenz
Operating system: Windows 10
PHP version: master-Git-2015-05-15 (Git)
Package: PHP options/info functions
Bug Type: Bug
Bug description:Windows 10 reported as Windows 8 in phpinfo()
Description:
------------
The phpinfo() output on Windows 8.1 and Windows Server 2012 R2 reports
the OS as Windows 8 and Windows Server 2012.
This is due to the deprecation of GetVersionEx (which we are using) on
these platforms -
http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074%28v=vs.85%29.aspx
Once we compile the Windows builds with the Visual Studio 2013 compiler
and the Windows 8.1 (or higher) SDK,
_NT_TARGET_VERSION=$(_NT_TARGET_VERSION_LATEST) seems to help.
Alternatively, we could use a manifest file, see
https://msdn.microsoft.com/en-us/library/windows/desktop/dn481241%28v=vs.85%29.aspx.
This would require a change to the build scripts, though. Until we
actually do this, we need a different approach.
VerifyVersionInfo
(http://msdn.microsoft.com/en-us/library/windows/desktop/ms725491%28v=vs.85%29.aspx)
looked like the best solution when I tackled a related but for Windows
8.1 (#67407). However despite Microsoft originally introducing that
function to have an alternative to GetVersionEx, it looks like this
function is deprecated already, see the note at
http://blogs.msdn.com/b/chuckw/archive/2014/10/03/windows-10-technical-preview.aspx.
The first technology preview of Windows 10 reported itself as version
6.4, since the second technology preview Windows 10 identifies itself as
10.0, yet VerifyVersionInfo reports 6.2 here. Thus, even the
isWindows10OrGreater() function from the Windows 10 SDK (which uses
VerifyVersionInf) does not identify Windows 10 correctly if there is no
manifest! Incredible ...
Microsoft provides a tiny hint at
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724429%28v=vs.85%29.aspx
though: "To obtain the full version number for the operating system,
call the GetFileVersionInfo function on one of the system DLLs, such as
Kernel32.dll, then call VerQueryValue to obtain the
\\StringFileInfo\\<lang><codepage>\\ProductVersion subblock of the file
version information." I have tried to implement this to the best of my
knowledge, but for some reason I cannot use the GetFileVersionInfoSize()
function from version.dll. I hope someone with more C experience than I
have could look at the attached diff. I hope that only a little bit is
missing ... I have changed to code so that once the GetFileVersionInfo
approach works, it is used for both Windows 8.1 and Windows 10, making
the VerifyVersionInfo call obsolete.
Note: at some point, we should tackle this at a greater scale. I have
also thought about using WMI, but this seems to be overkill. Maybe using
a Manifest would be the most feasible option eventually.
I am aware that the final version of Windows 10 has not been released
yet. However I guess that PHP 7 will be released close to the release of
Windows 10, and it would not look good if our shiny new version could
not detect the new OS version number, so I would like to get that
resolved rather sooner than later.
Please let me know if I can be of any assistance with testing etc.!
Test script:
---------------
<?php
phpinfo(INFO_GENERAL);
Expected result:
----------------
Output contains "Windows 10" on a Windows 10 machine.
Actual result:
--------------
Output contains "Windows 8" (and not 10) on a Windows 10 machine.
--
Edit bug report at https://bugs.php.net/bug.php?id=69642&edit=1
--
Try a snapshot (PHP 5.4): https://bugs.php.net/fix.php?id=69642&r=trysnapshot54
Try a snapshot (PHP 5.5): https://bugs.php.net/fix.php?id=69642&r=trysnapshot55
Try a snapshot (trunk): https://bugs.php.net/fix.php?id=69642&r=trysnapshottrunk
Fixed in SVN: https://bugs.php.net/fix.php?id=69642&r=fixed
Fixed in release: https://bugs.php.net/fix.php?id=69642&r=alreadyfixed
Need backtrace: https://bugs.php.net/fix.php?id=69642&r=needtrace
Need Reproduce Script: https://bugs.php.net/fix.php?id=69642&r=needscript
Try newer version: https://bugs.php.net/fix.php?id=69642&r=oldversion
Not developer issue: https://bugs.php.net/fix.php?id=69642&r=support
Expected behavior: https://bugs.php.net/fix.php?id=69642&r=notwrong
Not enough info: https://bugs.php.net/fix.php?id=69642&r=notenoughinfo
Submitted twice: https://bugs.php.net/fix.php?id=69642&r=submittedtwice
register_globals: https://bugs.php.net/fix.php?id=69642&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=69642&r=php4
Daylight Savings: https://bugs.php.net/fix.php?id=69642&r=dst
IIS Stability: https://bugs.php.net/fix.php?id=69642&r=isapi
Install GNU Sed: https://bugs.php.net/fix.php?id=69642&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=69642&r=float
No Zend Extensions: https://bugs.php.net/fix.php?id=69642&r=nozend
MySQL Configuration Error: https://bugs.php.net/fix.php?id=69642&r=mysqlcfg