1
1
{
2
2
* This Source Code Form is subject to the terms of the Mozilla Public License,
3
3
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
4
- * obtain one at https ://mozilla.org/MPL/2.0/
4
+ * obtain one at http ://mozilla.org/MPL/2.0/
5
5
*
6
6
* Copyright (C) 2001-2021, Peter Johnson (@delphidabbler).
7
7
*
8
- * $Rev: 2079 $
9
- * $Date: 2021-11-27 14:29:47 +0000 (Sat, 27 Nov 2021 ) $
8
+ * $Rev: 2082 $
9
+ * $Date: 2022-01-01 10:12:03 +0000 (Sat, 01 Jan 2022 ) $
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
@@ -1247,6 +1247,18 @@ implementation
1247
1247
// - 10.0.22463.1000 (RSPRERELEASE)
1248
1248
Win11v21H2PreRel5Build = 22468 ; // Windows 11 version 21H2
1249
1249
// - 10.0.22468.1000 (RSPRERELEASE)
1250
+ Win11v21H2PreRel6Build = 22471 ; // Windows 11 version 21H2
1251
+ // - 10.0.22471.1000 (RSPRERELEASE)
1252
+ Win11v21H2PreRel7Build = 22478 ; // Windows 11 version 21H2
1253
+ // - 10.0.22478.1000 (RSPRERELEASE)
1254
+ Win11v21H2PreRel8Build = 22483 ; // Windows 11 version 21H2
1255
+ // - 10.0.22483.1000 (RSPRERELEASE)
1256
+ Win11v21H2PreRel9Build = 22489 ; // Windows 11 version 21H2
1257
+ // - 10.0.22489.1000 (RSPRERELEASE)
1258
+ Win11v21H2PreRel10Build = 22494 ;// Windows 11 version 21H2
1259
+ // - 10.0.22494.1000 (RSPRERELEASE)
1260
+ Win11v21H2PreRel11Build = 22509 ;// Windows 11 version 21H2
1261
+ // - 10.0.22509.1000 (RSPRERELEASE)
1250
1262
1251
1263
Win11FirstBuild = Win11DevBuild; // First build number of Windows 11
1252
1264
@@ -1398,6 +1410,28 @@ function IsBuildNumber(BuildNumber: DWORD): Boolean;
1398
1410
Result := VerifyVersionInfo(POSVI, VER_BUILDNUMBER, ConditionalMask);
1399
1411
end ;
1400
1412
1413
+ // Checks if any of the given build numbers match that of the current OS.
1414
+ // If current build number is in the list, FoundBN is set to the found build
1415
+ // number and True is returned. Otherwise False is returned and FoundBN is set
1416
+ // to zero.
1417
+ function FindBuildNumberFrom (const BNs: array of Integer; var FoundBN: Integer):
1418
+ Boolean;
1419
+ var
1420
+ I: Integer;
1421
+ begin
1422
+ FoundBN := 0 ;
1423
+ Result := False;
1424
+ for I := Low(BNs) to High(BNs) do
1425
+ begin
1426
+ if IsBuildNumber(BNs[I]) then
1427
+ begin
1428
+ FoundBN := BNs[I];
1429
+ Result := True;
1430
+ Break;
1431
+ end ;
1432
+ end ;
1433
+ end ;
1434
+
1401
1435
// Checks if the OS has the given product type.
1402
1436
// Assumes VerifyVersionInfo & VerSetConditionMask APIs functions are available
1403
1437
function IsWindowsProductType (ProductType: Byte): Boolean;
@@ -1631,13 +1665,6 @@ procedure InitPlatformIdEx;
1631
1665
GetProductInfo: TGetProductInfo; // pointer to GetProductInfo API function
1632
1666
SI: TSystemInfo; // structure from GetSystemInfo API call
1633
1667
1634
- // Return name of Windows Server 2019 insider preview release for given build
1635
- // number. Build must be a valid insider preview release number
1636
- function Win2019IPExtra (const Build: Integer): string;
1637
- begin
1638
- Result := Format(' Insider Preview Build %d' , [Build]);
1639
- end ;
1640
-
1641
1668
// Get OS's revision number from registry.
1642
1669
function GetOSRevisionNumber (const IsNT: Boolean): Integer;
1643
1670
begin
@@ -1824,8 +1851,8 @@ procedure InitPlatformIdEx;
1824
1851
// release of Win 11 -- well hidden eh?!
1825
1852
InternalBuildNumber := Win11v21H2Build;
1826
1853
case InternalBuildNumber of
1827
- 194 :
1828
- // First public release of Windows 11
1854
+ 194 ..MaxInt :
1855
+ // Public releases of Windows 11 have build number >= 194
1829
1856
InternalExtraUpdateInfo := ' Version 21H2' ;
1830
1857
51 , 65 , 71 , 100 , 120 , 132 , 168 :
1831
1858
InternalExtraUpdateInfo := Format(
@@ -1844,41 +1871,18 @@ procedure InitPlatformIdEx;
1844
1871
);
1845
1872
end ;
1846
1873
end
1847
- else if IsBuildNumber(Win11v21H2PreRel1Build) then
1848
- begin
1849
- InternalBuildNumber := Win11v21H2PreRel1Build;
1850
- InternalExtraUpdateInfo := Format(
1851
- ' Version 21H2 [RSPRERELEASE v10.0.%d.%d]' ,
1852
- [InternalBuildNumber, InternalRevisionNumber]
1853
- );
1854
- end
1855
- else if IsBuildNumber(Win11v21H2PreRel2Build) then
1856
- begin
1857
- InternalBuildNumber := Win11v21H2PreRel2Build;
1858
- InternalExtraUpdateInfo := Format(
1859
- ' Version 21H2 [RSPRERELEASE v10.0.%d.%d]' ,
1860
- [InternalBuildNumber, InternalRevisionNumber]
1861
- );
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
1874
+ else if FindBuildNumberFrom(
1875
+ [
1876
+ Win11v21H2PreRel1Build, Win11v21H2PreRel2Build,
1877
+ Win11v21H2PreRel3Build, Win11v21H2PreRel4Build,
1878
+ Win11v21H2PreRel5Build, Win11v21H2PreRel6Build,
1879
+ Win11v21H2PreRel7Build, Win11v21H2PreRel8Build,
1880
+ Win11v21H2PreRel9Build, Win11v21H2PreRel10Build,
1881
+ Win11v21H2PreRel11Build
1882
+ ],
1883
+ InternalBuildNumber
1884
+ ) then
1880
1885
begin
1881
- InternalBuildNumber := Win11v21H2PreRel5Build;
1882
1886
InternalExtraUpdateInfo := Format(
1883
1887
' Version 21H2 [RSPRERELEASE v10.0.%d.%d]' ,
1884
1888
[InternalBuildNumber, InternalRevisionNumber]
@@ -1925,60 +1929,20 @@ procedure InitPlatformIdEx;
1925
1929
InternalBuildNumber := Win2016v1803Build;
1926
1930
InternalExtraUpdateInfo := ' Version 1803' ;
1927
1931
end
1928
- else if IsBuildNumber(Win2019IP180320Build) then
1929
- begin
1930
- InternalBuildNumber := Win2019IP180320Build;
1931
- InternalExtraUpdateInfo := Win2019IPExtra(Win2019IP180320Build);
1932
- end
1933
- else if IsBuildNumber(Win2019IP180324Build) then
1934
- begin
1935
- InternalBuildNumber := Win2019IP180324Build;
1936
- InternalExtraUpdateInfo := Win2019IPExtra(Win2019IP180324Build);
1937
- end
1938
- else if IsBuildNumber(Win2019IP180515Build) then
1939
- begin
1940
- InternalBuildNumber := Win2019IP180515Build;
1941
- InternalExtraUpdateInfo := Win2019IPExtra(Win2019IP180515Build);
1942
- end
1943
- else if IsBuildNumber(Win2019IP180619Build) then
1944
- begin
1945
- InternalBuildNumber := Win2019IP180619Build;
1946
- InternalExtraUpdateInfo := Win2019IPExtra(Win2019IP180619Build);
1947
- end
1948
- else if IsBuildNumber(Win2019IP180710Build) then
1932
+ else if FindBuildNumberFrom(
1933
+ [
1934
+ Win2019IP180320Build, Win2019IP180324Build,
1935
+ Win2019IP180515Build, Win2019IP180619Build,
1936
+ Win2019IP180710Build, Win2019IP180716Build,
1937
+ Win2019IP180731Build, Win2019IP180814Build,
1938
+ Win2019IP180821Build, Win2019IP180828Build
1939
+ ],
1940
+ InternalBuildNumber
1941
+ ) then
1949
1942
begin
1950
- InternalBuildNumber := Win2019IP180710Build;
1951
- InternalExtraUpdateInfo := Win2019IPExtra(Win2019IP180710Build);
1952
- end
1953
- else if IsBuildNumber(Win2019IP180716Build) then
1954
- begin
1955
- InternalBuildNumber := Win2019IP180716Build;
1956
- InternalExtraUpdateInfo := Win2019IPExtra(Win2019IP180716Build);
1957
- end
1958
- else if IsBuildNumber(Win2019IP180716Build) then
1959
- begin
1960
- InternalBuildNumber := Win2019IP180716Build;
1961
- InternalExtraUpdateInfo := Win2019IPExtra(Win2019IP180716Build);
1962
- end
1963
- else if IsBuildNumber(Win2019IP180731Build) then
1964
- begin
1965
- InternalBuildNumber := Win2019IP180731Build;
1966
- InternalExtraUpdateInfo := Win2019IPExtra(Win2019IP180731Build);
1967
- end
1968
- else if IsBuildNumber(Win2019IP180814Build) then
1969
- begin
1970
- InternalBuildNumber := Win2019IP180814Build;
1971
- InternalExtraUpdateInfo := Win2019IPExtra(Win2019IP180814Build);
1972
- end
1973
- else if IsBuildNumber(Win2019IP180821Build) then
1974
- begin
1975
- InternalBuildNumber := Win2019IP180821Build;
1976
- InternalExtraUpdateInfo := Win2019IPExtra(Win2019IP180821Build);
1977
- end
1978
- else if IsBuildNumber(Win2019IP180828Build) then
1979
- begin
1980
- InternalBuildNumber := Win2019IP180828Build;
1981
- InternalExtraUpdateInfo := Win2019IPExtra(Win2019IP180828Build);
1943
+ InternalExtraUpdateInfo := Format(
1944
+ ' Insider Preview Build %d' , [InternalBuildNumber]
1945
+ );
1982
1946
end
1983
1947
else if IsBuildNumber(Win2019v1809Build) then
1984
1948
begin
0 commit comments