在Windows中,所有的磁盤I/O,最終還是通過像CreateFile
,SetFilePointer
Win32 API調用發生,等等。現在的Windows:如何截取的Win32磁盤I/O API
,是有可能截獲這些磁盤I/O Win32調用並在運行時爲所有動態鏈接的Windows應用程序綁定自己的代碼?也就是說,通過Windows DLL而不是靜態C庫獲得其功能的應用程序。
一些約束,我有如下:
沒有源代碼:我不會有我想攔截過程的源代碼。
線程安全:我的鉤子代碼可以動態分配自己的內存。此外,因爲這個內存將與多個截獲的進程(及其線程)共享,所以我希望能夠序列化對它的訪問。
條件代表團和壓倒一切的:在我的鉤碼,我想能夠決定是否委託給原來的Win32 API功能,或使用自己的功能,或兩者兼而有之。 (很像超類方法在C++中的子類或Java的首要方法可選調用。)
普通用戶空間代碼:我希望能夠實現上述,而不必編寫任何設備驅動程序,主要是由於寫入一個複雜程度。
如果這是可能的,我會欣賞一些指針。源代碼不是必需的,但始終歡迎!
你看看Detours嗎? http://research.microsoft.com/en-us/projects/detours/ – manuell
它是商業。我想要一個免費的,我願意自己寫一個,一旦我知道主要的API和概念演員是什麼。 – Harry
如果Detours不是你想要的,你可能想看看mook。 – easuter