WILとWindows Update Agent API(WUA API)でWindowsUpdateAgentInfoを作成・管理してWUA APIのバージョンを取得するサンプルコードです。
// C++20 #include <iostream> #pragma comment(lib, "propsys.lib") #define STRICT #define NOMINMAX #include <Windows.h> #include <propvarutil.h> #include <wuapi.h> #include <wil/com.h> #include <wil/resource.h> namespace wil_util { using namespace wil; template <typename T> concept com_raw_ptr_callable = requires(T t) { com_raw_ptr(t); }; template <com_raw_ptr_callable STRING_TYPE> unique_variant make_unique_variant_from_string_failfast(STRING_TYPE& psz) { unique_variant var; FAIL_FAST_IF_FAILED(InitVariantFromString(str_raw_ptr(psz), &var)); return std::move(var); } inline auto make_cotaskmem_string_from_variant_get_failfast(const VARIANT& var) { LPWSTR psz; FAIL_FAST_IF_FAILED(VariantGetStringElem(var, 0, &psz)); return make_cotaskmem_string_failfast(psz); } } int main() { auto couninit = wil::CoInitializeEx_failfast(); auto infoIdApiMajorVersion = wil_util::make_unique_variant_from_string_failfast(L"ApiMajorVersion"); auto infoIdApiMinorVersion = wil_util::make_unique_variant_from_string_failfast(L"ApiMinorVersion"); auto infoIdProductVersionString = wil_util::make_unique_variant_from_string_failfast(L"ProductVersionString"); auto windowsUpdateAgentInfo = wil::CoCreateInstanceFailFast<WindowsUpdateAgentInfo, IWindowsUpdateAgentInfo>(); wil::unique_variant apiMajorVersion; wil::unique_variant apiMinorVersion; wil::unique_variant productVersionString; FAIL_FAST_IF_FAILED(windowsUpdateAgentInfo->GetInfo(infoIdApiMajorVersion, &apiMajorVersion)); FAIL_FAST_IF_FAILED(windowsUpdateAgentInfo->GetInfo(infoIdApiMinorVersion, &apiMinorVersion)); FAIL_FAST_IF_FAILED(windowsUpdateAgentInfo->GetInfo(infoIdProductVersionString, &productVersionString)); std::wcout << L"API Version: " << apiMajorVersion.intVal << L"." << apiMinorVersion.intVal << std::endl; std::wcout << L"Product Version String: " << wil_util::make_cotaskmem_string_from_variant_get_failfast(productVersionString).get() << std::endl; return 0; }
参考