2013-07-02 61 views
2

簡版:有沒有辦法'攔截'Windows(XP或7)文件系統調用來打開文件並用不同的文件名稱替換所述的調用?攔截和修改文件系統調用 - Windows

長版本:我試圖幫助客戶從HDD損壞中恢復。有問題的電腦在一個自助服務終端中,只需要將兩個Flash文件與一個網絡攝像頭結合使用。它由MDM Zinc編譯的.exe控制。我有兩個Flash文件和.exe的副本。

問題是,只有其中一個Flash文件打開。經過很長時間的轟炸後,我終於看到了通過Systernals Process Monitor發生的事情。兩個.flv文件都在同一個文件夾中。在Process Mon中,我可以清楚地看到.exe將工作文件稱爲c:\ somedirectory \ anotherdirectory \ file1.flv。非工作的一個雖然顯然有一個錯字,它有兩個反斜槓並排在路徑中:c:\ somedirectory \ \ anotherdirectory \ file2.flv

我被告知這是唯一版本的.exe是可用的,創建它的公司已經停業,所以我擁有的就是我將要得到的。如果確實是一個錯字,我無法想象它是如何工作的。我不得不認爲那裏有一個不同的版本。當然,如果它確實是.exe中的一個錯字,它本來可能會出現的最糟糕的字符是另一個\,因爲這在目錄或文件名中是無效的,我不能簡單地將該文件移動到新的位置路徑。 (今天發現你實際上可以用一個看似空白的名字(ALT-255)在Windows中創建一個目錄,但是這是一個無效的長鏡頭)。

我的編程技巧並不令人難以置信,但今天的研究讓我覺得微過濾器或API鉤可能是一個答案?我已經嘗試反編譯.exe以及在HEX編輯器中彈出它,並且不幸的是,有問題的路徑似乎不是一個易於編輯的字符串。如果其中任何一個都是有效的選擇,我會非常感激(朝着正確的方向)推進。如果你能想到我可能會嘗試的其他東西,那麼我幾乎沒有想法。

謝謝你的時間!

回答

1

您應該可以使用EasyHook庫來實現此目的。有關EasyHook的文章http://www.codeproject.com/Articles/27637/EasyHook-The-reinvention-of-Windows-API-hooking特別包含一個示例,說明如何覆蓋.NET框架用於打開文件的方法CreateFile

+1

謝謝!從表面上看,這看起來非常有希望......我現在要更仔細地閱讀它。 –

+0

打開exe並找到該路徑。 然後改變它以匹配你想要和保存的內容。 –

+0

我剛剛運行了一些測試代碼與fopen_s(...);和CreateFile 「\\\\」在路徑中不會中斷任何一個調用。 您可能正在尋找其他問題... –