tu21cn
驱动牛犊
驱动牛犊
  • 注册日期2002-11-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分49分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3455回复:11

为什么写文件时IRP_MJ_WRITE会发两次

楼主#
更多 发布于:2003-08-08 16:58
我写的文件过滤程序对文件1234。txt写进行监视,每次的写入数据量都很小(几十字节),发现很多情况下会进入两次,但有时只有一次,这使得这里的加密程序会进行两次加密,读出的时候不一致,是不是IRP_MJ_WRITE发了两次呢,为什么?

最新喜欢:

hnfudyhnfudy
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-08 21:22
看前人贴子.
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-09 14:13
vcmfc就是热心,好同志。
不限容量的免费邮箱 www.k65.net
liuyan1
驱动老牛
驱动老牛
  • 注册日期2001-08-27
  • 最后登录2023-04-18
  • 粉丝0
  • 关注0
  • 积分1031分
  • 威望477点
  • 贡献值0点
  • 好评度187点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-08-09 23:14
高手不愿意回答这样的问题我给你回答一下:
第一次是cccopywrite ,会引起fast i/o 操作
第2次当然就是noncachewrite拉,写盘的!
                              别忘了送点分!
楼上的客,楼下的客,听我老坎说明白,要苛屎有草纸,不要扯我的麦席子,要苛尿有夜壶,不要在床上划地图。
tu21cn
驱动牛犊
驱动牛犊
  • 注册日期2002-11-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分49分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-11 09:41
可是我在写的时候已经进行了Irp->Flags的判断,他两次都是43(IRP_NOCACHE|IRP_PAGING_IO|IRP_INPUT_OPERATION),所以还是作不出判断来,这到底是怎么回事呢?
zpytiger
驱动牛犊
驱动牛犊
  • 注册日期2002-04-28
  • 最后登录2005-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-22 11:37
我写的文件过滤程序对文件1234。txt写进行监视,每次的写入数据量都很小(几十字节),发现很多情况下会进入两次,但有时只有一次,这使得这里的加密程序会进行两次加密,读出的时候不一致,是不是IRP_MJ_WRITE发了两次呢,为什么?
------------------------
奇怪!如果两次写的数据都一样,就权当是写了两次,怎么回影响加密哪?你是不是对一个磁盘进行了多次Attach? :)
robin12
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2014-03-27
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望63点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-23 23:34
在处理IRP_MJ_WRITE时在适当的位置调用一下IoGetTopLevelIrp(),如果返回值是<某个常数,则表示调用你的分派例程为更改页面书写器or映射页面书写器or缓存管理器等内河线程,当你知道是这些线程时,你可以放弃加密。
kabunhi
驱动牛犊
驱动牛犊
  • 注册日期2007-06-27
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分461分
  • 威望57点
  • 贡献值0点
  • 好评度46点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-07-20 15:07
隔了将近4年  这个帖子还保存   不错
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-07-21 00:25
引用第6楼robin12于2003-08-23 23:34发表的  :
在处理IRP_MJ_WRITE时在适当的位置调用一下IoGetTopLevelIrp(),如果返回值是<某个常数,则表示调用你的分派例程为更改页面书写器or映射页面书写器or缓存管理器等内河线程,当你知道是这些线程时,你可以放弃加密。


某个常数??  

     :更改页面书写器or映射页面书写器or缓存管理器等内河线程
   都是些什么数值??

哪里有资料,可以一阅??指点一下谢谢
ceabie
驱动牛犊
驱动牛犊
  • 注册日期2006-08-23
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值0点
  • 好评度59点
  • 原创分1分
  • 专家分0分
9楼#
发布于:2007-07-21 11:31
微软的东西当然要去MSDN:
IoGetTopLevelIrp can return NULL, an arbitrary file-system-specific value (such as a pointer to the current IRP), or one of the flags listed in the following table.

If the current thread holds no resources above the file system, IoGetTopLevelIrp returns NULL.

If the file system is the top-level component for the current thread, IoGetTopLevelIrp returns a pointer to the current IRP.

If a component other than the file system is the top-level component for the current thread,
IoGetTopLevelIrp returns one of the following flags:

FSRTL_FSP_TOP_LEVEL_IRP                    This is a recursive call.
FSRTL_CACHE_TOP_LEVEL_IRP              The cache manager is the top-level component for the current thread.
FSRTL_MOD_WRITE_TOP_LEVEL_IRP    The modified page writer is the top-level component for the current thread.
FSRTL_FAST_IO_TOP_LEVEL_IRP            The cache manager is the top-level component for the current thread, and the current thread is in a fast I/O path.
XeChini
biemowo
驱动牛犊
驱动牛犊
  • 注册日期2009-04-20
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望221点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2009-11-04 18:31
谁能对这个问题详细的解释一下?
feng_zhibing
驱动牛犊
驱动牛犊
  • 注册日期2009-12-11
  • 最后登录2009-12-23
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望191点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2009-12-11 15:31
能够长久的都是精品!!
游客

返回顶部