2013-05-14 37 views
1

有什麼方法可以確定哪個進程調用了Win32函數。其實我需要掛鉤幾個函數,另外我還需要確定哪個進程調用了這個函數。我完成了使用MS Detours的鉤子函數,如FindNextFile()和winsock函數send()和,但問題在於稍後的部分,即確定調用者進程。請幫助。確定Win32函數的調用者進程

+3

如果您已經掛上了例如send(),你必須在send_handler()中安裝一個名爲send_handler()或類似的東西的鉤子處理程序,你可以調用GetModuleFileName()來獲得可執行映像名稱,或GetCurrentProcessId()來獲得主機進程的PID。我懷疑這是否真的是你在這裏問的。 – xwlan 2013-05-14 14:22:13

+0

那麼如果我能夠調用'GetCurrentProcessId()'給我Process ID,那麼我也可以獲得ProcessName。這完全解決了我的問題。但是,請您詳細介紹一下鉤子句柄,即'send_handler()'以及如何使用它。 – Faheem 2013-05-14 14:34:01

+0

我記得有很多樣本的走彎船路,有一個演示如何掛接winsock的示例,您可以在send_handler()中添加GetCurrentProcessId()(繞道程序可能有不同的名稱)。 – xwlan 2013-05-14 14:41:32

回答

2

您的掛鉤將在調用過程的上下文中運行,因此它可能會簡單地調用GetCurrentProcessId或返回您需要了解過程的類似函數。

+0

是的offracourse阿德里安!我進一步研究後得出了這個想法。實際上,我的完整解決方案在於,我想知道一個進程何時調用FindNextFile()。這可能通過以下方式發生:(i)「設置全系統掛鉤」或(ii)「鉤住所有正在運行的進程」。那麼你能告訴我哪一個更好/更容易,以及如何在這種情況下知道調用者進程。 – Faheem 2013-05-15 06:06:29

+0

@Faheem:我不明白你的後續問題,可能是因爲我從未與Detours合作過。你應該看看你的新問題是否已經解決堆棧溢出問題。如果沒有,請發起一個新問題。 – 2013-05-15 14:43:49