【问题标题】:windows hard drive real time replicationwindows硬盘实时复制
【发布时间】:2017-04-06 02:38:07
【问题描述】:

我正在做一个项目,以异步方式将 Windows 写入请求从一个硬盘实时复制到另一个硬盘。

我是windows下内核模式驱动开发的新手,我的想法是监控IO请求。

我搜索了很多,但该区域没有按应有的记录。

我进行了搜索,发现了 4 个潜在客户(但没有一个肯定是最好的选择)

  • IRP

Windows 驱动程序使用的 IO 请求数据包在它们和操作系统之间进行通信,但是我可以监视硬盘驱动程序使用的 IRP 吗?安全性呢?

  • Windows 过滤器驱动程序

系统过滤驱动级别从上到下有很多,应该使用哪一个?是否可以过滤硬盘驱动程序使用的 IO?

  • IO 挂钩

Windows 防病毒软件使用此技术来挂钩 IO 并检查文件。在我的情况下使用可靠吗?

  • 内核事件跟踪

被 Microsoft Diskmon 工具用来监控硬盘活动。

这里的问题是我不知道从哪里开始,从性能和安全性方面来说,最好的选择是什么。

【问题讨论】:

  • 您的安全问题是什么?任何其他内核模式代码都可以为您做任何它喜欢的事情;任何用户模式代码都无法触及您。
  • 我的意思是关于其他驱动程序的安全问题,我可以监控硬盘驱动程序使用的 IO 请求吗?
  • 称为 RAID1。没有人可以可靠地针对19 dollar solution进行竞争性编程。
  • @HansPassant 是 RAID1,但不同之处在于我需要实现它异步并更好地控制正在复制的数据。另外解决方案是实现硬件 RAID,我需要实现一种软 RAID 解决方案
  • 这也是一个谬误。您对数据一无所知。您将不知道数据代表什么,甚至不知道它存储在文件系统中的什么位置。所以你没有控制权。如果您想要一个合适的解决方案,而不是一堆无助于任何人的随机猜测,那么描述您的“控制”意图是必要

标签: c++ windows winapi io kernel


【解决方案1】:

你首先必须完全理解windows Storage, Volumes, and File System Stacks并使用Device Tree

确定您需要过滤的设备,以及作为 UpperFilter 或 Lowfilter。你真的需要复制磁盘,或者说磁盘上的分区(卷)或文件系统读/写?

对于附加到设备,您可以在注册表中注册自己,例如磁盘过滤器 - 在 UpperFiltersLowerFilters 中的 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318}

读取this存储堆栈示例 你的位置在 (4) (LowFilter - 你将过滤 IRP_MJ_SCSI 用于读/写) 或 (7) (UpperFilter - 你将过滤 IRP_MJ_READ/IRP_MJ_WRITE 用于读/写) 驱动程序必须是或直接WDM(在驱动程序中注册AddDevice)或使用KMDF(shell 框架)

另一种解决方案使用IoRegisterPlugPlayNotification(EventCategoryDeviceInterfaceChange, &GUID_DEVINTERFACE_DISK) 附加磁盘FDO - 在这里您将永远是UpperFilter

提出此类问题的最佳资源、建议 - 是 osronline - NTFSD 或 NTDEV 论坛

【讨论】:

  • 感谢您的参考,它们看起来真的很有帮助,关于您的问题,我需要在块级别复制整个磁盘
  • @AhmedKato - 所以你需要 - msdn.microsoft.com/en-us/windows/hardware/drivers/storage/… 。并确定低或高过滤器 - A lower-level SFD monitors SRBs and/or IRPs issued by a storage class driver,更高级别的存储过滤器驱动程序 (SFD) 拦截来自用户应用程序的 IRP
猜你喜欢
  • 2011-01-14
  • 2012-11-03
  • 1970-01-01
  • 2012-07-10
  • 2012-06-11
  • 1970-01-01
  • 2014-01-11
  • 2018-10-20
  • 1970-01-01
相关资源
最近更新 更多