Braveheart3
驱动牛犊
驱动牛犊
  • 注册日期2005-12-11
  • 最后登录2008-03-31
  • 粉丝0
  • 关注0
  • 积分260分
  • 威望27点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
阅读:1904回复:2

同一个操作,IRP_MJ_WRITE写同样数据两次,谢谢!

楼主#
更多 发布于:2007-07-11 16:08
最近在sfilter基础上写了一个sfwrite例程,发现一个问题。
前提往某一个固定a.txt文件中写数据
根据softice跟踪结果看到
当写的操作小于64k时,首先发一个irp,irp->parameters.write.lowpart为实际长度,数据存储在
usebuffer中,但是之后又发一个irp,irp->parameters.write.lowpart为4096的整数倍,数据存储在
MDL指向的位置。

当写的操作大于64k(假设65k),首先先发一个irp,irp->parameters.write.lowpart为实际长度,数据存储在usebuffer中,但是之后又发两个irp,其中长度分别为64k和1k,数据数据存储在MDL指向的位置。

这相当于对这个文件写了两次,请问这是为什么呢?

最新喜欢:

linshierlinshi...
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2007-07-12 04:45
当写的操作大于64k(假设65k),首先先发一个irp,irp->parameters.write.lowpart为实际长度,数据存储在usebuffer中,但是之后又发两个irp,其中长度分别为64k和1k,数据数据存储在MDL指向的位置。

这相当于对这个文件写了两次,请问这是为什么呢?


The first WRITE should be a cache WRITE. The next two WRITEs should be two paging WRITEs. I don't think you can see a 1KB paging WRITE. It should be a 4KB paging WRITE.

Number of WRITEs doesn't mean anything here. You may see 1 cache WRITE followed with several paging WRITEs. Or you may see many cache WRITEs with only one paging WRITE.
Braveheart3
驱动牛犊
驱动牛犊
  • 注册日期2005-12-11
  • 最后登录2008-03-31
  • 粉丝0
  • 关注0
  • 积分260分
  • 威望27点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-12 08:42
if i don't use fastio, which part of irp is useful for me? the first or the second?
游客

返回顶部