3
3
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
4
4
* obtain one at http://mozilla.org/MPL/2.0/
5
5
*
6
- * Copyright (C) 2001-2020 , Peter Johnson (@delphidabbler).
6
+ * Copyright (C) 2001-2021 , Peter Johnson (@delphidabbler).
7
7
*
8
- * $Rev: 2069 $
9
- * $Date: 2021-09-14 16:00:48 +0100 (Tue, 14 Sep 2021) $
8
+ * $Rev: 2079 $
9
+ * $Date: 2021-11-27 14:29:47 +0000 (Sat, 27 Nov 2021) $
10
10
*
11
11
* This unit contains various static classes, constants, type definitions and
12
12
* global variables for use in providing information about the host computer and
@@ -1185,9 +1185,12 @@ implementation
1185
1185
https://en.wikipedia.org/wiki/Windows_Server
1186
1186
https://en.wikipedia.org/wiki/Windows_Server_2019
1187
1187
https://en.wikipedia.org/wiki/Windows_Server_2016
1188
- https://tinyurl.com/y8tfadm2
1189
- https://tinyurl.com/usupsz4a
1188
+ https://tinyurl.com/y8tfadm2 (MS Windows Server release information)
1189
+ https://tinyurl.com/usupsz4a (Win 11 Version Numbers & Build Versions)
1190
1190
https://docs.microsoft.com/en-us/lifecycle/products/windows-server-2022
1191
+ https://tinyurl.com/yj5e72jt (MS Win 10 release info)
1192
+ https://tinyurl.com/kd3weeu7 (MS Server release info)
1193
+
1191
1194
1192
1195
Note:
1193
1196
For Vista and Win 7 we have to add service pack number to these values to
@@ -1218,30 +1221,32 @@ implementation
1218
1221
Win1020H1Build = 19041 ; // Windows 10 20H1 - version 2004
1219
1222
Win1020H2Build = 19042 ; // Windows 10 20H2 - version 20H2
1220
1223
Win1021H1Build = 19043 ; // Windows 10 21H1 - version 21H1
1221
- { TODO: 2021-09-11
1222
- - Win 21H2 due late 2021
1223
- - Update following var name once Win21H2 released}
1224
- _Win1021H2Build = 19044 ; // Windows 10 21H2 - version 21H2
1224
+ Win1021H2Build = 19044 ; // Windows 10 21H2 - version 21H2
1225
1225
1226
1226
// Windows 11 ----------------------------------------------------------------
1227
- { TODO: 2021-09-11
1228
- - Add more Win11 versions as discovered. }
1229
- // NOTE: Preview and beta versions of Windows 11 report version 10.0
1227
+ // NOTE: Preview and beta & release versions of Windows 11 report version 10.0
1230
1228
Win11DevBuild = 21996 ; // Windows 11 version Dev
1231
1229
// - 10.0.21996.1 (Insider version)
1232
1230
Win11v21H2Build = 22000 ; // Version depends on revision # [Rev#]:
1233
- // Revision # 51.. 168:
1231
+ // Revision # 51,65,71,100,120,132, 168:
1234
1232
// Windows 11 version 21H2
1235
1233
// - 10.0.22000.[Rev#] (Insider version)
1236
1234
// Revision # 184
1237
1235
// Windows 11 version 21H2
1238
1236
// - 10.0.22000.184 (Beta Version)
1239
- // Revision # >=185
1240
- // Windows 11 (unknown version)
1241
- Win11c21H2PreRel1Build = 22449 ; // Windows 11 version 21H2
1237
+ // Revision # 194
1238
+ // Windows 11 version 21H2
1239
+ // - ** 1st Public Release **
1240
+ Win11v21H2PreRel1Build = 22449 ; // Windows 11 version 21H2
1242
1241
// - 10.0.22449.000 (RSPRERELEASE)
1243
- Win11c21H2PreRel2Build = 22454 ; // Windows 11 version 21H2
1242
+ Win11v21H2PreRel2Build = 22454 ; // Windows 11 version 21H2
1244
1243
// - 10.0.22454.1000 (RSPRERELEASE)
1244
+ Win11v21H2PreRel3Build = 22458 ; // Windows 11 version 21H2
1245
+ // - 10.0.22458.1000 (RSPRERELEASE)
1246
+ Win11v21H2PreRel4Build = 22463 ; // Windows 11 version 21H2
1247
+ // - 10.0.22463.1000 (RSPRERELEASE)
1248
+ Win11v21H2PreRel5Build = 22468 ; // Windows 11 version 21H2
1249
+ // - 10.0.22468.1000 (RSPRERELEASE)
1245
1250
1246
1251
Win11FirstBuild = Win11DevBuild; // First build number of Windows 11
1247
1252
@@ -1724,13 +1729,16 @@ procedure InitPlatformIdEx;
1724
1729
begin
1725
1730
case InternalMinorVersion of
1726
1731
0 :
1732
+ // ** As of 2021/10/05 all releases of Windows 10 **and**
1733
+ // Windows 11 report major version 10 and minor version 0
1727
1734
if (Win32ProductType <> VER_NT_DOMAIN_CONTROLLER)
1728
1735
and (Win32ProductType <> VER_NT_SERVER) then
1729
1736
begin
1730
1737
if IsBuildNumber(Win10TH1Build) then
1731
1738
begin
1739
+ // First public release of Window 10
1732
1740
InternalBuildNumber := Win10TH1Build;
1733
- InternalExtraUpdateInfo := ' Version 1507' ; // 1st Win 10 version
1741
+ InternalExtraUpdateInfo := ' Version 1507' ;
1734
1742
end
1735
1743
else if IsBuildNumber(Win10TH2Build) then
1736
1744
begin
@@ -1789,25 +1797,16 @@ procedure InitPlatformIdEx;
1789
1797
InternalBuildNumber := Win1021H1Build;
1790
1798
InternalExtraUpdateInfo := ' Version 21H1' ;
1791
1799
end
1792
- else if IsBuildNumber(_Win1021H2Build ) then
1800
+ else if IsBuildNumber(Win1021H2Build ) then
1793
1801
begin
1794
- { TODO: Added 2021/09/11
1795
- - Release expected late 2021
1796
- - Fix build number if necessary
1797
- - Remove underscore prefix from const name
1798
- - Fix value of InternalExtraUpdateInfo as required }
1799
- InternalBuildNumber := _Win1021H2Build;
1802
+ // From 21H2 Windows 10 moves from a 6 monthly update cycle to a
1803
+ // yearly cycle
1804
+ InternalBuildNumber := Win1021H2Build;
1800
1805
InternalExtraUpdateInfo := ' Version 21H2' ;
1801
1806
end
1802
1807
// As of 2021-09-11, Win 11 pre-releases are reporting v10.0
1803
1808
// Details taken from: https://tinyurl.com/usupsz4a
1804
- // Correct according to above web oage as of 2021-09-11
1805
- { TODO: Added 2021-09-11
1806
- - Revisit URL to check for change following official release
1807
- of Windows 11
1808
- - Add any further pre-release versions
1809
- - Check if final release has major version 11
1810
- }
1809
+ // Correct according to above web page as of 2021-09-11
1811
1810
else if IsBuildNumber(Win11DevBuild) then
1812
1811
begin
1813
1812
InternalBuildNumber := Win11DevBuild;
@@ -1821,49 +1820,74 @@ procedure InitPlatformIdEx;
1821
1820
// There are several Win 11 releases with this build number
1822
1821
// Which release we're talking about depends on the revision
1823
1822
// number.
1823
+ // *** Amazingly one of them, revision 194, is the 1st public
1824
+ // release of Win 11 -- well hidden eh?!
1824
1825
InternalBuildNumber := Win11v21H2Build;
1825
- if InternalRevisionNumber in [51 , 65 , 71 , 100 , 120 , 132 , 168 ] then
1826
- begin
1827
- InternalExtraUpdateInfo := Format(
1828
- ' Version 21H2 [Insider v10.0.%d.%d]' ,
1829
- [InternalBuildNumber, InternalRevisionNumber]
1830
- );
1831
- end
1832
- else if InternalRevisionNumber = 184 then
1833
- begin
1834
- InternalExtraUpdateInfo := Format(
1835
- ' Version 21H2 [Beta v10.0.%d.%d]' ,
1836
- [InternalBuildNumber, InternalRevisionNumber]
1837
- );
1838
- end
1839
- else
1840
- begin
1841
- InternalExtraUpdateInfo := Format(
1842
- ' Unknown release v10.0.%d.%d' ,
1843
- [InternalBuildNumber, InternalRevisionNumber]
1844
- );
1826
+ case InternalBuildNumber of
1827
+ 194 :
1828
+ // First public release of Windows 11
1829
+ InternalExtraUpdateInfo := ' Version 21H2' ;
1830
+ 51 , 65 , 71 , 100 , 120 , 132 , 168 :
1831
+ InternalExtraUpdateInfo := Format(
1832
+ ' Version 21H2 [Insider v10.0.%d.%d]' ,
1833
+ [InternalBuildNumber, InternalRevisionNumber]
1834
+ );
1835
+ 184 :
1836
+ InternalExtraUpdateInfo := Format(
1837
+ ' Version 21H2 [Beta v10.0.%d.%d]' ,
1838
+ [InternalBuildNumber, InternalRevisionNumber]
1839
+ );
1840
+ else
1841
+ InternalExtraUpdateInfo := Format(
1842
+ ' Unknown release v10.0.%d.%d' ,
1843
+ [InternalBuildNumber, InternalRevisionNumber]
1844
+ );
1845
1845
end ;
1846
1846
end
1847
- else if IsBuildNumber(Win11c21H2PreRel1Build ) then
1847
+ else if IsBuildNumber(Win11v21H2PreRel1Build ) then
1848
1848
begin
1849
- InternalBuildNumber := Win11c21H2PreRel1Build ;
1849
+ InternalBuildNumber := Win11v21H2PreRel1Build ;
1850
1850
InternalExtraUpdateInfo := Format(
1851
1851
' Version 21H2 [RSPRERELEASE v10.0.%d.%d]' ,
1852
1852
[InternalBuildNumber, InternalRevisionNumber]
1853
1853
);
1854
1854
end
1855
- else if IsBuildNumber(Win11c21H2PreRel2Build ) then
1855
+ else if IsBuildNumber(Win11v21H2PreRel2Build ) then
1856
1856
begin
1857
- InternalBuildNumber := Win11c21H2PreRel2Build ;
1857
+ InternalBuildNumber := Win11v21H2PreRel2Build ;
1858
1858
InternalExtraUpdateInfo := Format(
1859
1859
' Version 21H2 [RSPRERELEASE v10.0.%d.%d]' ,
1860
1860
[InternalBuildNumber, InternalRevisionNumber]
1861
1861
);
1862
- end ;
1862
+ end
1863
+ else if IsBuildNumber(Win11v21H2PreRel3Build) then
1864
+ begin
1865
+ InternalBuildNumber := Win11v21H2PreRel3Build;
1866
+ InternalExtraUpdateInfo := Format(
1867
+ ' Version 21H2 [RSPRERELEASE v10.0.%d.%d]' ,
1868
+ [InternalBuildNumber, InternalRevisionNumber]
1869
+ );
1870
+ end
1871
+ else if IsBuildNumber(Win11v21H2PreRel4Build) then
1872
+ begin
1873
+ InternalBuildNumber := Win11v21H2PreRel4Build;
1874
+ InternalExtraUpdateInfo := Format(
1875
+ ' Version 21H2 [RSPRERELEASE v10.0.%d.%d]' ,
1876
+ [InternalBuildNumber, InternalRevisionNumber]
1877
+ );
1878
+ end
1879
+ else if IsBuildNumber(Win11v21H2PreRel5Build) then
1880
+ begin
1881
+ InternalBuildNumber := Win11v21H2PreRel5Build;
1882
+ InternalExtraUpdateInfo := Format(
1883
+ ' Version 21H2 [RSPRERELEASE v10.0.%d.%d]' ,
1884
+ [InternalBuildNumber, InternalRevisionNumber]
1885
+ );
1886
+ end
1863
1887
end
1864
- else
1888
+ else // Win32ProductType in [VER_NT_DOMAIN_CONTROLLER, VER_NT_SERVER]
1865
1889
begin
1866
- // Check for Win Server 2016 echnical previews.
1890
+ // Check for Win Server 2016 technical previews.
1867
1891
// We don't check for TP1 // here because that reported version 6.4,
1868
1892
// not version 10!
1869
1893
if IsBuildNumber(Win2016TP2Build) then
@@ -2685,7 +2709,7 @@ class function TPJOSInfo.Product: TPJOSProduct;
2685
2709
if InternalBuildNumber < Win11FirstBuild then
2686
2710
Result := osWin10
2687
2711
else
2688
- // As of 2021-09-11 Win 11 is reporting version 10.0
2712
+ // ** As of 2021-10-05 Win 11 is reporting version 10.0!
2689
2713
Result := osWin11;
2690
2714
end
2691
2715
else
0 commit comments