DHCP (off/server/client) rausfinden - bc++ builder 5



  • Bis jetzt habe ich das hier fertig doch irgedwie klappt es nicht. Vielleicht sieht ihr ja den Fehler. Poste mal den Code: Ist zwar viel aber egal

    // Gegen WbemUuid.Lib linken! 
    
    #include <windows.h> 
    #include <tchar.h> 
    #include <wbemdisp.h> 
    #include <cassert> 
    
    HRESULT GetObjectProperty(ISWbemObject* pObject, LPCWSTR pwszPropertyName, VARIANT* pValue) 
    { 
        ISWbemPropertySet*  pPropSet    = NULL; 
        ISWbemProperty*     pProp       = NULL; 
        HRESULT             hr; 
    
        if(SUCCEEDED((hr = pObject->get_Properties_(&pPropSet)))) 
        { 
            BSTR bstrName = SysAllocString(pwszPropertyName); 
    
            if(SUCCEEDED((hr = pPropSet->Item(bstrName, 0, &pProp)))) 
            { 
                VariantInit(pValue); 
                hr = pProp->get_Value(pValue); 
                pProp->Release(); 
            } 
    
            SysFreeString(bstrName); 
            pPropSet->Release(); 
        } 
    
        return(hr); 
    } 
    
    HRESULT GetCaption(ISWbemObject* pObject, BSTR* pbstrCaption) 
    { 
        assert(!IsBadWritePtr(pbstrCaption, sizeof(*pbstrCaption))); 
        *pbstrCaption = NULL; 
    
        VARIANT var; 
        VariantInit(&var); 
    
        HRESULT hr = GetObjectProperty(pObject, L"Caption", &var); 
    
        if(FAILED(hr)) 
            return(hr); 
    
        if(SUCCEEDED((hr = VariantChangeType(&var, &var, 0, VT_BSTR)))) 
            if(NULL == (*pbstrCaption = SysAllocString(V_BSTR(&var)))) 
                hr = E_OUTOFMEMORY; 
    
        VariantClear(&var); 
        return(hr); 
    } 
    
    HRESULT GetDHCPEnabled(ISWbemObject* pObject, BOOL* pbEnabled) 
    { 
        assert(!IsBadWritePtr(pbEnabled, sizeof(*pbEnabled))); 
    
        VARIANT var; 
        VariantInit(&var); 
    
        HRESULT hr = GetObjectProperty(pObject, L"DHCPEnabled", &var); 
    
        if(FAILED(hr)) 
            return(hr); 
    
        if(SUCCEEDED((hr = VariantChangeType(&var, &var, 0, VT_BOOL)))) 
            *pbEnabled = (V_BOOL(&var) != VARIANT_FALSE); 
    
        VariantClear(&var); 
        return(hr); 
    } 
    
    int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) 
    { 
      ISWbemObjectSet* pObjectSet = NULL; 
      ISWbemServices*  pServices  = NULL; 
      ISWbemObject*    pObject    = NULL; 
      IEnumVARIANT*    pEnum      = NULL; 
      IUnknown*        pUnk       = NULL; 
      VARIANT          varItem; 
      HRESULT          hr; 
      BSTR             bstrClass; 
    
        CoInitialize(NULL); 
    
        if(SUCCEEDED(CoGetObject(OLESTR("winmgmts:"), NULL, IID_ISWbemServices, (void**)&pServices))) 
        { 
            bstrClass = SysAllocString(OLESTR("Win32_NetworkAdapterConfiguration")); 
    
            if(SUCCEEDED(pServices->InstancesOf(bstrClass, 0, NULL, &pObjectSet))) 
            { 
                if(SUCCEEDED(pObjectSet->get__NewEnum(&pUnk))) 
                { 
                    if(SUCCEEDED(pUnk->QueryInterface(IID_IEnumVARIANT, (void**)&pEnum))) 
                    { 
                        while(S_OK == pEnum->Next(1, &varItem, NULL)) 
                        { 
                            if(FAILED(VariantChangeType(&varItem, &varItem, 0, VT_UNKNOWN))) 
                            { 
                                VariantClear(&varItem); 
                                continue; 
                            } 
    
                            pObject = NULL;                        
                            hr = V_UNKNOWN(&varItem)->QueryInterface(IID_ISWbemObject, (void**)&pObject); 
                            VariantClear(&varItem); 
    
                            if(FAILED(hr)) 
                                continue; 
    
                            BSTR bstrCaption; 
                            BOOL bEnabled; 
    
                            GetCaption(pObject, &bstrCaption); 
                            GetDHCPEnabled(pObject, &bEnabled); 
    
                            WCHAR szMessage[256]; 
                            wsprintfW(szMessage, L"DHCPEnabled = %u", bEnabled); 
                            MessageBoxW(NULL, szMessage, bstrCaption, MB_OK); 
    
                            SysFreeString(bstrCaption); 
                            pObject->Release(); 
                        } 
                        pEnum->Release(); 
                    } 
                    pUnk->Release(); 
                } 
                pObjectSet->Release(); 
            } 
            SysFreeString(bstrClass); 
            pServices->Release(); 
        } 
        CoUninitialize(); 
        return(0); 
    }
    


  • Also bei mir geht der Code ohne Probleme...



  • Sorry aber wie hast du es zum laufen gekriegt. Bei mir kommt keine Fehlermeldung aber es macht nicht. Hast du vielleicht eine Ahnung weshalb. Vorschläge. Finde auch keine Fehler. 😡



  • Jochen Kalmbach schrieb:

    Also bei mir geht der Code ohne Probleme...

    Sorry die Frage galt dir hatte vergessen dein Beitrag zu setzen.



  • Ich hab VS2003...



  • DHCP (off/server/client) rausfinden - bc++ builder 5



  • DHCP (off/server/client) rausfinden - bc++ builder 5



  • Dobi schrieb:

    jetzt frag ich mich, warum das ein array is, und kein normaler string.

    Da einem Netzwerkadapter mehrere IP-Adressen zugeorndet sein können.

    Dobi schrieb:

    normal muesste das vom inhalt und der art wie man es behandelt doch genau wie string DHCPServer; sein, oder?

    Eben nicht (vielleicht auf Deinem Heim-PC... aber Server haben oft mehrere).

    Dobi schrieb:

    also jetzt meine frage: wie komme ich an die ip adresse ran?

    Mit den SafeArray... Funktionen:
    http://msdn.microsoft.com/library/en-us/automat/html/28a00e34-3b5e-4a16-9f4c-dd2a72dc8e46.asp



  • DHCP (off/server/client) rausfinden - bc++ builder 5



  • HRESULT GetIPAddresses(ISWbemObject* pObject)
    {
        VARIANT var;
        VariantInit(&var);
    
        HRESULT hr = GetObjectProperty(pObject, L"IPAddress", &var);
    
        if(FAILED(hr))
            return(hr);
    
        if (V_VT(&var) == (VT_ARRAY | VT_VARIANT))
        {
          SAFEARRAY *psa = var.parray;
          hr = SafeArrayLock(psa);
          if (FAILED(hr))
            return hr;
          LONG lLbound;
          hr = SafeArrayGetLBound(psa, 1, &lLbound);
          if (SUCCEEDED(hr))
          {
            LONG lUbound;
            hr = SafeArrayGetUBound(psa, 1, &lUbound);
            if (SUCCEEDED(hr))
            {
              for(LONG idx=lLbound; idx<=lUbound; idx++)
              {
                VARIANT *pVar;
                if (FAILED(SafeArrayPtrOfIndex(psa, &idx, (void**) &pVar)))
                  continue;
                VARIANT var;
                VariantInit(&var);
                if(SUCCEEDED((hr = VariantChangeType(&var, pVar, 0, VT_BSTR))))
                {
                  wprintf(L"%s", V_BSTR(&var));
                }
              }
            }
          }
    
          SafeArrayUnlock(psa);
        }
        VariantClear(&var);
        return(hr);
    }
    

Anmelden zum Antworten