diff options
Diffstat (limited to 'src/VBox/Runtime/r3/win/RTSystemQueryDmiString-win.cpp')
-rw-r--r-- | src/VBox/Runtime/r3/win/RTSystemQueryDmiString-win.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/VBox/Runtime/r3/win/RTSystemQueryDmiString-win.cpp b/src/VBox/Runtime/r3/win/RTSystemQueryDmiString-win.cpp index 2a0e3b5d1..8621a36b0 100644 --- a/src/VBox/Runtime/r3/win/RTSystemQueryDmiString-win.cpp +++ b/src/VBox/Runtime/r3/win/RTSystemQueryDmiString-win.cpp @@ -165,8 +165,11 @@ RTDECL(int) RTSystemQueryDmiString(RTSYSDMISTR enmString, char *pszBuf, size_t c /* * Before we do anything with COM, we have to initialize it. */ + bool fUninit = true; HRESULT hrc = rtSystemDmiWinInitialize(); - if (FAILED(hrc)) + if (hrc == RPC_E_CHANGED_MODE) + fUninit = false; /* don't fail if already initialized */ + else if (FAILED(hrc)) return VERR_NOT_SUPPORTED; int rc = VERR_NOT_SUPPORTED; @@ -246,7 +249,8 @@ RTDECL(int) RTSystemQueryDmiString(RTSYSDMISTR enmString, char *pszBuf, size_t c } else hrc = E_OUTOFMEMORY; - rtSystemDmiWinTerminate(); + if (fUninit) + rtSystemDmiWinTerminate(); if (FAILED(hrc) && rc == VERR_NOT_SUPPORTED) rc = VERR_NOT_SUPPORTED; return rc; |