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)14ScopedOSInfoOverride::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()20ScopedOSInfoOverride::~ScopedOSInfoOverride() { 21 *base::win::OSInfo::GetInstanceStorage() = original_info_; 22 } 23 24 // static CreateInfoOfType(Type type)25ScopedOSInfoOverride::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)110void ScopedOSInfoOverride::deleter(base::win::OSInfo* info) { 111 delete info; 112 } 113 114 } // namespace test 115 } // namespace base 116