15,471
社区成员
发帖
与我相关
我的任务
分享
//我的程序中的部分代码
void CKillProgressDlg::OnClose()
{
CCheckClose close;
int nFlag = close.DoModal();
if (nFlag == IDOK)
{
HookUnload(); // 退出窗口,要卸载HOOK
CDialogEx::OnClose();
}
}
// 这是应用程序装载和卸载钩子的函数
void CKillProgressDlg::HookLoad()
{
m_hinstHookDll = ::LoadLibrary(_T("G:\\相关练习与资料\\ProcessProtect\\Release\\ProcessProtect.dll"));
CString loginfo;
if (NULL == m_hinstHookDll)
{
loginfo.Format(_T("加载 ProcessProtect.dll失败,错误代码 = [%d] "), GetLastError());
MessageBox(loginfo);
return;
}
typedef BOOL(WINAPI* LoadMonitor)(HWND hwnd, DWORD dwProcessId);
LoadMonitor loadMonitor = NULL;
loadMonitor = (LoadMonitor)::GetProcAddress(m_hinstHookDll, "HookLoad");
if (NULL == loadMonitor)
{
loginfo.Format(_T("获取函数 HookLoad 失败,错误代码 = [%d]"), GetLastError());
MessageBox(loginfo);
}
DWORD id = GetCurrentProcessId();
if (loadMonitor(m_hWnd, id))
{
loginfo.Format(_T("HOOK加载成功"));
MessageBox(loginfo);
}
else
{
loginfo.Format(_T("HOOK加载失败"));
MessageBox(loginfo);
}
}
/*
卸载HOOKDLL
*/
void CKillProgressDlg::HookUnload()
{
CString logInfo;
if (m_hinstHookDll == NULL)
{
m_hinstHookDll = LoadLibrary(_T("G:\\相关练习与资料\\ProcessProtect\\Release\\ProcessProtect.dll"));
if (NULL == m_hinstHookDll)
{
logInfo.Format(_T("加载 ProcessProtect.dll失败,错误代码 = [%d]"), GetLastError());
MessageBox(logInfo);
return;
}
}
typedef VOID(WINAPI* UnloadHook)();
UnloadHook unloadHook = NULL;
unloadHook = (UnloadHook)::GetProcAddress(m_hinstHookDll, "HookUnload");
if (NULL == unloadHook)
{
logInfo.Format(_T("获取函数 HookUnload 失败,错误代码 = [%d]"), GetLastError());
MessageBox(logInfo);
return;
}
unloadHook();
}