Fix bug in IsWuRebootPending where it uninitialized COM on failure.
Fixes other half of 6870
Sean Hall committed
Aug 19, 2022 at 13:48 UTC
5132ee4ed0220e7856dd6908753eba51e52bfada
1 file changed
+7
-2
src/burn/engine/registration.cpp
+7
-2
@@ -1613,12 +1613,14 @@ LExit:
1613
static BOOL IsWuRebootPending()
1614
{
1615
HRESULT hr = S_OK;
1616
+ BOOL fUninitializeCom = FALSE;
1617
BOOL fRebootPending = FALSE;
1618
1619
// Do a best effort to ask WU if a reboot is required. If anything goes
1620
// wrong then let's pretend a reboot is not required.
1621
hr = ::CoInitialize(NULL);
1621
- if (SUCCEEDED(hr) || RPC_E_CHANGED_MODE == hr)
1622
+ fUninitializeCom = SUCCEEDED(hr);
1623
+ if (fUninitializeCom || RPC_E_CHANGED_MODE == hr)
1624
{
1625
hr = WuaRestartRequired(&fRebootPending);
1626
if (FAILED(hr))
@@ -1626,7 +1628,10 @@ static BOOL IsWuRebootPending()
1628
fRebootPending = FALSE;
1629
}
1630
1629
- ::CoUninitialize();
1631
+ if (fUninitializeCom)
1632
+ {
1633
+ ::CoUninitialize();
1634
+ }
1635
}
1636
1637
return fRebootPending;