in platforms/Windows/CustomActions/SwiftInstaller/Sources/swift_installer.cc [96:126]
std::vector<std::wstring> available_versions() noexcept {
HKEY hKey;
if (FAILED(RegOpenKeyExW(HKEY_LOCAL_MACHINE, kits_installed_roots_keypath,
0, KEY_READ, &hKey)))
return {};
windows::raii::hkey key{hKey};
DWORD cSubKeys;
DWORD cbMaxSubKeyLen;
if (FAILED(RegQueryInfoKeyW(hKey, nullptr, nullptr, nullptr, &cSubKeys,
&cbMaxSubKeyLen, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr)))
return {};
std::vector<wchar_t> buffer;
buffer.resize(static_cast<size_t>(cbMaxSubKeyLen) + 1);
std::vector<std::wstring> versions;
for (DWORD dwIndex = 0; dwIndex < cSubKeys; ++dwIndex) {
DWORD cchName = cbMaxSubKeyLen + 1;
// TODO(compnerd) handle error
(void)RegEnumKeyExW(hKey, dwIndex, buffer.data(), &cchName, nullptr,
nullptr, nullptr, nullptr);
versions.emplace_back(buffer.data());
}
return versions;
}