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



  • in dem FAQ-Beitrag und dem, worauf dort verlinkt ist, findest du doch entsprechende Codes - wirklich kurz geht das eben nicht...



  • Ehrlich gesagt verstehe ich die Bspl auch nicht. Bin auch ein Neuling auf diesem Gebiet nd würde mich freuen wenn jemand sein Code falls er einen hat hochläd. Muss auch nur die Infos über die IP des Rechners und die Infos zur Subnetzmask bzw DHCP irgendwie herauskriegen. Bitte sagt jetzt nicht Bspl Code auf der ... Seite. Verstehe ich nicht wie gesagt . Könntet ja aber auch den Code kommentieren mit den Stellen die wichtig für die Sachen sind die ich brauche. Habe auch das Gefühl dasdies Dobi freuen würde 😕
    Danke für de Bemühungen 😃



  • 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