c ++ - På aktivering af Network adpater bliver autokonfiguration IP-adresse indstillet

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg udvikler en ansøgning til Windows Vista og 7 i Visual Studio C ++, hvor jeg skal tildele en statisk IP-adresse til et netværkskort og etablere en forbindelse. Til dette kommer jeg ind i Ip værdierne i registreringsdatabasen sammen med indstillingen Aktiver DHCP værdi til 0. Så skal jeg deaktivere og derefter aktivere netværkskortet for disse værdier træde i kraft. Til dette bruger jeg 'INetConnectionManager' i følgende kode:


  CoInitialize(0);
  typedef void (\_\_stdcall * PNcFreeNetconProperties)(NETCON\_PROPERTIES* pProps);
  HMODULE hmod = LoadLibrary(L"netshell.dll");
  if (!hmod) 
    return false;

  LPNcFreeNetconProperties NcFreeNetconProperties =
    (LPNcFreeNetconProperties)GetProcAddress(hmod, "NcFreeNetconProperties");

  if (!NcFreeNetconProperties )
    return false;

  INetConnectionManager * pMan = 0;

  HRESULT hres = CoCreateInstance(CLSID\_ConnectionManager,
                  0,
                  CLSCTX\_ALL,
                  \_\_uuidof(INetConnectionManager),
                  (void**)&pMan);

  if (SUCCEEDED(hres))  
  {    
      IEnumNetConnection * pEnum = 0;
      hres = pMan->EnumConnections(NCME\_DEFAULT, &pEnum);
     if (SUCCEEDED(hres)) 
     {
         INetConnection * pCon = 0;
         ULONG count;
         bool done = false;
         while (pEnum->Next(1, &pCon, &count) == S\_OK && !done)
         {
             NETCON\_PROPERTIES * pProps = 0;
             hres = pCon->GetProperties(&pProps);
             if (SUCCEEDED(hres)) 
             {
                 if (wcscmp(pProps-pszwDeviceName, AdapterName) == 0)
                 {
                     if (bEnable)
                         result = (pCon->Connect() == S\_OK);
                     else
                         result = (pCon->Disconnect() == S\_OK);
                     done = true;
                 }

                 NcFreeNetconProperties(pProps);
              }
              pCon->Release();
         }
         pEnum->Release();
     }
    pMan->Release();
  }
  FreeLibrary(hmod);
  CoUninitialize();


Dvs. at deaktivere og aktivere netværkskortet meget godt, men MEN autokonfigurationens IPv4-værdier bliver sat i stedet for de statiske værdier i registreringsdatabasen. Dette virker mærkeligt korrekt for DHCP-forbindelse, men ikke for statisk forbindelse.


BEMÆRK: Jeg forsøgte endda SetIfEntry til det, men det fejler ikke at deaktivere eller aktivere netværkskort.


Foreslå venligst, hvor jeg gør forkert eller noget, jeg mangler.


Tak og Hilsen


Vinayak

Bedste reference


Du kan bruge AddIPAddress:


http://msdn.microsoft.com/en-us/library/aa365801\%28v=vs.85\%29.aspx[2]

Andre referencer 1


Understøtter INetConnectionManager på Windows VISTA og Win7? Jeg har implementeret samme kode, hvad du har skrevet her, men jeg får adgang nægtet pCon-> Connect, når applikationen kører på ikke-administrator login. Derfor ser det ud til, at vi skal hæve com-objektet ved hjælp af COM Moniker.


Hilsen
IP\_Telephony