阅读:1250回复:5
filedisk的Write.ByteOffset疑问
在filedisk中,有下面一段代码:
case IRP_MJ_WRITE: if ((io_stack->Parameters.Write.ByteOffset.QuadPart + io_stack->Parameters.Write.Length) > device_extension->file_size.QuadPart) { irp->IoStatus.Status = STATUS_INVALID_PARAMETER; irp->IoStatus.Information = 0; } ZwWriteFile( device_extension->file_handle, NULL, NULL, NULL, &irp->IoStatus, MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority), io_stack->Parameters.Write.Length, &io_stack->Parameters.Write.ByteOffset, NULL ); break; 在这里有 &io_stack->Parameters.Write.ByteOffset,这个值的含义是什么?系统又是在那一层定义了这个值呢? |
|
沙发#
发布于:2008-04-03 09:36
没人啊!大虾呢?
|
|
板凳#
发布于:2008-04-03 10:05
写文件的起始偏移地址
|
|
|
驱动小牛
|
地板#
发布于:2008-04-03 11:05
这个值是在IRP里面,一发下来就有.
|
|
地下室#
发布于:2008-04-03 21:26
当应用层发起写的请求的时候,系统就会构造好这个IRP.
因为应用层要写的位置已经确定了,如果是写文件,那么文件系统会将文件的偏移位置转换为磁盘("应该是某个卷,就是filedisk 映射的那个")的偏移位置!! |
|
5楼#
发布于:2008-04-06 09:49
哦,谢谢各位!
对这方面的资料在那里介绍比较多?现在的驱动书和DDK都只讲怎么去开发,对这些细微的没有太多涉及。 |
|