【发布时间】:2010-10-24 04:15:09
【问题描述】:
我有一个这样定义的 DllMain:
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
int i=0, DoHijack=0;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
hMod = hModule;
hProcessCenter = ::FindWindow(NULL, _T("Form1"));
ExtractPaths(hModule, ExePath, &kNTIExeName, kNTIDllPath, &kNTIDllName);
//Only hook target processses
for(i=0; i < NB_TARGETS; i++)
{
if(strstr(kNTIExeName, Targets[i]))
DoHijack=1;
}
if(DoHijack)
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)Real_DrawText, Mine_DrawText); // <- magic
DetourAttach(&(PVOID&)Real_ExtTextOut, Mine_ExtTextOut);
DetourTransactionCommit();
break;
}
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)Real_DrawText, Mine_DrawText);
DetourDetach(&(PVOID&)Real_ExtTextOut, Mine_ExtTextOut); // <- magic
DetourTransactionCommit();
break;
}
return TRUE;
}
这是我从工作中买回家的一个项目,在我编译并运行它之后,dllmain 永远不会被调用,因此我的问题是 process_attach 开关永远不会被击中。什么可能导致这种情况发生?编译器中的某些东西,链接选项之一?
dll 完美运行...
谢谢。
【问题讨论】:
-
你在
DllMain里面做什么?可以发一些代码吗? -
你如何“运行” DLL?
-
您为哪家公司工作的公司提供隐藏 DLL 的产品?这是恶意的,投票关闭。
标签: c++ visual-studio-2008 dll