锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
1錛屽儚鎴戣繖涔堢埍騫插噣鐨勪漢錛屽綋鐒朵笉鑳藉蹇嶅拰MM鑱婂ぉ鐨勬椂鍊欙紝鐪嬪埌涓涓唴琛e箍鍛婂湪涓婇潰涓闂竴闂紝榪欎笉寮曡鑰佺撼涔堬紱
2錛屼負浠涔堜笉鐢ㄥ叾瀹冨鎸傦紵鐝婄憵铏凡S錛屽啀娌$敤榪囧叾瀹冦傜幇鏈夌殑澶栨寕瀹炵幇浜嗕竴浜涙垜涓嶆兂瑕佺殑鍔熻兘錛岀湅IP涔熸病蹇呰錛岃亰澶╃殑閮芥槸鐔熶漢銆傚彟澶栵紝涓嶇煡閬撳畠鍋氫簡浜涗粈涔堜簨鎯咃紱
3錛屾墦鍙戣繖涓棤鑱婄殑鍛ㄦ湯銆?br>
鎬庢牱瀹炵幇錛?br> 1錛屼竾鑳界殑HOOK
鐜板湪鐢ㄥ埌鐨勬槸鍏ㄥ眬鐨凷HELL HOOK錛孒ook鐨勬槸紿楀彛鍒涘緩瀹屾垚鐨勬秷鎭紱
ShellHook 鐨勫疄鐜板涓?
鍦ㄦ敹鍒扮獥鍙e垱寤哄悗鐨勬秷鎭椂錛屽氨鍒ゆ柇榪欎釜紿楀彛鏄笉鏄疩Q鐨?榪欓噷鐢ㄥ埌浜?GetWindowThreadProcessId 錛屽畠榪斿洖紿楀彛鐩稿叧鐨勮繘紼婭D
鐒跺悗鏋氫婦瀹冪殑瀛愮獥鍙o紝鐪嬪畠鐨勫瓙紿楀彛鏈夋病鏈夊箍鍛婃帶浠訛紝鏈夌殑璇濆氨緇欏瓙鎺т歡鍙戦佷釜WM_CLOSE鐨勬秷鎭?
鍏朵腑鐨勪袱涓‖緙栫爜鏄敤 spy++ 鍒嗘瀽鍑烘潵鐨勶紝鍙兘鍥犱負鐗堟湰鐨勪笉鍚岋紝浼氭湁宸紓銆傛墍浠ユ垜涓嶇‘瀹氳兘涓嶈兘鍏抽棴鍏跺畠鐗堟湰鐨凲Q騫垮憡銆傛垜浣跨敤鐨勭増鏈槸QQ2008璐哄瞾鐗堛?br>
--------------------------------------------------------------------------
鍚庤:
灝界瀹炵幇鐨勬妧鏈緢綆鍗?浣嗚繕鏄姳浜嗘垜澶у崐澶╃殑鏃墮棿. 鍐欏畬涔嬪悗瑙夊緱鏋氫婦瀛愮獥鍙g殑鏂瑰紡澶綆鏁? 鎴栬呰繕鏈夊叾瀹冮珮鏁堢偣鐨勬柟寮忋傚彟澶栬繕鏈夊叏灞閽╁瓙,鍙兘娌℃湁蹇呰銆傚鏋滀笅鍗堝懆鏈寔緇棤鑱婏紝鎴戜細灝濊瘯鏀硅繘涓涓嬨?br>
QQ鐨勮亰澶╁璇濇寰堢畝鍗?涓嶅儚MSN鐨勫璇濇,閾佹澘涓鍧?鐢╯py++鍟ラ兘鐪嬩笉鍒?浣嗘槸鍙互鐢?AccExplorer 鍒嗘瀽.鎯沖湪MSN鐨勫璇濇涓婂姞鐐逛笢瑗胯繘鍘伙紝瀹炵幇璧鋒潵寰堝洶闅俱傚榪欐柟闈㈡湁鐮旂┒鐨勫悓瀛︿笉濡ㄤ笌鎴戣璁轟竴涓嬪疄鐜幫紝涓璧峰涔犮佽繘姝ャ?br>
浠g爜鐨勮鏁版病鏁幫紝鏈夋晥浠g爜浼拌涔熷氨鐧炬妸琛屽惂錛屽懙鍛碉紝鎴戞壙璁ゆ垜鏄爣棰樺厷銆?br>
闄? 婧愪唬鐮?+ bin
聽
class CW32Server
{
聽TCHAR聽聽m_szServerName[MAX_PATH];
聽SC_HANDLE聽聽 m_hService;
聽SC_HANDLE聽聽 m_hScm;
聽SERVICE_STATUS ServiceStatus;
聽BYTE聽聽m_cfgBuf[4096];
public:
聽CW32Server(void);
聽CW32Server(const TCHAR *strServerName);聽
聽BOOL聽聽聽 Open(const TCHAR *strServerName);聽聽
聽/**聽 榪斿洖鐘舵?
聽聽SERVICE_CONTINUE_PENDING The service continue is pending.
聽聽SERVICE_PAUSE_PENDING The service pause is pending.
聽聽SERVICE_PAUSED The service is paused.
聽聽SERVICE_RUNNING The service is running.
聽聽SERVICE_START_PENDING The service is starting.
聽聽SERVICE_STOP_PENDING The service is stopping.
聽聽SERVICE_STOPPED The service is not running.
聽*/
聽DWORD聽GetState();聽聽聽聽聽
聽BOOL聽聽聽 SetState(DWORD state);
聽BOOL聽聽聽 Start();
聽BOOL聽聽聽 Stop();
聽/**
聽聽SERVICE_AUTO_START聽聽A service started automatically by the service control manager during system startup.
聽聽SERVICE_BOOT_START聽聽A device driver started by the system loader. This value is valid only for driver services.
聽聽SERVICE_DEMAND_START聽A service started by the service control manager when a process calls the StartService function.
聽聽SERVICE_DISABLED聽聽A service that cannot be started. Attempts to start the service result in the error code ERROR_SERVICE_DISABLED.
聽聽SERVICE_SYSTEM_START
聽*/
聽BOOL聽聽聽 GetConfig();聽聽聽//濡傛灉榪斿洖鐪燂紝閰嶇疆鐘舵佸~鍏呭湪 m_config聽 涓?
聽SC_HANDLE聽聽聽 GetHandle();聽聽//闇瑕佺鐢ㄣ佸惎鍔ㄦ湇鍔★紝浣跨敤 ChangeServiceConfig(GetHandle(),...)聽聽 鏌ョ湅MSDN
聽~CW32Server(void);
聽QUERY_SERVICE_CONFIG *m_config;
};
#endif
/**
W32Server.cpp
http://www.shnenglu.com/lovelypig聽 姍欏瓙
*/
#include ".\w32server.h"
#include <assert.h>
CW32Server::CW32Server(void)
{
聽memset((char*)&m_szServerName,0,sizeof(TCHAR)*MAX_PATH);
聽memset((char*)&m_config,0,sizeof(m_config));
聽m_hService = 0;
聽m_hScm聽聽 = 0;
聽m_config = (QUERY_SERVICE_CONFIG*)m_cfgBuf;
}
CW32Server::CW32Server(const TCHAR *strServerName)
{聽
聽assert(strServerName);
聽CW32Server();
聽_tcscpy(m_szServerName,strServerName);聽
聽m_hScm=OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
聽if(!m_hScm)
聽{
聽聽return ;
聽}
聽m_hService=OpenService(m_hScm,strServerName,SERVICE_ALL_ACCESS);
聽if(!m_hService)
聽{
聽聽CloseServiceHandle(m_hScm);
聽聽m_hScm = NULL;
聽聽聽 }
}
CW32Server::~CW32Server(void)
{
聽if( m_hScm )
聽{
聽聽CloseServiceHandle(m_hScm);
聽聽m_hScm = NULL;
聽}
聽if( m_hService )
聽{
聽聽CloseServiceHandle(m_hService);
聽聽m_hService = NULL;
聽}
}
BOOL聽聽 CW32Server:: Open(const TCHAR *strServerName)
{
聽assert(strServerName);
聽if( m_hScm )
聽{
聽聽CloseServiceHandle(m_hScm);
聽聽m_hScm = NULL;
聽}
聽if( m_hService )
聽{
聽聽CloseServiceHandle(m_hService);
聽聽m_hService = NULL;
聽}
聽_tcscpy(m_szServerName,strServerName);聽
聽m_hScm=OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
聽if(!m_hScm)
聽{
聽聽return FALSE;
聽}
聽m_hService=OpenService(m_hScm,strServerName,SERVICE_ALL_ACCESS);
聽if(!m_hService)
聽{
聽聽CloseServiceHandle(m_hScm);
聽聽m_hScm = NULL;
聽聽return FALSE;
聽}
聽return TRUE;
}
DWORD聽CW32Server::GetState()
{聽
聽assert(m_hService);
聽聽聽 if(QueryServiceStatus(m_hService,&ServiceStatus))
聽{
聽聽return ServiceStatus.dwCurrentState;
聽}
聽else
聽{
聽聽return 0xffffffff;
聽}
}
BOOL聽聽聽 CW32Server::SetState(DWORD state)
{
聽assert(m_hService);
聽return ControlService(m_hService,state,&ServiceStatus);
}
BOOL聽聽聽 CW32Server::Start()
{
聽assert(m_hService);
聽return StartService(m_hService,0,NULL);
}
BOOL聽聽聽 CW32Server::Stop()
{
聽assert(m_hService);
聽return ControlService(m_hService,SERVICE_CONTROL_STOP,&ServiceStatus);
}
BOOL聽聽聽 CW32Server::GetConfig()
{
聽assert(m_hService);
聽
聽DWORD cbBufSize = 4096;
聽DWORD pcbBytesNeeded = 4096;
聽return QueryServiceConfig(m_hService,m_config,cbBufSize, &pcbBytesNeeded);
}
SC_HANDLE聽 CW32Server::GetHandle()
{
聽assert(m_hService);
聽return m_hService;
}
typedef int (CALLBACK* DHCPNOTIFYPROC)(LPWSTR, LPWSTR, BOOL, DWORD, DWORD, DWORD, int);
class CAdapter
{
聽private:
聽聽class ADAPTER_INFO
聽聽{
聽聽聽聽string strName;聽聽聽// 閫傞厤鍣ㄥ悕縐?br />聽聽聽聽string strDriverDesc;聽// 閫傞厤鍣ㄦ弿榪?br />聽聽聽聽string strIP;聽聽聽// IP鍦板潃
聽聽聽聽string strSubnetMask;聽聽// 瀛愮綉鎺╃爜
聽聽聽聽string strNetGate;聽聽// 緗戝叧
聽聽聽聽string strDNS;聽聽聽聽聽聽聽聽 //DNS
聽聽聽聽string strMAC;
聽聽聽聽::MIB_IFROW聽IfRow;聽聽//鐢ㄤ簬嫻侀噺,鐘舵佹樉紺?/p>
聽聽聽聽BOOL聽聽 RegSetIP();
聽聽聽聽BOOL聽聽 ChangeSysSet();
聽聽聽聽
聽聽聽public:
聽聽聽聽void聽聽 SetInx(DWORD _dwpIndex) { IfRow.dwIndex聽 = _dwpIndex; }
聽聽聽聽//鍙栧緱IP淇℃伅
聽聽聽聽string& GetName(){聽聽return strName;聽}
聽聽聽聽string& GetDriverDesc(){聽return strDriverDesc;聽}
聽聽聽聽string& GetIP(){聽return strIP;聽}
聽聽聽聽string& GetSubnetMask(){聽return strSubnetMask;聽}
聽聽聽聽string& GetNetGate(){聽return strNetGate;聽}
聽聽聽聽string& GetDNS(){聽return strDNS;聽}
聽聽聽聽string& GetMAC(){聽return strMAC;聽}
聽聽聽聽
聽聽聽聽//鍙栧緱鐘舵?嫻侀噺
聽聽聽聽DWORD聽聽聽 GetState(){
聽聽聽聽聽if(GetIfEntry(&IfRow) != NO_ERROR)
聽聽聽聽聽{
聽聽聽聽聽聽return 0;
聽聽聽聽聽}
聽聽聽聽聽/*
聽聽聽聽聽#define MIB_IF_OPER_STATUS_NON_OPERATIONAL聽聽聽聽聽 0
聽聽聽聽聽#define MIB_IF_OPER_STATUS_UNREACHABLE聽聽聽聽聽聽聽聽聽 1
聽聽聽聽聽#define MIB_IF_OPER_STATUS_DISCONNECTED聽聽聽聽聽聽聽聽 2
聽聽聽聽聽#define MIB_IF_OPER_STATUS_CONNECTING聽聽聽聽聽聽聽聽聽聽 3
聽聽聽聽聽#define MIB_IF_OPER_STATUS_CONNECTED聽聽聽聽聽聽聽聽聽聽聽 4
聽聽聽聽聽#define MIB_IF_OPER_STATUS_OPERATIONAL聽聽聽聽聽聽聽聽聽 5
聽聽聽聽聽*/
聽聽聽聽聽return IfRow.dwOperStatus ;
聽聽聽聽}
聽聽聽聽
聽聽聽聽DWORD聽聽聽 GetSendBytes(){
聽聽聽聽聽if(GetIfEntry(&IfRow) != NO_ERROR)
聽聽聽聽聽{
聽聽聽聽聽聽return 0;
聽聽聽聽聽}
聽聽聽聽聽return IfRow.dwOutOctets;
聽聽聽聽}
聽聽聽聽DWORD聽聽聽 GetReceiveBytes(){
聽聽聽聽聽if(GetIfEntry(&IfRow) != NO_ERROR)
聽聽聽聽聽{
聽聽聽聽聽聽return 0;
聽聽聽聽聽}聽聽
聽聽聽聽聽return IfRow.dwInOctets;
聽聽聽聽}
聽聽聽聽DWORD聽聽 GetSpeed(){
聽聽聽聽聽if(GetIfEntry(&IfRow) != NO_ERROR)
聽聽聽聽聽{
聽聽聽聽聽聽return 0;
聽聽聽聽聽}
聽聽聽聽聽return IfRow.dwSpeed;
聽聽聽聽}
聽聽聽聽DWORD聽聽 GetOutUcastPkts(){
聽聽聽聽聽if(GetIfEntry(&IfRow) != NO_ERROR)
聽聽聽聽聽{
聽聽聽聽聽聽return 0;
聽聽聽聽聽}
聽聽聽聽聽return IfRow.dwOutUcastPkts;
聽聽聽聽}聽
聽聽聽聽DWORD聽聽 GetOutNUcastPkts(){
聽聽聽聽聽if(GetIfEntry(&IfRow) != NO_ERROR)
聽聽聽聽聽{
聽聽聽聽聽聽return 0;
聽聽聽聽聽}
聽聽聽聽聽return IfRow.dwOutNUcastPkts;
聽聽聽聽}聽
聽聽聽聽DWORD聽聽 GetInUcastPkts(){
聽聽聽聽聽if(GetIfEntry(&IfRow) != NO_ERROR)
聽聽聽聽聽{
聽聽聽聽聽聽return 0;
聽聽聽聽聽}
聽聽聽聽聽return IfRow.dwInUcastPkts;
聽聽聽聽}聽
聽聽聽聽DWORD聽聽 GetInNUcastPkts(){
聽聽聽聽聽if(GetIfEntry(&IfRow) != NO_ERROR)
聽聽聽聽聽{
聽聽聽聽聽聽return 0;
聽聽聽聽聽}
聽聽聽聽聽return IfRow.dwInNUcastPkts;
聽聽聽聽}聽
聽聽聽聽//璁劇疆IP淇℃伅
聽聽聽聽BOOL SetName(string _PstrName聽 ,BOOL bChange = 0)聽聽{聽
聽聽聽聽聽strName = _PstrName聽;
聽聽聽聽聽if( bChange)
聽聽聽聽聽聽return ChangeSysSet();
聽聽聽聽聽return TRUE;
聽聽聽聽}
聽聽聽聽BOOL SetDriverDesc(string _PstrDriverDesc,BOOL bChange = 0){聽聽
聽聽聽聽聽strDriverDesc = _PstrDriverDesc;
聽聽聽聽聽if( bChange)
聽聽聽聽聽聽ChangeSysSet();
聽聽聽聽聽return TRUE;
聽聽聽聽}
聽聽聽聽BOOL SetIP(string _PstrIP,BOOL bChange = 0){聽聽
聽聽聽聽聽strIP = _PstrIP ;
聽聽聽聽聽if( bChange)
聽聽聽聽聽聽ChangeSysSet();
聽聽聽聽聽return TRUE;
聽聽聽聽}
聽聽聽聽BOOL SetSubnetMask(string _PstrSubnetMask,BOOL bChange = 0){聽聽
聽聽聽聽聽strSubnetMask = _PstrSubnetMask;
聽聽聽聽聽if( bChange)
聽聽聽聽聽聽ChangeSysSet();
聽聽聽聽聽return TRUE;
聽聽聽聽}
聽聽聽聽BOOL SetNetGate(string _PstrNetGate,BOOL bChange = 0){聽
聽聽聽聽聽strNetGate =聽_PstrNetGate;
聽聽聽聽聽if( bChange)
聽聽聽聽聽聽ChangeSysSet();
聽聽聽聽聽return TRUE;
聽聽聽聽}
聽聽聽聽BOOL SetDNS(string strSetDNS = ""){
聽聽聽聽聽if( !strSetDNS.length() )
聽聽聽聽聽{
聽聽聽聽聽聽HKEY hKey;
聽聽聽聽聽聽DWORD dwType;
聽聽聽聽聽聽char聽 szReadBuf[64];
聽聽聽聽聽聽DWORD cbData = 64;
聽聽聽聽聽聽string strKeyName ="SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
聽聽聽聽聽聽strKeyName += this->strName;
聽聽聽聽聽聽if(RegOpenKeyExA(HKEY_LOCAL_MACHINE,strKeyName.c_str(),0,
聽聽聽聽聽聽聽聽聽KEY_READ,&hKey) != ERROR_SUCCESS)
聽聽聽聽聽聽{
聽聽聽聽聽聽聽return FALSE;
聽聽聽聽聽聽}
聽聽聽聽聽聽if( RegQueryValueExA(hKey,"NameServer",0,&dwType,(BYTE*)szReadBuf,&cbData) != ERROR_SUCCESS)
聽聽聽聽聽聽{
聽聽聽聽聽聽聽return FALSE;
聽聽聽聽聽聽}
聽聽聽聽聽聽RegCloseKey(hKey);
聽聽聽聽聽聽strDNS = szReadBuf;
聽聽聽聽聽}
聽聽聽聽聽else
聽聽聽聽聽{
聽聽聽聽聽聽strDNS = strSetDNS;
聽聽聽聽聽聽return ChangeSysSet();
聽聽聽聽聽}
聽聽聽聽聽return TRUE;
聽聽聽聽}
聽聽聽聽void SetMAC(BYTE *Address){聽
聽聽聽聽聽聽char聽 buf[6];
聽聽聽聽聽聽for(int i= 0;i< 6;i++)
聽聽聽聽聽聽{
聽聽聽聽聽聽聽sprintf( buf,"%02x",Address[i]);
聽聽聽聽聽聽聽strMAC += string(buf);
聽聽聽聽聽聽}
聽聽聽聽聽聽/*
聽聽聽聽聽聽sprintf(pAI->mac, "%02X%02X%02X%02X%02X%02X",
聽聽聽聽聽聽聽int (pAdapterInfo->Address[0]),
聽聽聽聽聽聽聽int (pAdapterInfo->Address[1]),
聽聽聽聽聽聽聽int (pAdapterInfo->Address[2]),
聽聽聽聽聽聽聽int (pAdapterInfo->Address[3]),
聽聽聽聽聽聽聽int (pAdapterInfo->Address[4]),
聽聽聽聽聽聽聽int (pAdapterInfo->Address[5]));
聽聽聽聽聽聽*/
聽聽聽聽}
聽聽};
聽vector<ADAPTER_INFO> m_AdapterVec;
聽public:
聽聽CAdapter(void);
聽聽~CAdapter(void);
聽聽size_t GetAdapterCount ()
聽聽{
聽聽聽return m_AdapterVec.size();
聽聽}
聽聽ADAPTER_INFO& operator[](DWORD iInx)
聽聽{
聽聽聽assert(iInx < m_AdapterVec.size());
聽聽聽return m_AdapterVec[iInx];
聽聽}
};
#endif
//錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞
//Adapter_.cpp
#include ".\adapter_.h"
CAdapter::CAdapter(void)
{
聽DWORD聽ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO);
聽IP_ADAPTER_INFO *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
聽if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_BUFFER_OVERFLOW )聽// 緙撳啿鍖轟笉澶熷ぇ
聽{
聽聽delete pAdapterInfo;
聽聽pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
聽}
聽if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_SUCCESS )
聽{
聽聽do {
聽聽聽if (pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET)
聽聽聽{
聽聽聽聽ADAPTER_INFO *pAI = new ADAPTER_INFO;
聽聽聽聽pAI->SetInx(pAdapterInfo->Index);
聽聽聽聽pAI->SetName(pAdapterInfo->AdapterName);
聽聽聽聽pAI->SetDriverDesc(pAdapterInfo->Description);
聽聽聽聽pAI->SetMAC(pAdapterInfo->Address);
聽聽聽聽pAI->SetIP(pAdapterInfo->IpAddressList.IpAddress.String);
聽聽聽聽pAI->SetNetGate(pAdapterInfo->GatewayList.IpAddress.String);
聽聽聽聽pAI->SetSubnetMask(pAdapterInfo->IpAddressList.IpMask.String);
聽聽聽聽pAI->SetDNS();
聽聽聽聽m_AdapterVec.push_back(*pAI);
聽聽聽}
聽聽聽pAdapterInfo = pAdapterInfo->Next;
聽聽} while(pAdapterInfo);
聽}
聽delete pAdapterInfo;
}
CAdapter::~CAdapter(void)
{
聽m_AdapterVec.clear();
}
BOOL CAdapter::ADAPTER_INFO::ChangeSysSet()
{
聽//鍦ㄦ敞鍐岃〃涓慨鏀逛俊鎭?br />聽if(!RegSetIP())
聽{
聽聽return FALSE;
聽}
聽HINSTANCE聽聽hDhcpDll;
聽DHCPNOTIFYPROC聽pDhcpNotifyProc;
聽WCHAR wcAdapterName[256];
聽MultiByteToWideChar(CP_ACP, 0, this->strName.c_str(), -1, wcAdapterName,256);
聽if((hDhcpDll = LoadLibraryA("dhcpcsvc")) == NULL)
聽{
聽聽return FALSE;
聽}
聽if((pDhcpNotifyProc = (DHCPNOTIFYPROC)GetProcAddress(hDhcpDll, "DhcpNotifyConfigChange")) != NULL)
聽{
聽聽if((pDhcpNotifyProc)(NULL, wcAdapterName, TRUE,
聽聽聽0,聽聽聽聽//鎸囨槑絎嚑涓狪P鍦板潃錛屽鏋滃彧鏈夎鎺ュ彛鍙湁涓涓狪P鍦板潃鍒欎負0
聽聽聽inet_addr(strIP.c_str()), //
聽聽聽inet_addr(strSubnetMask.c_str()),
聽聽聽0聽聽聽聽//瀵笵HCP鐨勬搷浣?0:涓嶄慨鏀? 1:鍚敤 DHCP錛?:紱佺敤 DHCP
聽聽聽) != ERROR_SUCCESS)
聽聽{
聽聽聽FreeLibrary(hDhcpDll);
聽聽聽return FALSE;
聽聽}
聽聽FreeLibrary(hDhcpDll);
聽}
聽return TRUE;
}
BOOL CAdapter::ADAPTER_INFO::RegSetIP()
{
聽HKEY hKey;
聽string strKeyName ="SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
聽strKeyName += strName;
聽if(RegOpenKeyExA(HKEY_LOCAL_MACHINE,
聽聽strKeyName.c_str(),
聽聽0,
聽聽KEY_WRITE,
聽聽&hKey) != ERROR_SUCCESS)
聽{
聽聽return FALSE;
聽}
聽strIP.push_back('\0');
聽strSubnetMask.push_back('\0');
聽strNetGate.push_back('\0');
聽RegSetValueExA(hKey, "IPAddress", 0, REG_MULTI_SZ, (unsigned char*)strIP.data(), (DWORD)strIP.length()+2);
聽RegSetValueExA(hKey, "SubnetMask", 0, REG_MULTI_SZ, (unsigned char*)strSubnetMask.data(),(DWORD)strSubnetMask.length()+2 );
聽RegSetValueExA(hKey, "DefaultGateway", 0, REG_MULTI_SZ, (unsigned char*)strNetGate.data(), (DWORD)strNetGate.length()+2);
聽RegSetValueExA(hKey, "NameServer", 0, REG_SZ, (unsigned char*)strDNS.data(),(DWORD) strDNS.length());
聽RegCloseKey(hKey);
聽return TRUE;
}