2015-11-02 117 views
0

我使用swapbuffers示例實現了微過濾器驅動程序。我做了兩個變化:swapbuffers微過濾器問題

  • 只重視到\ Device \ HarddiskVolume3
  • 加密異或使用0xFF

加密的作品,但volume3(這在我的系統是E :)不工作。 E:不被識別的文件系統。 chkdsk E:導致所有引導扇區損壞的消息。

調查後(使用procmon.exe):chkdsk.exe創建卷的卷影副本。如果驅動程序也附加了卷影副本,那麼chkdsk E:就可以,文件系統是完美的。但E:仍然無法識別。

任何想法我應該改變?

回答

0

假設沒有發生簡單的錯誤,也就是說,卷被卸載,您添加了過濾器,並重新安裝,顯然掛載/文件系統沒有使用您的過濾器。

我注意到關於「不適用於內核模式驅動程序」的示例代碼中的一條評論。

你想研究的是「整盤加密」。谷歌搜索和搜索:windows whole disk encryption將有所幫助。

特別是,TrueCrypt做你想要的。由於它是開源的,並且可以在sourceforge.net上找到,所以你可以下載源代碼並找出如何通過學習TrueCrypt如何掛鉤你的東西。

只是一個問題:TrueCrypt有安全漏洞,所以sourceforge.net頁面現在只是遷移信息到BitLocker。但是,它仍然存在,並且其他頁面已經創建,您可以在其中獲得它。值得注意的是,TrueCrypt叉子是VeraCrypt

只需在搜索頁面的一個是:http://www.howtogeek.com/203708/3-alternatives-to-the-now-defunct-truecrypt-for-your-encryption-needs/

UPDATE

注:之後我寫了這個更新,我意識到可能有希望。所以,繼續閱讀。

微過濾器出現文件系統但沒有底層存儲。它可能工作,你只需要找到一個較低級別的鉤子。怎麼樣過濾器堆棧altitute?這裏有一個鏈接:https://msdn.microsoft.com/en-us/library/windows/hardware/ff540402%28v=vs.85%29.aspx它也有fltmc文檔和!fltkd調試器擴展

在這[簡短]博客:http://blogs.msdn.com/b/erick/archive/2006/03/27/562257.aspx它說:

過濾管理器是爲了創建驅動程序的簡單機制過濾文件系統操作:文件系統微過濾器驅動程序。文件系統微過濾器驅動程序位於I/O管理器和基本文件系統之間,而不是位於文件系統和存儲驅動程序之間,如傳統文件系統過濾器驅動程序。

搞清楚這意味着什麼會有所幫助。 FS和I/O管理器[我不知道]之間的鉤點是否足夠?或者,您是否需要在文件系統和存儲驅動程序之間掛鉤[暗示舊式過濾器]?

我懷疑是一個「傳統」驅動程序過濾器可能是你所需要的,如果微過濾器沒有可以做同樣的事情。

由於您的掛鉤需要在未掛載的存儲上工作,因此chkdsk可以工作,這可能意味着舊式過濾器。另一方面,你提到你可以掛鉤影子副本,它對chkdsk有效。這意味着微過濾器有正確的東西。

下面是我認爲有點更多信息的鏈接:http://blogs.msdn.com/b/ntdebugging/archive/2013/03/25/understanding-file-system-minifilter-and-legacy-filter-load-order.aspx它有一個關於加密過濾器的altitute的直接示例。你只可能需要更多的掛鉤點,並降低你的微過濾器

更新#2

Swapbuffers只是掛鉤的幾件事情的高度:IRP_MJ_READIRP_MJ_WRITEIRP_MJ_DIRECTORY_CONTROL。這些是與文件I/O相關的,而不是與設備I/O相關的。這個例子很好,只是不一定適合你的目的。

我給你fltmc的鏈接是MS的過濾器的整個參考中的一個頁面。如果你蜿蜒曲折,你會發現更多有趣的東西,如IoGetDeviceAttachmentBaseRef,IoGetDiskDeviceObject。您需要找到設備的對象並過濾其I/O操作。

我認爲除了例子之外,你還得閱讀參考資料。正如我之前所說,你的過濾器需要鉤住更多或不同的東西。

在VeraCrypt源代碼中,Driver子目錄是您可能需要執行的操作類型的示例。在DriveFilter.c中,它使用IRP_MJ_READ,但也使用IRP_MN_START_DEVICE [設備啓動時掛鉤]。

說真的,這可能比你想像的還要多。這僅僅是爲了好玩,還是這僅僅是一個更大項目的測試案例?

+0

我完全困惑。我讀到的每一個微型過濾器驅動程序模型都是fututre。但是做這個簡單的任務是不合適的:整卷加密。一些評論:使用DebugView我看到我的過濾器被實際使用。 「不適用於內核模式驅動程序」僅禁用警告。我檢查了VeraCrypt源,但我認爲它太複雜了。我的任務是開發一個簡單的整卷加密驅動程序。加密比較簡單,密鑰保存器(特殊令牌)需要專門開發。 –

+0

我提到掛鉤陰影副本。這完全是猜測。我如何從卷影副本中確定它已連接到卷3,因此我必須解密其數據?順便說一下,爲什麼存在swapbuffers樣本,如果它是無用的? –

+0

你是對的:一個大項目的測試案例。任務:一些預定義的卷_整個卷加密_。預定義意味着我甚至可以寫入.inf文件。加密算法將是一些衆所周知的,但密鑰持有者令牌需要特殊編程。我看到了三種方法:1)從一個合適的樣本開始(這是'swapbuffers')2)從頭開發一個KDMF驅動程序3)「削減」一個像VeraCrypt這樣的開源軟件。順序意味着困難(我認爲)。 –