我有一個WMI相關的代碼,一旦啓動新應用程序,就會得到一個事件。 我跳過了初始化部分,這裏是代碼。請注意,一切正常,所有HRESULT都是S_OK。IWbemServices-> ExecNotificationQuery中的內存泄漏?
IEnumWbemClassObject* pEnumerator = NULL;
pSvc->ExecNotificationQuery(// IWbemServices *pSvc is initialized
bstr_t("WQL"),
bstr_t("SELECT * FROM __InstanceCreationEvent WITHIN 1 "
"WHERE TargetInstance ISA 'Win32_Process'"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL, &pEnumerator);
while (pEnumerator) {
_variant_t v1, v2;
pclsObj->Get(_bstr_t(L"TargetInstance"), 0, &v1, 0, 0);
IUnknown* str = v1;
str->QueryInterface(IID_IWbemClassObject, reinterpret_cast< void** >(&pclsObj));
pclsObj->Get(bstr_t(L"Handle"), 0, &v2, 0, 0);
LONG pid{ 0 };
hr = VarI4FromStr(v2.bstrVal, LOCALE_NOUSEROVERRIDE, 409, &pid);
Internal::Inject(pid); // It's my code, not relevant here
str->Release();
pclsObj->Release();
v1.Clear();
v2.Clear();
}
此代碼取自MSDN並稍作修改。但是,它泄漏了內存,我不知道爲什麼。通過MSVC內存分析器展望爲我們提供了這樣的畫面:
從我的觀點 - 我已經清理\發佈的一切,但是,分配,就像截圖發生一次新的事件到達並且他們永遠留下。
我找到了this question,它看起來是一樣的,但沒有收到答覆。
Visual Studio 2015 Update 3,最新的Windows 10 x64 Professional。
你呼籲pEnumerator發行()?這也是COM對象 – Matt
@matt,我試過了,沒幫助 – Starl1ght
試試這個工具DebugDiag:https://www.microsoft.com/en-us/download/details.aspx?id=49924 – Matt