Index: win32_api.hpp =================================================================== --- win32_api.hpp (revision 852) +++ win32_api.hpp (revision 853) @@ -1472,6 +1472,7 @@ ) ) { + CoUninitialize(); return false; } @@ -1489,6 +1490,7 @@ { pIWbemLocator->Release(); + CoUninitialize(); return false; } @@ -1510,6 +1512,7 @@ pIWbemLocator->Release(); pWbemServices->Release(); + CoUninitialize(); return false; } @@ -1522,26 +1525,37 @@ pWbemServices->Release(); pEnumObject->Release(); + CoUninitialize(); return false; } wchar_variant vwchar; - while( 0 == pEnumObject->Next( WBEM_INFINITE_IG, uCount, &pClassObject, &uReturned ) ) - { - if ( 0 == pClassObject->Get( L"LastBootUpTime", 0, &vwchar, 0, 0 ) ) - { - bRet = true; - strValue = vwchar.value.pbstrVal; - VariantClear(&vwchar ); - break; - } - } + while( 0 == pEnumObject->Next( WBEM_INFINITE_IG, uCount, &pClassObject, &uReturned ) ) + { + if (pClassObject != 0) + { + if ( 0 == pClassObject->Get( L"LastBootUpTime", 0, &vwchar, 0, 0 ) ) + { + bRet = true; + strValue = vwchar.value.pbstrVal; + VariantClear(&vwchar ); + break; + } + } + } - pIWbemLocator->Release(); - pWbemServices->Release(); - pEnumObject->Release(); - pClassObject->Release(); + if (pIWbemLocator != 0) + pIWbemLocator->Release(); + + if (pWbemServices != 0) + pWbemServices->Release(); + + if (pEnumObject != 0) + pEnumObject->Release(); + + if (pClassObject != 0) + pClassObject->Release(); } CoUninitialize();