第九章 HOOK程序测试 windows程序设计 王艳平版
2012-08-11 09:45
323 查看
#include <afxwin.h>
class CMyApp : public CWinApp
{
public:
BOOL InitInstance();
};
class CMainDialog : public CDialog
{
public:
CMainDialog(CWnd* pParentWnd = NULL);
protected:
virtual BOOL OnInitDialog();
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT *pCopyDataStruct);
DECLARE_MESSAGE_MAP()
};
////////////////////////////////////////////////
// HookTermProApp.cpp文件
#include "resource.h"
#include "HookTermProApp.h"
CMyApp theApp;
// DLL导出函数
BOOL WINAPI SetSysHook(BOOL bInstall, DWORD dwThreadId = 0)
{
typedef (WINAPI *PFNSETSYSHOOK)(BOOL, DWORD);
// 调试的时候可以这样设置szDll[] = "..//09HookTermProLib//debug//09HookTermProLib.dll";
char szDll[] = "09HookTermProLib.dll";
// 加载09HookTermProLib.dll模块
BOOL bNeedFree = FALSE;
HMODULE hModule = ::GetModuleHandle(szDll);
if(hModule == NULL)
{
hModule = ::LoadLibrary(szDll);
bNeedFree = TRUE;
}
// 获取SetSysHook函数的地址
PFNSETSYSHOOK mSetSysHook = (PFNSETSYSHOOK)::GetProcAddress(hModule, "SetSysHook");
if(mSetSysHook == NULL) // 文件不正确?
{
if(bNeedFree)
::FreeLibrary(hModule);
return FALSE;
}
// 调用SetSysHook函数
BOOL bRet = mSetSysHook(bInstall, dwThreadId);
// 如果有必要,释放上面加载的模块
if(bNeedFree)
::FreeLibrary(hModule);
return bRet;
}
BOOL CMyApp::InitInstance()
{
// 安装钩子
if(!SetSysHook(TRUE, 0))
::MessageBox(NULL, "安装钩子出错!", "09HookTermProApp", 0);
// 显示对话框
CMainDialog dlg;
m_pMainWnd = &dlg;
dlg.DoModal();
// 卸载钩子
SetSysHook(FALSE);
return FALSE;
}
CMainDialog::CMainDialog(CWnd* pParentWnd):CDialog(IDD_MAINDLG, pParentWnd)
{
}
BEGIN_MESSAGE_MAP(CMainDialog, CDialog)
ON_WM_COPYDATA()
END_MESSAGE_MAP()
BOOL CMainDialog::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(theApp.LoadIcon(IDI_MAIN), FALSE);
::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0,
0, 0, SWP_NOSIZE|SWP_NOREDRAW|SWP_NOMOVE);
return TRUE;
}
BOOL CMainDialog::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
GetDlgItem(IDC_HOOKINFO)->SetWindowText((char*)pCopyDataStruct->lpData);
// 检查是否禁止执行
BOOL bForbid = ((CButton*)GetDlgItem(IDC_FORBIDEXE))->GetCheck();
if(bForbid)
return -1;
return TRUE;
}
class CMyApp : public CWinApp
{
public:
BOOL InitInstance();
};
class CMainDialog : public CDialog
{
public:
CMainDialog(CWnd* pParentWnd = NULL);
protected:
virtual BOOL OnInitDialog();
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT *pCopyDataStruct);
DECLARE_MESSAGE_MAP()
};
////////////////////////////////////////////////
// HookTermProApp.cpp文件
#include "resource.h"
#include "HookTermProApp.h"
CMyApp theApp;
// DLL导出函数
BOOL WINAPI SetSysHook(BOOL bInstall, DWORD dwThreadId = 0)
{
typedef (WINAPI *PFNSETSYSHOOK)(BOOL, DWORD);
// 调试的时候可以这样设置szDll[] = "..//09HookTermProLib//debug//09HookTermProLib.dll";
char szDll[] = "09HookTermProLib.dll";
// 加载09HookTermProLib.dll模块
BOOL bNeedFree = FALSE;
HMODULE hModule = ::GetModuleHandle(szDll);
if(hModule == NULL)
{
hModule = ::LoadLibrary(szDll);
bNeedFree = TRUE;
}
// 获取SetSysHook函数的地址
PFNSETSYSHOOK mSetSysHook = (PFNSETSYSHOOK)::GetProcAddress(hModule, "SetSysHook");
if(mSetSysHook == NULL) // 文件不正确?
{
if(bNeedFree)
::FreeLibrary(hModule);
return FALSE;
}
// 调用SetSysHook函数
BOOL bRet = mSetSysHook(bInstall, dwThreadId);
// 如果有必要,释放上面加载的模块
if(bNeedFree)
::FreeLibrary(hModule);
return bRet;
}
BOOL CMyApp::InitInstance()
{
// 安装钩子
if(!SetSysHook(TRUE, 0))
::MessageBox(NULL, "安装钩子出错!", "09HookTermProApp", 0);
// 显示对话框
CMainDialog dlg;
m_pMainWnd = &dlg;
dlg.DoModal();
// 卸载钩子
SetSysHook(FALSE);
return FALSE;
}
CMainDialog::CMainDialog(CWnd* pParentWnd):CDialog(IDD_MAINDLG, pParentWnd)
{
}
BEGIN_MESSAGE_MAP(CMainDialog, CDialog)
ON_WM_COPYDATA()
END_MESSAGE_MAP()
BOOL CMainDialog::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(theApp.LoadIcon(IDI_MAIN), FALSE);
::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0,
0, 0, SWP_NOSIZE|SWP_NOREDRAW|SWP_NOMOVE);
return TRUE;
}
BOOL CMainDialog::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
GetDlgItem(IDC_HOOKINFO)->SetWindowText((char*)pCopyDataStruct->lpData);
// 检查是否禁止执行
BOOL bForbid = ((CButton*)GetDlgItem(IDC_FORBIDEXE))->GetCheck();
if(bForbid)
return -1;
return TRUE;
}
相关文章推荐
- 第九章 导入表程序 windows程序设计 王艳平版
- windows第一个窗口程序转自windows程序设计王艳平老师编著
- windows程序设计--鼠标消息---程序击中测试
- 第九章 DLL文件 windows程序设计 王艳平版
- 第四章 简单的打字程序 windows程序设计 王艳平版
- 第四章 查找记事本程序的窗口句柄 windows程序设计 王艳平版
- 第九章 hook windows程序设计 王艳平版
- windows程序设计学习笔记1--新建程序骤
- windows程序设计课程演示程序下载
- 第四章 时钟 windows程序设计 王艳平版
- 第七章 控件 windows程序设计王艳平版
- 第七章 目录监视 windows程序设计王艳平版
- 程序设计的理念是从写测试程序开始,然后编写可以通过测试的程序
- 第三章 线程局部存储 windows程序设计 王艳平版
- 第七章 进度条 windows程序设计 王艳平版
- windows下面hook系统api实现禁止任务管理器关闭程序
- 【windows程序设计】第一个小窗口程序
- windows 程序设计第七章 鼠标命中测试的心得
- Windows程序设计:编写第一个Windows程序Helllo World!
- 如何在Linux和windows的控制台里面输入EOF以测试自己的程序