2015-11-02 119 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这样的开源软件。顺序意味着困难(我认为)。 –