2010-01-08 30 views
1

我正在研究一個測試框架,需要能夠記錄用戶的活動,然後重播它們。我很好地使用圍繞P/Invoke(使用C#)的ManagedWinAPI包裝來記錄鼠標和鍵盤的活動,這很有效,但我認爲爲了使記錄更有用,我需要更多地瞭解用戶啓動時會發生什麼一個應用程序。如何找到用戶剛啓動的可執行文件?

我不知道什麼是如何找到一個應用程序剛剛啓動,這是什麼樣的應用程序。因此,假設用戶啓動了我的錄製應用程序,然後轉到開始菜單並單擊「畫圖」,我希望能夠記錄作爲事件啓動的「Paint.exe」(或者他們單擊了傳遞某些參數的快捷方式這將是包括參數在內的快捷鍵的價值),因爲如果我想在不同的機器菜單上播放錄製內容,則項目可能位於不同的位置,因此鼠標活動可能具有欺騙性。

我需要什麼樣的路線是繼獲得這些數據?我一直無法找到術語,所以我甚至沒有把正確的東西放到搜索引擎中......

+0

你怎麼會告訴他們的行動開始與過程發生在啓動附近的用戶採取行動時的工藝? – 2010-01-08 19:23:39

+0

我問的原因是我真的不知道你會如何判斷這一點 - 我真的沒有一個方法,你提出的問題肯定會出現,因爲直接比較過程和在用戶交互之後,卻是唯一的方法? – glenatron 2010-01-08 20:01:49

回答

1

Tool Help Library可以拍攝當前進程的快照。這可以稍後與另一個快照進行比較。但是,就像No Refunds No Returns評論的那樣,該方法無法確定它是否是啓動流程的用戶操作。

+0

謝謝。該系統不一定要得到完全保證,所以這可能足以滿足這個目的,但我會有興趣看看其他人是否有其他方法。 – glenatron 2010-01-08 20:05:20

+0

我已經走了,因爲它足以滿足我需要的東西,但是我真的很感謝下面的答案 - 兩種方法在不同的場景中都有潛在的用處。 – glenatron 2010-01-14 15:04:21

2

正確的方式做,這是寫一個驅動程序和應用程序管理器回調的每個進程創建時間得到通知。如果你不想這樣做,你可以使用像EasyHook這樣的託管鉤子庫並掛接NtCreateThread/NtCreateThreadEx。如果你不想做,那麼你只需要輪詢新的進程。

編輯:確定用戶是否啓動特定的進程將還需要你走棧。在內核模式下,您可以使用RtlWalkFrameChain,而在用戶模式下,您可以使用CaptureStackBackTrace。

編輯2:見PsSetCreateProcessNotifyRoutinePsSetCreateProcessNotifyRoutineEx

+0

謝謝你,這聽起來很有趣。我會進一步調查。 – glenatron 2010-01-10 19:41:46

相關問題