Skip to content

Commit b70c140

Browse files
committed
Check dwBuildNumber to determine newer Windows versions
1 parent 80b0227 commit b70c140

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

ext/standard/info.c

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,34 @@ char* php_get_windows_name()
269269

270270
if (VER_PLATFORM_WIN32_NT==osvi.dwPlatformId && osvi.dwMajorVersion >= 10) {
271271
if (osvi.dwMajorVersion == 10) {
272-
if( osvi.dwMinorVersion == 0 ) {
273-
if( osvi.wProductType == VER_NT_WORKSTATION ) {
274-
major = "Windows 10";
272+
if (osvi.dwMinorVersion == 0) {
273+
if (osvi.wProductType == VER_NT_WORKSTATION) {
274+
if (osvi.dwBuildNumber >= 22000) {
275+
major = "Windows 11";
276+
} else {
277+
major = "Windows 10";
278+
}
275279
} else {
276-
major = "Windows Server 2016";
280+
if (osvi.dwBuildNumber >= 20348) {
281+
major = "Windows Server 2022";
282+
} else if (osvi.dwBuildNumber >= 19042) {
283+
major = "Windows Server, version 20H2";
284+
} else if (osvi.dwBuildNumber >= 19041) {
285+
major = "Windows Server, version 2004";
286+
} else if (osvi.dwBuildNumber >= 18363) {
287+
major = "Windows Server, version 1909";
288+
} else if (osvi.dwBuildNumber >= 18362) {
289+
major = "Windows Server, version 1903";
290+
} else if (osvi.dwBuildNumber >= 17763) {
291+
// could also be Windows Server, version 1809, but there's no easy way to tell
292+
major = "Windows Server 2019";
293+
} else if (osvi.dwBuildNumber >= 17134) {
294+
major = "Windows Server, version 1803";
295+
} else if (osvi.dwBuildNumber >= 16299) {
296+
major = "Windows Server, version 1709";
297+
} else {
298+
major = "Windows Server 2016";
299+
}
277300
}
278301
}
279302
}

0 commit comments

Comments
 (0)