阅读:1161回复:1
I/O 完成例程序 一问
I/O 完成例程序:
NTSTATUS ReadCompetion (IN PDEVCE_OBJECT pDevObj, IN PIRP pIrp, IN PVOID pContext ){ ... ... PIO_STACK_LOCATION pThisIrpStack=IoGetCurrentIrpStackLocation(pIrp); PIO_STACK_LOCATION pNextIrpStackLocation= IoGetNextIrpStackLocation(pIrp); ... ... // 下面这句是什么含义 *pNextIrpStackLocation=*pThisIrpStack; ... IoSetCompletionRoutine(pIrp,ReadCompletion,NULL,TRUE,TRUE,TRUE); ToCallDriver(pDevExt->LowerDevice,pIrp); ... } |
|
沙发#
发布于:2005-05-28 23:49
// 下面这句是什么含义
*pNextIrpStackLocation=*pThisIrpStack; 将自己这一级的I/O堆栈拷贝到下一级驱动程序的I/O堆栈,因为作为 Irp最初分配的时候,仅仅初始化了第一级的I/O堆栈,做为分层的驱动,调用下一级驱动的时候,都要负责初始化下一级驱动的I/O堆栈,一般的filter直接把自己的复制到下一层就可以了。复杂的可能要自己重新生成新的Irp,往下传,就不能简单的这么做了 |
|