阅读:1904回复:2
同一个操作,IRP_MJ_WRITE写同样数据两次,谢谢!
最近在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指向的位置。 这相当于对这个文件写了两次,请问这是为什么呢? |
|
最新喜欢:![]() |
沙发#
发布于: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. |
|
板凳#
发布于:2007-07-12 08:42
if i don't use fastio, which part of irp is useful for me? the first or the second?
|
|