首页
社区
课程
招聘
[旧帖] IoSetCompletionRoutine宏的中文说明 0.00雪花
发表于: 2011-6-1 16:46 1409

[旧帖] IoSetCompletionRoutine宏的中文说明 0.00雪花

2011-6-1 16:46
1409
IoSetCompletionRoutine宏注册一个IO完成例程(IO完成函数),下一层驱动完成IRP指定的操作后就会调用给定的函数。

void IoSetCompletionRoutine(

IN PIRP      Irp,//IRP的指针,指向本成驱动正在处理的IRP。

IN PIO_COMPLETION_ROUTINE      CompletionRoutine,//就是需要指定的函数的函数名

IN PVOID      Context,//上面函数需要的指针,一般是DeviceObject存储在“非分页”(nonpaged)内存中,因为完成例程                       //的中断请求级范围是IRQP<=DISPATCH_LEVEL.

IN BOOLEAN      InvokeOnSuccess,//IO_STATUS_BLOCK子域为NT_SUCCESS

IN BOOLEAN      InvokeOnError,//IO_STATUS_BLOCK子域为不成功的情况

IN BOOLEAN      InvokeOnCancel//特指完成例程被调用时的IRP IO_STATUS_BLOCK子域指明,它的下层驱动对传下来的这个                                //IRP执行了IoCancelIrp操作

);

需要包含的头文件wdm.h和ntddk.h

高层驱动使用IoAllocateIrp或IoBuildAsynchronousFsdRequest 分配/建立 IRP,在调用IoCallDriver时传递驱动 分配/建立 的IRP参数前必须传递所有InvokeOnXXX参数为TRUE来调用此完成例程。当完成例程通过这个IRP被调用时它必须释放驱动建立的IRP和任何其他相关的资源,比如:IoBuildPartialMdl分配的MDL。这类驱动如果调用IoFreeIrp阻止I/0 manager完成这个驱动创建的IRP将会返回STATUS_MORE_PROCESSING_REQUIRED。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
2
..................................
2011-6-1 17:42
0
游客
登录 | 注册 方可回帖
返回
//