如何用程序通过注册表修改dns的地址,急!!!!!!!!!

wenbi 2006-03-31 05:20:18
如何用程序通过注册表修改dns的地址,急!!!!!!!!!
...全文
1317 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
MSDN3000 2006-04-02
  • 打赏
  • 举报
回复
上面的例子是读取,如果系统没有对DNS项设置读写保护,那么写入参考
LONG RegCreateKeyEx(
HKEY hKey, // handle to open key
LPCTSTR lpSubKey, // subkey name
DWORD Reserved, // reserved
LPTSTR lpClass, // class string
DWORD dwOptions, // special options
REGSAM samDesired, // desired security access
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // inheritance
PHKEY phkResult, // key handle
LPDWORD lpdwDisposition // disposition value buffer
);

LONG RegSetValue(
HKEY hKey, // handle to key
LPCTSTR lpSubKey, // subkey name
DWORD dwType, // information type
LPCTSTR lpData, // value data
DWORD cbData // size of value data
);

原理是类似的.
MSDN3000 2006-04-02
  • 打赏
  • 举报
回复
漏了一句:
如果打开注册表成功,那么退出的时候RegCloseKey(m_hKey);
MSDN3000 2006-04-02
  • 打赏
  • 举报
回复
DNS添加后会在注册表下HKLM\CurrentControlSet\Services\DNS有其内容:

HKEY m_hKey;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
(LPCSTR"CurrentControlSet\\Services\\DNS",
(DWORD)NULL,
KEY_ALL_ACCESS,
&m_hKey)!=ERROR_SUCCESS)
{
INT32 i=0;
DWORD ilong,itype,isize;
CHAR buffer1[256],buffer2[256];
for (;;)
{
ilong=isize=256;
if(RegEnumValue(m_hKey,
i,
(CHAR*)buffer1,
&ilong,
NULL,
&itype,
(LPBYTE)buffer2,
&isize) != ERROR_NO_MORE_ITEMS)
{
//枚举到的buffer1是DNS下面的键名
//枚举到的buffer2是DNS下面对应buffer1的键值
}
else
break;
i++;
}
}
MSDN3000 2006-04-02
  • 打赏
  • 举报
回复
我试了一下,是可以的,不过前面我给的是我以前的一段代码,有点小错误,因为不是针对你这个程序的,有的条件判断有点差异,下面我给出我的试验代码:
void CTestDlgDlg::OnButton2()
{
// TODO: Add your control notification handler code here
HKEY m_hKey;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
(LPCSTR)"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters",
(DWORD)NULL,
KEY_ALL_ACCESS,
&m_hKey)==ERROR_SUCCESS)
{
CHAR buffer1[]={"200.200.200.200"};
RegSetValueEx(m_hKey,"NameServer",0,REG_SZ,(unsigned char*)buffer1,15);\
}
}
然后查看HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下面的NameServer的值已经修改成了200.200.200.200

如果系统设置了自动获取DNS,那么还得修改过来.
wenbi 2006-04-02
  • 打赏
  • 举报
回复
能不能尽快,急!!!!谢谢
MSDN3000 2006-04-02
  • 打赏
  • 举报
回复
DNS的修改可以通过注册表直接修改
IP的修改是要麻烦一些

但是上面的代码既然有被提出
应该是可以实现的
可能和楼主的系统环境有关?

有空给你试一下
吃饭先
wenbi 2006-04-02
  • 打赏
  • 举报
回复
以下是我参考网上查到的代码修改的,但是还是不能修改dns.IP的修改还要通过调用DhcpNotifyConfigChange通知配置的改变,才能实现.dns需要如此吗?
BOOL RegSetIP(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate, LPCTSTR pDNS)
{
HKEY hKey;
string strKeyName = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
strKeyName += lpszAdapterName;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
strKeyName.c_str(),
0,
KEY_WRITE,
&hKey) != ERROR_SUCCESS)
return FALSE;

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

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

int nIP, nMask, nGate, nDNS;

nIP = strlen(mszIPAddress);
nMask = strlen(mszNetMask);
nGate = strlen(mszNetGate);
//
nDNS = strlen(mszDNS);

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

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

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

//
*(mszDNS + nDNS + 1) = 0x00;
nDNS += 2;
//HANDLE hEvent;
//hEvent = CreateEvent(NULL, TRUE, FALSE, "NameSever");

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);
   RegSetValueEx(hKey, "NameSever", 0, REG_MULTI_SZ, (unsigned char*)mszDNS, nDNS);


RegCloseKey(hKey);
return TRUE;
}
飞天揽月 2006-04-01
  • 打赏
  • 举报
回复
wmi
wenbi 2006-04-01
  • 打赏
  • 举报
回复
ding

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧