vc Ip、子网掩码、默认网关、首选DNS服务器

时间:2022-11-09 14:51:57

Ip、子网掩码、默认网关、首选DNS服务器相关信息在注册表之中,改变注册表的值,然后通知所以应用程序即可,代码如下:
BOOL   SetIP(LPCTSTR   lpszAdapterName,   int   nIndex,   LPCTSTR   pIPAddress,   LPCTSTR   pNetMask,   LPCTSTR   pNetGate)
{
HKEY   hKey;
CString   strKeyName   =   "SYSTEM//CurrentControlSet//Services//Tcpip//Parameters//Interfaces// ";
strKeyName   +=   lpszAdapterName;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
strKeyName,
0,
KEY_WRITE,
&hKey)   !=   ERROR_SUCCESS)
return   FALSE;

char   mszIPAddress[100];
char   mszNetMask[100];
char   mszNetGate[100];

strncpy(mszIPAddress,   pIPAddress,   98);
strncpy(mszNetMask,   pNetMask,   98);
strncpy(mszNetGate,   pNetGate,   98);

int   nIP,   nMask,   nGate;

nIP   =   strlen(mszIPAddress);
nMask   =   strlen(mszNetMask);
nGate   =   strlen(mszNetGate);

*(mszIPAddress   +   nIP   +   1)   =   0x00;
nIP   +=   2;

*(mszNetMask   +   nMask   +   1)   =   0x00;
nMask   +=   2;

*(mszNetGate   +   nGate   +   1)   =   0x00;
nGate   +=   2;

RegSetValueEx(hKey,   "IPAddress ",   0,   REG_MULTI_SZ,   (unsigned   char*)mszIPAddress,   nIP);
RegSetValueEx(hKey,   "SubnetMask ",   0,   REG_MULTI_SZ,   (unsigned   char*)mszNetMask,   nMask);
RegSetValueEx(hKey,   "DefaultGateway ",   0,   REG_MULTI_SZ,   (unsigned   char*)mszNetGate,   nGate);

RegCloseKey(hKey);

//通知IP地址改变
BOOL bResult   =   FALSE;
HINSTANCE hDhcpDll;
DHCPNOTIFYPROC pDhcpNotifyProc;
WCHAR   wcAdapterName[256];

MultiByteToWideChar(CP_ACP,   0,   lpszAdapterName,   -1,   wcAdapterName,256);

if((hDhcpDll   =   LoadLibrary( "dhcpcsvc "))   ==   NULL)
return   FALSE;

if((pDhcpNotifyProc   =   (DHCPNOTIFYPROC)GetProcAddress(hDhcpDll,   "DhcpNotifyConfigChange "))   !=   NULL)
if((pDhcpNotifyProc)(NULL,   wcAdapterName,   TRUE,   nIndex,   inet_addr(pIPAddress),   inet_addr(pNetMask),   0)   ==   ERROR_SUCCESS)
bResult   =   TRUE;

FreeLibrary(hDhcpDll);

return   TRUE;
}