VirtualBox

Changeset 17713 in vbox for trunk/src/VBox/Main/win


Ignore:
Timestamp:
Mar 11, 2009 5:30:58 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
44225
Message:

NetIf/win: dhcp enabled property implementation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/win/NetIfList-win.cpp

    r17710 r17713  
    478478            if(SUCCEEDED(hr))
    479479            {
    480             }
    481         }
     480                VARIANT varReturnValue;
     481                hr = pOutParams->Get(bstr_t(L"ReturnValue"), 0,
     482                    &varReturnValue, NULL, 0);
     483                Assert(SUCCEEDED(hr));
     484                if(SUCCEEDED(hr))
     485                {
     486//                    Assert(varReturnValue.vt == VT_UINT);
     487                    int winEr = varReturnValue.uintVal;
     488                    switch(winEr)
     489                    {
     490                    case 0:
     491                        hr = S_OK;
     492                        break;
     493                    default:
     494                        hr = HRESULT_FROM_WIN32( winEr );
     495                        break;
     496                    }
     497                }
     498            }        }
    482499        SysFreeString(ClassName);
    483500    }
     
    534551            if(SUCCEEDED(hr))
    535552            {
     553                VARIANT varReturnValue;
     554                hr = pOutParams->Get(bstr_t(L"ReturnValue"), 0,
     555                    &varReturnValue, NULL, 0);
     556                Assert(SUCCEEDED(hr));
     557                if(SUCCEEDED(hr))
     558                {
     559//                    Assert(varReturnValue.vt == VT_UINT);
     560                    int winEr = varReturnValue.uintVal;
     561                    switch(winEr)
     562                    {
     563                    case 0:
     564                        hr = S_OK;
     565                        break;
     566                    default:
     567                        hr = HRESULT_FROM_WIN32( winEr );
     568                        break;
     569                    }
     570                }
    536571            }
    537572        }
     
    548583}
    549584
    550 static int collectNetIfInfo(Bstr &strName, PNETIFINFO pInfo)
     585static int netIfWinIsDhcpEnabled(const Guid &guid, BOOL *pEnabled)
     586{
     587    HRESULT hr;
     588        ComPtr <IWbemServices> pSvc;
     589        hr = netIfWinCreateIWbemServices(pSvc.asOutParam());
     590        if(SUCCEEDED(hr))
     591        {
     592            ComPtr <IWbemClassObject> pAdapterConfig;
     593            hr = netIfWinFindAdapterClassById(pSvc, guid, pAdapterConfig.asOutParam());
     594            if(SUCCEEDED(hr))
     595            {
     596                VARIANT vtEnabled;
     597                hr = pAdapterConfig->Get(L"DHCPEnabled", 0, &vtEnabled, 0, 0);
     598                if(SUCCEEDED(hr))
     599                {
     600                    *pEnabled = vtEnabled.boolVal;
     601                }
     602            }
     603        }
     604
     605    return SUCCEEDED(hr) ? VINF_SUCCESS : VERR_GENERAL_FAILURE;
     606}
     607
     608static int collectNetIfInfo(Bstr &strName, Guid &guid, PNETIFINFO pInfo)
    551609{
    552610    DWORD dwRc;
     611    int rc = VINF_SUCCESS;
    553612    /*
    554613     * Most of the hosts probably have less than 10 adapters,
     
    642701            RTStrFree(pszUuid);
    643702        }
     703
     704        BOOL bEnabled;
     705        rc  = netIfWinIsDhcpEnabled(guid, &bEnabled);
     706        Assert(RT_SUCCESS(rc));
     707        if(RT_SUCCESS(rc))
     708        {
     709            pInfo->bDhcpEnabled = bEnabled;
     710        }
    644711    }
    645712    RTMemFree(pAddresses);
     
    647714    return VINF_SUCCESS;
    648715}
    649 
    650 //static HRESULT netIfWinUpdateConfig(HostNetworkInterface * pIf)
    651 //{
    652 //    NETIFINFO Info;
    653 //    memset(&Info, 0, sizeof(Info));
    654 //    GUID guid;
    655 //    HRESULT hr = pIf->COMGETTER(Id) (&guid);
    656 //    if(SUCCEEDED(hr))
    657 //    {
    658 //        Info.Uuid = (RTUUID)*(RTUUID*)&guid;
    659 //        BSTR name;
    660 //        hr = pIf->COMGETTER(Name) (&name);
    661 //        Assert(hr == S_OK);
    662 //        if(hr == S_OK)
    663 //        {
    664 //            int rc = collectNetIfInfo(Bstr(name), &Info);
    665 //            if (RT_SUCCESS(rc))
    666 //            {
    667 //                hr = pIf->updateConfig(&Info);
    668 //            }
    669 //            else
    670 //            {
    671 //                Log(("netIfWinUpdateConfig: collectNetIfInfo() -> %Vrc\n", rc));
    672 //                hr = E_FAIL;
    673 //            }
    674 //        }
    675 //    }
    676 //
    677 //    return hr;
    678 //}
    679716
    680717static int netIfEnableStaticIpConfig(const Guid &guid, ULONG ip, ULONG mask)
     
    20682105            memset(&Info, 0, sizeof(Info));
    20692106            Info.Uuid = *(Guid(IfGuid).raw());
    2070             rc = collectNetIfInfo(name, &Info);
     2107            rc = collectNetIfInfo(name, Guid(IfGuid), &Info);
    20712108            if (RT_FAILURE(rc))
    20722109            {
     
    21712208    Bstr name;
    21722209    HRESULT hr = pIf->COMGETTER(Name)(name.asOutParam());
    2173     if(SUCCEEDED(hr))
    2174     {
    2175         return collectNetIfInfo(name, pInfo);
     2210    if(hr == S_OK)
     2211    {
     2212        GUID                IfGuid;
     2213        hr = pIf->COMGETTER(Id)(&IfGuid);
     2214        Assert(hr == S_OK);
     2215        if (hr == S_OK)
     2216        {
     2217            return collectNetIfInfo(name, Guid(IfGuid), pInfo);
     2218        }
    21762219    }
    21772220    return VERR_GENERAL_FAILURE;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette