Windows硬盘实时复制

时间:2016-11-22 12:12:24

标签: c++ windows winapi io kernel

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

我不熟悉windows下的内核模式驱动程序开发,我想到的是监视IO请求。

我搜索了很多,但这个区域没有记录,因为它应该。

我做了我的搜索并发现了4个潜在客户(但他们没有确定最佳选择)

  • IRP

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

  • Windows过滤器驱动程序

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

  • IO挂钩

Windows防病毒软件使用这种技术挂钩IO并检查文件。在我的情况下使用它是否可靠?

  • 内核事件跟踪

由Microsoft Diskmon工具用于监控硬盘活动。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

另一个解决方案使用IoRegisterPlugPlayNotificationFDO,& GUID_DEVINTERFACE_DISK)来附加磁盘sorted - 此处您始终将为UpperFilter

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