我用C语言做DLL远程注入,当DLL文件注入到explorer.exe空间里后,在DLL内部创建一个属于explorer.exe进程的线程,该
线程的功能是设置一个WH_KEYBOARD钩子,可以提示钩子可以创建成功,但是却不起作用,我查看了一下线程,得知
当线程的工作完成后就自动结束,而不是一直存在,资料里面说当一个线程把自己的任务完成后它就会自动退出。
我想知道怎么才能使这个钩子起作用,DLL注入有好几种方式,但这种方式为什么不可以呢,
错误到底出在哪里呢?还请高人指点,谢谢!!!
部分源码如下:
#include “stdafx.h”
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
static HHOOK hHook=NULL;
static HINSTANCE hInstance=NULL;
HANDLE hThread;
DWORD dwThreadId;
long WINAPI hHookProc(int iCode,WPARAM wParam,LPARAM lParam)
{
MessageBox(NULL,”有按键”,”消息”,MB_OK);
return CallNextHookEx(hHook,iCode,wParam,lParam);
}
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
char* pszThreadId = (char*)malloc(10*sizeof(char));
hHook=NULL;//hHook是全局变量,钩子的句柄
hHook=SetWindowsHookEx(WH_KEYBOARD,hHookProc,hInstance,0);//hInstance是全局变量,这里的最后两个参数任凭我怎么改也实现不了
if(!hHook)
MessageBox(0,”启动钩子失败”,”消息”,MB_OK);
else
MessageBox(0,”启动钩子成功”,”消息”,MB_OK);
return 0;
}
bool EnableKeyHook()
{
hThread=CreateThread(NULL,0,ThreadProc,0,0,&dwThreadId);
if(!hThread)
MessageBox(NULL,”线程创建错误”,”错误”,MB_OK);
else
MessageBox(NULL,”线程创建成功”,”OK”,MB_OK);
return hHook!=NULL;
}
BOOL APIENTRY DllMain(HINSTANCE hInst,DWORD fdwReason,LPVOID lpReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
hInstance=hInst;//全局变量hInstance的初始化
EnableKeyHook();
break;
}
return TRUE;
}
>> 本文固定链接: http://www.vcgood.com/archives/2345
这里怎么这么冷静呢,提个问题沉这么长时间