Ich habe einen WMI-bezogenen Code, der ein Ereignis erhält, sobald die neue App gestartet wird. Ich habe Initialisierungsteil übersprungen, hier ist der Code. Beachten Sie, dass alles funktioniert, alle HRESULTs sind S_OK.Speicherverlust in 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();
}
Dieser Code wurde von MSDN übernommen und geringfügig geändert. Allerdings verliert es Speicher und ich habe keine Ahnung warum. Blick über MSVC Speicher-Profiler gibt uns dieses Bild:
Aus meiner Sicht - ich gelöscht habe \ freigegeben alles jedoch Zuweisungen, wie auf Screenshots, sobald neues Ereignis eintritt ankommen und sie bleiben für immer.
Ich habe this question gefunden, es scheint das gleiche zu sein, aber keine Antwort erhalten.
Visual Studio 2015 Update 3, aktuelles Windows 10 x 64 Professional.
Haben Sie die Release() auf pEnumerator nennen? Es ist auch ein COM-Objekt – Matt
@matt, ich habe versucht, nicht geholfen – Starl1ght
versuchen dieses Tool DebugDiag: https://www.microsoft.com/en-us/download/details.aspx?id=49924 – Matt