我正在使用Visual Studio C ++开发Windows Vista和7的应用程序,其中我必须为网卡分配静态IP地址并建立连接。为此,我在注册表中输入Ip值,同时将Enable 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,但它无法禁用或启用网卡。
请说明我做错了什么或我错过了什么。
谢谢和问候,
维纳亚克
答案 0 :(得分:0)
您可以使用AddIPAddress:
http://msdn.microsoft.com/en-us/library/aa365801%28v=vs.85%29.aspx
答案 1 :(得分:0)
Windows VISTA和Win7上是否支持INetConnectionManager?我已经实现了您在此处编写的相同代码,但是当应用程序在非管理员登录时运行时,我对pCon-> Connect的访问被拒绝。因此,看起来我们需要使用COM Moniker提升com对象。
此致 IP_Telephony