blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1894回复:6

怎么截获硬盘与高速缓存之间的数据

楼主#
更多 发布于:2003-01-16 22:10
怎么截获硬盘与高速缓存之间的数据?
是IRP_MJ_WRITE, IRP_MJ_READ中带PAGE_IO标记的吗?
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-16 23:05
OSR 上说,处理page Io就可以了。

我就是这样处理.txt,.exe的。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-16 23:06
IRP_MJ_WRITE我还没实现,我只实现IRP_MJ_READ。
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-18 00:46
是不是可以这样说:如果IRP中带有IRP_PAGING_IO或IRP_SYNCHRONOUS_PAGING_IO,就是硬盘上数据与高速缓冲之间进行数据交换;若不带此二者标志,就不是。
但我有个问题:如果有个Write_Through(写穿透)的IRP_MJ_WRITE,它不经过缓存,直接写到硬盘上,此时系统怎样及时更新缓存中的数据?
这个问题我想微软已经解决了,不过我并不了解这其中的机制,麻烦vcmfc大侠解释一下好吗?
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-18 10:42
这部分好像是跟fast io有关,由于我的功能没有这项功能,无法给你答案。


好像你在IRP_MJ_READ中进行解密,此时cache也是解密的数据,就像.txt,我解密一下,以后打开txt,只会读cache的数据,而cache就是解密的东东。

在irp_mj_write中进行加密,应该不用更新cache吧!,否则,你就麻烦,在fastioread又要解密。

思路:

IRP_MJ_READ:解密
IRP_MJ_WRITE:加密
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-18 10:44
你对于你的问题,matt说,解决之道是:

当irp_mj_read/irp_mj_write中,只处理Irp->Flags == IRP_NOCACHE就可以了。

vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-18 10:46
其它sjsun说的是对了,可以我现在才理解,真是笨呀!!!
游客

返回顶部