2016-11-22 140 views
3

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

我是在windows下的内核模式驱动程序开发的新手,我脑子里想监视IO请求。

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

我做搜索,发现4根引线(但其中非是一定要下手的最佳选择)

  • IRP

通过Windows驱动程序使用的IO请求报文通信在他们和操作系统之间,但是我能够监控硬盘驱动器使用的IRP吗?那安全怎么样?

  • 的Windows过滤驱动

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

  • IO钩

这个技术被用于通过窗口防病毒到钩的IO,并检查文件。在我的情况下使用可靠吗?

  • 内核事件跟踪

微软Diskmon工具用于监视硬盘活动。

这里的问题是,我不知道从哪里开始,以及从性能和安全角度入手的最佳选择是什么。

+1

你的安全担忧是什么?任何其他的内核模式代码都可以做任何你喜欢的事情;没有用户模式代码将能够触摸你。 –

+0

我的意思是关于其他驱动程序的安全问题,我能监控硬盘驱动程序使用的IO请求吗? –

+1

称为RAID1。没有人能够*可靠地*竞争性地针对[19美元解决方案]进行计划(http://www.newegg.com/Product/Product.aspx?Item=N82E16815124152)。 –

回答

1

你首先必须完善了解windows Storage, Volumes, and File System Stacks和使用Device Tree

确定的需要过滤器装置,并作为UpperFilter或Lowfilter。你真的需要复制磁盘,或者说磁盘上的分区(卷)或文件系统的读/写?在UpperFiltersHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318}下或LowerFilters

阅读this存储堆栈例如 你的地方是在(4)(LowFilter - -

用于连接到设备,您可以注册在注册表中的自己,说磁盘过滤器,你将过滤器IRP_MJ_SCSI读/写)或(7)(UpperFilter - 你会过滤IRP_MJ_READ/IRP_MJ_WRITE进行读/写) 驱动程序必须是直接或WDM(寄存器驱动AddDevice),或使用KMDF(壳框架)

另一种解决方案使用IoRegisterPlugPlayNotificationEventCategoryDeviceInterfaceChange,& GUID_DEVINTERFACE_DISK)用于连接磁盘FDO - 在这里你将永远是UpperFilter

并问这种问题,建议最好的资源 - 是osronline - NTFSD或NTDEV论坛

+0

感谢您引用它们看起来非常有帮助的,关于你的问题,我需要复制整个磁盘的块级 –

+0

@AhmedKato - 所以你需要 - https://msdn.microsoft.com/en-us/windows/硬件/驱动程序/存储/存储过滤器驱动程序。和确定的低的或高的过滤器 - '较低级SFD监视由存储类driver'发出的SRB和/或的IRP,更高级别的存储过滤器驱动器(SFD)从用户的应用程序截取的IRP – RbMm

相关问题