2013-10-09 38 views
3

在Windows中,所有的磁盤I/O,最終還是通過像CreateFileSetFilePointer Win32 API調用發生,等等。現在的Windows:如何截取的Win32磁盤I/O API

是有可能截獲這些磁盤I/O Win32調用並在運行時爲所有動態鏈接的Windows應用程序綁定自己的代碼?也就是說,通過Windows DLL而不是靜態C庫獲得其功能的應用程序。

一些約束,我有如下:

  1. 沒有源代碼:我不會有我想攔截過程的源代碼。

  2. 線程安全:我的鉤子代碼可以動態分配自己的內存。此外,因爲這個內存將與多個截獲的進程(及其線程)共享,所以我希望能夠序列化對它的訪問。

  3. 條件代表團和壓倒一切的:在我的鉤碼,我想能夠決定是否委託給原來的Win32 API功能,或使用自己的功能,或兩者兼而有之。 (很像超類方法在C++中的子類或Java的首要方法可選調用。)

  4. 普通用戶空間代碼:我希望能夠實現上述,而不必編寫任何設備驅動程序,主要是由於寫入一個複雜程度。

如果這是可能的,我會欣賞一些指針。源代碼不是必需的,但始終歡迎!

+1

你看看Detours嗎? http://research.microsoft.com/en-us/projects/detours/ – manuell

+0

它是商業。我想要一個免費的,我願意自己寫一個,一旦我知道主要的API和概念演員是什麼。 – Harry

+1

如果Detours不是你想要的,你可能想看看mook。 – easuter

回答

0

我建議你從微軟Detours開始。它的免費版本也存在,它的功能也很強大。對於注射,您必須找到哪種注射方法可用於目標應用。不知道你是否需要自己編寫代碼,但是像「Extreme Injector」這樣的簡單工具可以很好地爲你測試你的方法。至少在我看來,你絕對不需要爲了這麼簡單的任務而開發任何內核驅動程序。爲了得到我和其他人的全力幫助,我希望首先看到你的方法,或者列出更多關於手頭問題的約束,或者你到目前爲止開始的問題,但遇到了問題。這縮小了許多小聊,並可以節省您的時間。

現在,如果您不熟悉Microsoft的Detours(MSFT),請繼續並從以下鏈接下載它:http://research.microsoft.com/en-us/projects/detours/下載它之後。你需要自己編譯它。它非常簡單,它帶有一個編譯好的HTML幫助文件和樣本。到目前爲止,您的配置文件屬於IAT(導入地址表)和EAT(導出地址表)。

我希望這個非片段答案可以幫助您在解決方案中找到一點點,如果您遇到問題,請再次回來。祝你好運!