我试图使用AppInitHook挂钩WinApi。所以它完美的工作,但我只需要钩一些进程不是全部。问题是如何获得DLL加载的进程ID?例如dll是为MyApp.exe加载的,我怎样才能得到这个进程ID?从DLL获取当前进程ID
Regarsd!
PS 抱歉,我不是铁杆WINAPI程序员,我的问题mybe那么容易,但它现在对我来说很难)
我试图使用AppInitHook挂钩WinApi。所以它完美的工作,但我只需要钩一些进程不是全部。问题是如何获得DLL加载的进程ID?例如dll是为MyApp.exe加载的,我怎样才能得到这个进程ID?从DLL获取当前进程ID
Regarsd!
PS 抱歉,我不是铁杆WINAPI程序员,我的问题mybe那么容易,但它现在对我来说很难)
要在加载DLL时执行某些操作,您需要像下面的代码示例中那样定义DllMain函数。然后,当进程连接到DLL时(也可以在代码示例中),您可以获得进程ID。
BOOL APIENTRY DllMain(HMODULE hModule, DWORD reasonForCall, LPVOID lpReserved)
{
hModule; lpReserved;
switch (reasonForCall) {
case DLL_PROCESS_ATTACH:
{
uint32_t pid = GetCurrentProcessId();
// Do something depending on the process ID in |pid|
break;
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
其实做的很少。从DllMain做什么都很危险。 – Steve
@Steve,为什么?牢记这个http://stackoverflow.com/questions/4496233/which-is-called-first-dllmain-or-global-static-object-constructor,我认为它大多是安全的。 –
谷歌它。你会得到一个卡车负载的原因。原因是装载机锁在DllMain中。 – Steve