При включении сетевого adpater, автоконфигурации IP-адрес устанавливается - PullRequest
0 голосов
/ 11 февраля 2011

Я разрабатываю приложение для Windows Vista и 7 в Visual Studio C ++, в котором мне нужно назначить статический IP-адрес сетевой карте и установить соединение. Для этого я ввожу значения Ip в реестр вместе с параметром «Включить DHCP», равным 0. Затем мне нужно отключить, а затем включить сетевую карту, чтобы эти значения начали действовать. Для этого я использую «INetConnectionManager» в следующем коде:

  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();

Это очень хорошо отключает и включает сетевую карту, НО значения автоконфигурации IPv4 устанавливаются вместо статических значений в реестре. Это странно работает правильно для соединения DHCP, но не для статического соединения.

ПРИМЕЧАНИЕ. Я даже пытался установить SetIfEntry для него, но не удается отключить или включить сетевую карту.

Пожалуйста, предложите, где я делаю что-то не так или что я пропускаю.

Спасибо и всего наилучшего,

Винаяк

Ответы [ 2 ]

0 голосов
/ 22 февраля 2011

Поддерживается ли INetConnectionManager в Windows VISTA и Win7? Я реализовал тот же код, что вы написали здесь, но я получаю отказ в доступе для pCon-> Connect, когда приложение работает без входа в систему администратора. Следовательно, похоже, что нам нужно поднять com-объект с помощью COM Moniker.

С уважением IP_Telephony

0 голосов
/ 18 февраля 2011

Вы можете использовать AddIPAddress:

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

...