Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ windows硬盘驱动器实时复制_C++_Windows_Winapi_Io_Kernel - Fatal编程技术网

C++ windows硬盘驱动器实时复制

C++ windows硬盘驱动器实时复制,c++,windows,winapi,io,kernel,C++,Windows,Winapi,Io,Kernel,我正在进行一个项目,将windows写请求从一个硬盘实时异步复制到另一个硬盘 我是windows下内核模式驱动程序开发的新手,我想的是监视IO请求 我搜索了很多,但是这个区域没有被记录下来 我做了搜索,找到了4条线索(但其中没有一条肯定是最好的开始) IRP windows驱动程序使用IO请求数据包在它们和操作系统之间进行通信,但我是否能够监视硬盘驱动程序使用的IRP?那么保安呢 Windows筛选器驱动程序 从上到下有很多系统过滤器驱动程序级别,应该使用哪一个?我能过滤硬盘驱动程序使用

我正在进行一个项目,将windows写请求从一个硬盘实时异步复制到另一个硬盘

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

我搜索了很多,但是这个区域没有被记录下来

我做了搜索,找到了4条线索(但其中没有一条肯定是最好的开始)

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

  • Windows筛选器驱动程序
从上到下有很多系统过滤器驱动程序级别,应该使用哪一个?我能过滤硬盘驱动程序使用的IOs吗

  • IO挂钩
windows用户使用此技术挂接IOs并检查文件。在我的情况下使用它可靠吗

  • 内核事件跟踪
由Microsoft Diskmon工具用于监视硬盘活动


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

首先,您必须完全理解和使用

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

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

读取存储堆栈示例 您的位置是(4)(LowFilter-您将成为读取/写入的筛选器
IRP_MJ_SCSI
)或(7)(UpperFilter-您将成为读取/写入的筛选器
IRP_MJ_
) 驱动程序必须是或直接
WDM
(在驱动程序中注册
AddDevice
)或使用
KMDF
(shell框架)

另一种解决方案是将(
EventCategoryDeviceInterfaceChange
,&)用于连接磁盘
FDO
——在这里,您将始终处于较高的筛选级别


问这类问题的最佳资源是advice-is-NTFSD或NTDEV论坛

您的安全顾虑是什么?任何其他内核模式代码都可以做任何它喜欢做的事情;没有用户模式代码可以接触到您。我的意思是关于其他驱动程序的安全问题,我是否能够监视硬盘驱动程序使用的IO请求?称为RAID1。没有人能够对RAID1进行可靠且有竞争力的编程。@HansPassant yes RAID1,但我需要异步实现它,并对被复制的数据进行更多的控制。另外,解决方案是实现硬件RAID,我需要实现某种软RAID解决方案,这也是一种谬误。你对数据一无所知。您将不知道数据代表什么,甚至不知道它存储在文件系统中的什么位置。所以你无法控制。如果你想要一个合适的解决方案,而不是一堆对任何人都没有帮助的随机猜测,那么描述你的“控制”意图是至关重要的。感谢你的参考他们看起来非常有用,关于你的问题,我需要在块上复制整个磁盘level@AhmedKato-所以你需要-。和确定低或高筛选器-
较低级别的SFD监视存储类驱动程序发出的SRB和/或IRP,较高级别的存储筛选器驱动程序(SFD)从用户应用程序截取IRP