scoped_os_info_override_win.cc 5.5 KB

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