怎样才可以在系统修改/增加/删除了系统的IP地址时,得到通知?
在修改主机名字时,也得到通知?最好是在应用层的技术。
我看了IPHelp API,好像NotifyAddr是可以在IP地址改变时会通知是么?具体是怎样的呢?
主机名字修改时,怎样得到通知呢?
在修改主机名字时,也得到通知?最好是在应用层的技术。
我看了IPHelp API,好像NotifyAddr是可以在IP地址改变时会通知是么?具体是怎样的呢?
主机名字修改时,怎样得到通知呢?
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>void main()
{
OVERLAPPED overlap;
DWORD ret;
HANDLE hand = WSACreateEvent();
overlap.hEvent = WSACreateEvent(); ret = NotifyAddrChange(&hand, &overlap); if (ret != NO_ERROR)
{
if (WSAGetLastError() != WSA_IO_PENDING)
{
printf("NotifyAddrChange error...%d\n", WSAGetLastError());
return;
}
} if ( WaitForSingleObject(overlap.hEvent, INFINITE) == WAIT_OBJECT_0 )
printf("IP Address table changed..\n");
}
bool bDone = false; m_hEvents[1] = CreateEvent(NULL, TRUE, FALSE, NULL);
if (NULL != m_hEvents[1])
{
m_OverLapped.hEvent = m_hEvents[1];
while (! bDone)
{
m_dwResult = NotifyRouteChange(&h, &m_OverLapped);
if (ERROR_IO_PENDING != m_dwResult)
{
m_strText.Format("NotifyRouteChange() failed. Result = %lu\r\n",
m_dwResult);
m_edit1.ReplaceSel(m_strText);
bDone = true;
}
else
{
m_dwResult = WaitForMultipleObjects(2, m_hEvents,
FALSE, INFINITE); switch(m_dwResult - WAIT_OBJECT_0)
{
case 0:
bDone = true;
break;
case 1:
m_edit1.ReplaceSel("A change was made to the route table.\r\n");
break;
}
}
}
CloseHandle(m_hEvents[1]);
}CloseHandle(m_hEvents[0]);
BOOL NotifyIPChange(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask)
{
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 bResult;
}