windows线程检测主机信息更改
来源:互联网 发布:usb v2.0数据接口 编辑:程序博客网 时间:2024/06/04 18:23
适用于本机的主机信息更改检测,包括地址类型,ip,子网掩码和网关等
#include <iostream>#include <windows.h>#include <process.h>#include <iphlpapi.h>#pragma comment(lib, "Iphlpapi.lib")using namespace std;#define MSG_USER_A WM_USER+1typedef UINT (WINAPI* BEGINTHREADEX_FUNC)(LPVOID param);typedef UINT *BEGINTHREADEX_THREADID;class IPChangeDectector{public:void InitInstance();void ReleaseInstance();void HandleSpecailEvent(){}void HandleIPChangeEvent() { std::cout<<"detected ip changed..."<<endl;}void OnTimeOut(){cout<<"time out..."<<endl;}DWORD ThreadProc();static DWORD WINAPI _ThreadProc(LPVOID lParam){return ((IPChangeDectector*)lParam)->ThreadProc();}private:HANDLE m_hThread;DWORD m_dwThreadID;HANDLE m_hSomeSpecialEvt;};void IPChangeDectector::InitInstance(){m_hSomeSpecialEvt = CreateEvent(NULL, TRUE, FALSE, NULL);m_hThread = (HANDLE)_beginthreadex(NULL, 0, (BEGINTHREADEX_FUNC)_ThreadProc, this, 0, (BEGINTHREADEX_THREADID)&m_dwThreadID);}void IPChangeDectector::ReleaseInstance(){if(m_hThread!=NULL){PostThreadMessage(m_dwThreadID,WM_QUIT,0,0);WaitForSingleObject(m_hThread,INFINITE);CloseHandle(m_hThread);m_hThread = NULL;}CloseHandle(m_hSomeSpecialEvt);m_hSomeSpecialEvt = NULL;}DWORD IPChangeDectector::ThreadProc(){MSG msg;BOOL bRunning;BOOL bWaiting;DWORD dwRet;HANDLE hNotifyChange;HANDLE hIPChangeEvt = CreateEvent(NULL, TRUE, FALSE, NULL);OVERLAPPED overlapped;ZeroMemory(&overlapped, sizeof(OVERLAPPED));overlapped.hEvent = hIPChangeEvt;DWORD dwErr = NotifyRouteChange(&hNotifyChange, &overlapped);if( dwErr != ERROR_IO_PENDING ){goto cleanup;}ResetEvent(hIPChangeEvt);HANDLE hWaitHandles[2];hWaitHandles[0] = m_hSomeSpecialEvt;hWaitHandles[1] = hIPChangeEvt;bRunning = TRUE;while(bRunning){//处理消息while(PeekMessage(&msg,0,0,0,PM_NOREMOVE)){bRunning = GetMessage(&msg, 0, 0, 0);if(!bRunning) break;switch (msg.message){case MSG_USER_A://do some thingbreak;default:DispatchMessage(&msg);}}//while(PeekMessage...)if(!bRunning) break;bWaiting = TRUE;while(bWaiting){//等待消息或连接进入dwRet = MsgWaitForMultipleObjects(2,hWaitHandles,FALSE,1000,QS_ALLINPUT);switch(dwRet){case WAIT_OBJECT_0://hSomeEvt{HandleSpecailEvent();//;}break;case WAIT_OBJECT_0+1://hIPChangeEvt{//do something when ip changedHandleIPChangeEvent();//reset statusResetEvent(hIPChangeEvt);if(NotifyRouteChange(&hNotifyChange, &overlapped) != ERROR_IO_PENDING){bWaiting = FALSE;bRunning =FALSE;}}break;case WAIT_OBJECT_0+2:bWaiting = FALSE;break;case WAIT_TIMEOUT:OnTimeOut();break;default://发生错误bRunning = FALSE;bWaiting = FALSE;break;}}}//while(bRunning)cleanup:CancelIo(hNotifyChange);if (hNotifyChange)CloseHandle(hNotifyChange);if (hIPChangeEvt)CloseHandle(hIPChangeEvt);return 0;}int _tmain(int argc, _TCHAR* argv[]){IPChangeDectector d;d.InitInstance();getchar();d.ReleaseInstance();return 0;}
0 0
- windows线程检测主机信息更改
- windows系统更改账户信息
- 探测远程Windows主机的NetBIOS信息
- windows oid 利用SNMP获得主机信息
- windows oid 利用SNMP获得主机信息
- C#: WMI 获取远程 Windows 主机信息
- 轻松实现检测Windows肉鸡系统信息
- 轻松实现检测Windows肉鸡系统信息
- 主机信息
- 主机信息
- (转载)探测远程Windows主机的NetBIOS信息
- Windows 2000 下通过访问物理地址取主机唯一信息
- 常用脚本 – perl获取windows主机信息
- 更改主机IP地址
- 更改本地主机域名
- 在Linux服务器和本地主机查看服务器端口信息,检测端口是否可连接
- 主机安全检测
- Windows中使用 tracert 命令检测目标地址路由信息
- java 的 date类和Calendar整理
- java中synchronized用法
- container_of()宏
- Linux 下yiic 命令执行问题
- C#长整型时间与java长整型时间转换
- windows线程检测主机信息更改
- HelloWorld 之 概述
- ubuntu/wireshark --Lua: Error during loading: [string "/usr/share/wireshark/init.lua"]:45问题解决
- <转>Android ListAdapter的高级功能
- Ubuntu 12.04 下安装Xen 以及使用Xen 安装winXP虚拟机
- 跟着写操作系统(开发环境的搭建)
- Cocos2d-x教程(19)-cocos2d-x.xcodeproj-2.2.x版本对cocos2dx文件的引用以及Cocos2d-x 2.2.0版本后项目拷贝出来无法运行的原因
- Erlang不能错过的盛宴
- 12个乒乓球最少三次称量找不同球的方法