Problem mit WMI und CoCreateInstance()



  • Ich verwende in einer Anwendung WMI, um Hardware-ID's auszulesen.
    Das klappt auch wunderbar, solang die Anwendung nur einmal offen ist. Wenn sie aber zweimal geöffnet wird, kann nur diejenige zugreifen, die von Anfang an Zugriff hatte. Jetzt könnte man denken, ich hätte vergessen, etwas freizugeben - aber ich habe alles was ich in der MSDN gesehen habe, mit Release() wieder gelöst.
    Wenn ich die eine Anwendung, die Zugriff hat, beende, hat die andere auf einmal Zugriff. Es muss also offensichtlich irgendwas noch freigegeben werden, aber ich stoße einfach nicht drauf!

    Hier mein Code:

    int getHardwareIdentString(CString Querystring, CString Paramstring, CString& output){
    
    	IWbemLocator * locator = NULL;
    
    	int result = 0;
    
    	HRESULT hr = CoInitializeEx( 0, COINIT_MULTITHREADED );
    
    		hr = CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL,
    							CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER , 
    							IID_IUnknown, reinterpret_cast< void** >( &locator ));
    
    		if ( FAILED( hr ) )
    		{
    			AfxMessageBox("Instanz konnte nicht erstellt werden!");
    
    			CString cs;
    			CString msg = _com_error(hr).ErrorMessage();
    			cs.Format(_T("Error 0x%08x: %s"), hr, msg);
    			AfxMessageBox(cs);
    
    			return -10;
    		}
    
                    // (...) Benutzen der Instanz für Abfragen
    
    	        if(locator != NULL){
    		//AfxMessageBox("Release Locator");
    		locator->Release();
    		}
    
    	CoUninitialize();
    
    	return result;
    }
    

    Ich bekomme den Fehlercode (HRESULT) "WBEM_E_INITIALIZATION_FAILURE" von der Methode CoCreateInstance(). Bin hier langsam am Verzweifeln, kann mir jemand helfen??



  • Habe das Problem gelöst. Wenn man statt über CLSID_WbemAdministrativeLocator über CLSID_WbemLocator ght, funktioniert es wunderbar. Das war in einem MSDN Beispiel so gemacht, um die PNP-ID's verschiedener Geräte auszulesen, was ich ja auch mache - aber es geht auch so, und dann auch komplett.


Anmelden zum Antworten