39 bool check_windows_registry_product_name(HKEY root_key,
40 const char* reg_key_path,
41 const char* reg_key_name) {
42 const size_t kProductNameBufferSize = 256;
43 char const expected_substr[] =
"Google";
48 auto rc = ::RegGetValueA(
49 root_key, reg_key_path, reg_key_name, RRF_RT_REG_SZ,
62 char buffer[kProductNameBufferSize];
65 root_key, reg_key_path, reg_key_name, RRF_RT_REG_SZ,
67 static_cast<void*
>(
buffer),
73 return strstr(
buffer, expected_substr) !=
nullptr;
79 static bool g_compute_engine_detection_done =
false;
80 static bool g_is_on_compute_engine =
false;
87 char const reg_key_path[] =
"SYSTEM\\HardwareConfig\\Current\\";
88 char const reg_key_name[] =
"SystemProductName";
92 if (!g_compute_engine_detection_done) {
93 g_is_on_compute_engine =
94 grpc_core::internal::check_windows_registry_product_name(
95 HKEY_LOCAL_MACHINE, reg_key_path, reg_key_name);
96 g_compute_engine_detection_done =
true;
99 return g_is_on_compute_engine;
102 #endif // GPR_WINDOWS