일단 새 앱이 시작되면 이벤트를 가져 오는 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 업데이트 3, 최신 Windows 10 x64 Professional.
당신이 pEnumerator에 릴리스()를 호출합니까? 또한 COM 객체입니다 – Matt
@matt, 시도했으나 도움이되지 않았습니다 – Starl1ght
DebugDiag DebugDiag : https://www.microsoft.com/en-us/download/details.aspx?id=49924 – Matt