Я разрабатываю приложение для 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 для него, но не удается отключить или включить сетевую карту.
Пожалуйста, предложите, где я делаю что-то не так или что я пропускаю.
Спасибо и всего наилучшего,
Винаяк