程序的实现需求是监视一些我想要监视的进程,比如说在钩子函数中首先判断这个进程的名字是不是我想要的。是的话,我就可以做一些事情。但是大部分进程都是我不想监视的,怎么才能让不想要监视的进程吧我这个dll(钩子函数放在dll里)卸载掉。钩子的加载和dll的注入是在我自己写的另一个程序A里通过SetWindowsHookEx加载的,是全局钩子。钩子相应函数是在我自己写的一个dll中,现在的方案是在程序A中控制dll钩子的加载和卸载,但是卸载就是全部都卸载了。我的要求是让我不想要监视的进程通过我的钩子的函数自己卸载掉。可以做到吗。比如说在钩子函数中调用FreeLibrary 或者 Unhook什么的。
还是说全局钩子只能一次性全部卸载。
还是说全局钩子只能一次性全部卸载。
因为全局钩子dll的原本作用是在别的进程调用钩子过程,因此只要钩子还在,dll就不能卸载,否则触发钩子时会再次装载
对于不需要监视的,钩子不起作用。
例子:
////////////////////////////////////////////////////////////////////////
// CDsoFramerControl::InstallKeyBoardHook
// 安装局部线程键盘钩子。
//
BOOL CDsoFramerControl::InstallKeyBoardHook(HWND lWndCtrl,DWORD dwThreadID)
{ hook = SetWindowsHookEx( WH_KEYBOARD, (HOOKPROC)KeyBoardMsgProc,v_hModule, dwThreadID);
if(hook != NULL)
{
ODS("Keyboard Hook installed!\n" );
hWndCtrl = lWndCtrl;
return TRUE;
}
return FALSE;
}////////////////////////////////////////////////////////////////////////
// CDsoFramerControl::UnInstallKeyBoardHook
// 卸载局部线程键盘钩子。
//
//
BOOL CDsoFramerControl::UnInstallKeyBoardHook()
{
BOOL unhooked = UnhookWindowsHookEx(hook);
ODS("Keyboard Hook Uninstall!\n");
return unhooked;
}