xref: /aosp_15_r20/external/cronet/base/test/scoped_os_info_override_win.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2018 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/test/scoped_os_info_override_win.h"
6 
7 #include <windows.h>
8 
9 #include "base/win/windows_version.h"
10 
11 namespace base {
12 namespace test {
13 
ScopedOSInfoOverride(Type type)14 ScopedOSInfoOverride::ScopedOSInfoOverride(Type type)
15     : original_info_(base::win::OSInfo::GetInstance()),
16       overriding_info_(CreateInfoOfType(type)) {
17   *base::win::OSInfo::GetInstanceStorage() = overriding_info_.get();
18 }
19 
~ScopedOSInfoOverride()20 ScopedOSInfoOverride::~ScopedOSInfoOverride() {
21   *base::win::OSInfo::GetInstanceStorage() = original_info_;
22 }
23 
24 // static
CreateInfoOfType(Type type)25 ScopedOSInfoOverride::UniqueOsInfo ScopedOSInfoOverride::CreateInfoOfType(
26     Type type) {
27   _OSVERSIONINFOEXW version_info = {sizeof(version_info)};
28   _SYSTEM_INFO system_info = {};
29   int os_type = 0;
30 
31   switch (type) {
32     case Type::kWin11Pro:
33     case Type::kWin11Home:
34     case Type::kWin11HomeN:
35       version_info.dwMajorVersion = 10;
36       version_info.dwMinorVersion = 0;
37       version_info.dwBuildNumber = 22000;
38       version_info.wServicePackMajor = 0;
39       version_info.wServicePackMinor = 0;
40       version_info.szCSDVersion[0] = 0;
41       version_info.wProductType = VER_NT_WORKSTATION;
42       version_info.wSuiteMask = VER_SUITE_PERSONAL;
43 
44       system_info.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64;
45       system_info.dwNumberOfProcessors = 1;
46       system_info.dwAllocationGranularity = 8;
47 
48       os_type = type == Type::kWin11Home    ? PRODUCT_HOME_BASIC
49                 : type == Type::kWin11HomeN ? PRODUCT_HOME_BASIC_N
50                                             : PRODUCT_PROFESSIONAL;
51       break;
52     case Type::kWinServer2022:
53       version_info.dwMajorVersion = 10;
54       version_info.dwMinorVersion = 0;
55       version_info.dwBuildNumber = 20348;
56       version_info.wServicePackMajor = 0;
57       version_info.wServicePackMinor = 0;
58       version_info.szCSDVersion[0] = 0;
59       version_info.wProductType = VER_NT_SERVER;
60       version_info.wSuiteMask = VER_SUITE_ENTERPRISE;
61 
62       system_info.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64;
63       system_info.dwNumberOfProcessors = 4;
64       system_info.dwAllocationGranularity = 64 * 1024;
65 
66       os_type = PRODUCT_STANDARD_SERVER;
67       break;
68     case Type::kWin10Pro21H1:
69     case Type::kWin10Pro:
70     case Type::kWin10Home:
71       version_info.dwMajorVersion = 10;
72       version_info.dwMinorVersion = 0;
73       version_info.dwBuildNumber = type == Type::kWin10Pro21H1 ? 19043 : 15063;
74       version_info.wServicePackMajor = 0;
75       version_info.wServicePackMinor = 0;
76       version_info.szCSDVersion[0] = 0;
77       version_info.wProductType = VER_NT_WORKSTATION;
78       version_info.wSuiteMask = VER_SUITE_PERSONAL;
79 
80       system_info.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64;
81       system_info.dwNumberOfProcessors = 1;
82       system_info.dwAllocationGranularity = 8;
83 
84       os_type =
85           type == Type::kWin10Home ? PRODUCT_HOME_BASIC : PRODUCT_PROFESSIONAL;
86       break;
87     case Type::kWinServer2016:
88       version_info.dwMajorVersion = 10;
89       version_info.dwMinorVersion = 0;
90       version_info.dwBuildNumber = 17134;
91       version_info.wServicePackMajor = 0;
92       version_info.wServicePackMinor = 0;
93       version_info.szCSDVersion[0] = 0;
94       version_info.wProductType = VER_NT_SERVER;
95       version_info.wSuiteMask = VER_SUITE_ENTERPRISE;
96 
97       system_info.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64;
98       system_info.dwNumberOfProcessors = 4;
99       system_info.dwAllocationGranularity = 64 * 1024;
100 
101       os_type = PRODUCT_STANDARD_SERVER;
102       break;
103   }
104 
105   return UniqueOsInfo(new base::win::OSInfo(version_info, system_info, os_type),
106                       &ScopedOSInfoOverride::deleter);
107 }
108 
109 // static
deleter(base::win::OSInfo * info)110 void ScopedOSInfoOverride::deleter(base::win::OSInfo* info) {
111   delete info;
112 }
113 
114 }  // namespace test
115 }  // namespace base
116