2017-04-17 65 views
0

我想知道在Windows下創建一個設置有多難,其中在某些文件上的常規ReadFile被文件系統重定向到實際運行(例如ShellExecute )這些文件,然後新過程的stdout被用作流傳輸到ReadFile調用到被調用者的文件內容...Windows:重定向ReadFile來運行進程並管它的標準輸出

我設想的設置看起來像是,你可以配置它將某個文件夾表示爲「特殊」,並且該額外功能僅適用於該文件夾的內容(因此它不需要在磁盤範圍內)。它可以通過一個新的驅動器盤符或與源文件夾平行的路徑訪問;它被連接到的位置與我無關。

對於那些懷疑這是否是典型的xy問題的人:它可能很好;)這只是這個想法引起了我的興趣,我想知道它有什麼可能性。在我的特殊情況下,我想用它來#include我的C++代碼庫中的內容,其中包含的實際內容是在現場製作的,每次編譯輪次都不相同。我當然也可以創建一個腳本來創建這樣的內容,將其稱爲預構建步驟並將其留在那裏,但爲什麼選擇簡單的路線。

也許現在已經有了現成的解決方案?我做了廣泛的谷歌搜索,但空手出來。但後來我不知道我已經知道所有關鍵字做一個好的搜索......

當我自己編碼的東西,我認爲可能需要一個微過濾器驅動程序攔截ReadFile調用,但它必須在那從內核空間現場運行usermode應用程序 - 我假設這不是幸福的婚姻。或者使用允許用戶模式部件的現有文件系統驅動程序框架,但是我發現現有解決方案的價格對於我的口味來說太陡(數千美元)。 而且我還假設標準文件系統(minifilter)驅動程序可能需要爲這些文件返回一致的文件大小,雖然通過ReadFile返回的實際數據大小在每次調用中當然不同。更不用說否定任何發生的緩衝。總而言之,我認爲一個自己動手的解決方案需要付出很大的努力,特別是當你從未在你的生活中完成Windows驅動程序的開發時。雖然我覺得自己很有能力學習它,但投入的時間將會我認爲是令人望而卻步的。

另一種方法可能是將ReadFile調用與執行ReadFile的進程掛鉤 - 通過IAT掛鉤或通過代碼注入。但是我希望這個解決方案能更好地開箱即用,即所有對這些特殊文件的ReadFile請求都會觸發正確的行爲,而不管源是什麼。在我的情況下,我需要攔截我的C++編譯器(G ++)行爲,但是那個是由IDE即時調用的,所以我看不到任何簡單的方法來檢測它的啓動,並在它執行ReadFiles之前快速掛接它。另外,我只想要某些文件在這方面是特殊的;截取某個進程的所有ReadFiles是矯枉過正的。

+0

@downvoter:想詳細說明downvote?我知道,對於知情人士來說,這看起來有點像一個微不足道的,明顯的,不相干的或愚蠢的問題,但我目前缺乏這種更深入的理解。這篇文章對我(或者其他人)來說更多的是從中學習,而不是導致真正的解決方案(如果它存在的話)。 –

回答

2

你想要類似FUSE(我曾多次使用它),但對於Windows。顯然有Dokan,我從來沒有使用它,但似乎是足夠知名(至少,可以用來作爲一個靈感來看看「如何完成」)。

+1

謝謝!在深入瞭解它之後,似乎使用了MinGW(我也使用它)。它也需要很多的開發麻煩,並允許用戶模式代碼運行。現在是時候弄清楚這對我的使用案例來說是否完全過度使用,但它看起來像一個有趣的項目! –

相關問題