下载了微软的KBLaunch代码(MSDN自带的) 就是一个IShellExecuteHook com组件 能够HOOK系统的运行操作如果你输入了特定的字符串,他会先过滤,然后直接连到微软知识库去,现在的问题是稍微修改一下就不能用,我加了2个函数static DWORD WINAPI MonitorShield();BOOL InitProtect();就是DLL_PROCESS_ATTACH事件中创建一个线程,可是就是这么简单居然会出错,大家帮忙看看
DLL_PROCESS_ATTACH事件:
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
TCHAR szFileName[256];
_Module.Init(ObjectMap, hInstance, &LIBID_KBLAUNCHLib);
DisableThreadLibraryCalls(hInstance);
memset(szFileName,0,256);
GetModuleFileName(NULL,szFileName,256);
_tcslwr(szFileName);
if(_tcsstr(szFileName,_T("explorer.exe"))!=NULL)
{
InitProtect();
}
}
else if (dwReason == DLL_PROCESS_DETACH)
_Module.Term();
return TRUE; // ok
}
InitProtect函数:
BOOL InitProtect()
{
HANDLE hThread;
DWORD dwThreadID=0;
hThread=CreateThread(NULL,0,MonitorShield,NULL,0,&dwThreadID);
if(!hThread)
{
return FALSE;
}
return TRUE;
}
MonitorShield函数:
DWORD WINAPI MonitorShield()
{
while(TRUE)
{
OutputDebugString("Sleep begin...\r\n");
Sleep(3000);
OutputDebugString("Sleep end...\r\n");
}
return 1;
}
现象是注册组件后,explorer.exe过一会就出错,如果重新启动计算机,启动后explorer.exe马上出错,类型是ACCESS_violation 05,去掉创建线程这一段就没问题,或者直接线程函数返回也没问题,
即:DWORD WINAPI MonitorShield()
{return 1;}
这个问题到底是怎么回事,恳请大家帮忙
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课