阅读:2153回复:1
请问IRP_PAGING_IO怎么和IRP_MOUNT_COMPLETION的值是相等的?
用
KdPrint(("IRP_NOCACHE=%0x,IRP_PAGING_IO=%0x,IRP_MOUNT_COMPLETION=%0x\n,IRP_SYNCHRONOUS_API=%0x,IRP_ASSOCIATED_IRP=%0x,IRP_BUFFERED_IO=%0x\nIRP_DEALLOCATE_BUFFER=%0x,IRP_INPUT_OPERATION=%0x\n IRP_SYNCHRONOUS_PAGING_IO=%0x,IRP_CREATE_OPERATION=%0x\nIRP_READ_OPERATION=%0x,IRP_WRITE_OPERATION=%0x,IRP_CLOSE_OPERATION=%0x\n IRP_DEFER_IO_COMPLETION=%0x", IRP_NOCACHE, IRP_PAGING_IO, IRP_MOUNT_COMPLETION, IRP_SYNCHRONOUS_API, IRP_ASSOCIATED_IRP, IRP_BUFFERED_IO, IRP_DEALLOCATE_BUFFER, IRP_INPUT_OPERATION, IRP_SYNCHRONOUS_PAGING_IO, IRP_CREATE_OPERATION, IRP_READ_OPERATION, IRP_WRITE_OPERATION, IRP_CLOSE_OPERATION, IRP_DEFER_IO_COMPLETION)); 打印出来如下? ///////////////// Irp->Flags=884 IRP_NOCACHE=1, IRP_PAGING_IO=2, IRP_MOUNT_COMPLETION=2 IRP_SYNCHRONOUS_API=4, IRP_ASSOCIATED_IRP=8, IRP_BUFFERED_IO=10 IRP_DEALLOCATE_BUFFER=20, IRP_INPUT_OPERATION=40 IRP_SYNCHRONOUS_PAGING_IO=40, IRP_CREATE_OPERATION=80 IRP_READ_OPERATION=100, IRP_WRITE_OPERATION=200, IRP_CLOSE_OPERATION=400 IRP_DEFER_IO_COMPLETION=800 |
|
沙发#
发布于:2007-01-11 16:26
// It should also be noted that the logic for completing a Mount request
// operation is exactly the same as a Page Read. No assumptions should be // made here about this being a Page Read operation w/o carefully checking // to ensure that they are also true for a Mount. That is: // // IRP_PAGING_IO and IRP_MOUNT_COMPLETION // // are the same flag in the IRP. // // Also note that the last time the IRP is touched for a close operation // must be just before the event is set to the signaled state. Once this // occurs, the IRP can be deallocated by the thread waiting for the event. 查看NT DDK可以发现Paging I/O请求和Mount 请求(IRP_PAGING_IO,IRP_MOTJNT_COMPLETION)的值相等。这是因为I/O管理器把Mount当作同步Paging I/O读请求。因此对于Mount 请求,I/O管理器也进行和同步Paging I/O相同的事后处理。 |
|