我試圖使用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