我正在开发一个项目,以异步方式实时将Windows写请求从一个硬盘复制到另一个硬盘。
我不熟悉windows下的内核模式驱动程序开发,我想到的是监视IO请求。
我搜索了很多,但这个区域没有记录,因为它应该。
我做了我的搜索并发现了4个潜在客户(但他们没有确定最佳选择)
IO请求Windows驱动程序用于在它们和操作系统之间进行通信的数据包,但是我能否监视硬盘驱动程序使用的IRP?那安全呢?
从上到下有很多系统过滤器驱动程序级别,应该使用哪一个?我能否过滤掉硬盘驱动程序使用的IO?
Windows防病毒软件使用这种技术挂钩IO并检查文件。在我的情况下使用它是否可靠?
由Microsoft Diskmon工具用于监控硬盘活动。
这里的问题是我不知道从哪里开始,在性能和安全性方面最好的选择是什么。
答案 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
中的LowerFilters
或IRP_MJ_SCSI
阅读this存储堆栈示例
你的位置在(4)(LowFilter - 你将过滤IRP_MJ_READ
进行读/写)或(7)(UpperFilter - 你将过滤IRP_MJ_WRITE
/ WDM
进行读/写)
驱动程序必须是或直接AddDevice
(在驱动程序中注册KMDF
)或使用EventCategoryDeviceInterfaceChange
(shell框架)
另一个解决方案使用IoRegisterPlugPlayNotification
(FDO
,& GUID_DEVINTERFACE_DISK
)来附加磁盘sorted
- 此处您始终将为UpperFilter
和提出这类问题的最佳资源,建议 - 是osronline - NTFSD或NTDEV论坛