From 5132ee4ed0220e7856dd6908753eba51e52bfada Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 19 Aug 2022 13:48:15 -0500 Subject: Fix bug in IsWuRebootPending where it uninitialized COM on failure. Fixes other half of 6870 --- src/burn/engine/registration.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/burn') diff --git a/src/burn/engine/registration.cpp b/src/burn/engine/registration.cpp index 35100336..0117a993 100644 --- a/src/burn/engine/registration.cpp +++ b/src/burn/engine/registration.cpp @@ -1613,12 +1613,14 @@ LExit: static BOOL IsWuRebootPending() { HRESULT hr = S_OK; + BOOL fUninitializeCom = FALSE; BOOL fRebootPending = FALSE; // Do a best effort to ask WU if a reboot is required. If anything goes // wrong then let's pretend a reboot is not required. hr = ::CoInitialize(NULL); - if (SUCCEEDED(hr) || RPC_E_CHANGED_MODE == hr) + fUninitializeCom = SUCCEEDED(hr); + if (fUninitializeCom || RPC_E_CHANGED_MODE == hr) { hr = WuaRestartRequired(&fRebootPending); if (FAILED(hr)) @@ -1626,7 +1628,10 @@ static BOOL IsWuRebootPending() fRebootPending = FALSE; } - ::CoUninitialize(); + if (fUninitializeCom) + { + ::CoUninitialize(); + } } return fRebootPending; -- cgit v1.2.3-55-g6feb