能力值:
( LV2,RANK:10 )
|
-
-
2 楼
不建议直接复制或克隆Irp对象。因为Irp对象是内核数据结构,需要了解其结构和使用方法,否则会带来不可预知的后果。
如果需要请用IoCopyCurrentIrpStackLocationToNext() 函数拷贝原Irp栈,然后通过IoGetNextIrpStackLocation() 函数取得新Irp的栈,通过IoSetCompletionRoutine() 函数复制完成处理例程和Context,最后完成copy。具体代码实现如下:
PIRP new_irp = IoAllocateIrp(old_irp->StackCount, FALSE);
if (new_irp) {
IoCopyCurrentIrpStackLocationToNext(old_irp, new_irp);
IoSetCompletionRoutine(new_irp, old_irp->CompletionRoutine, old_irp->CompletionContext, TRUE, TRUE, TRUE);
// 现在 new_irp 被完全复制,可以把它传递给 IoCallDriver() 函数了。
IoCallDriver(DeviceObject, new_irp);
}
|
能力值:
( LV3,RANK:30 )
|
-
-
3 楼
可以,有API当然用API irp栈刚刚申请的时候全是空的 操作系统也是帮你复制传递下去的
|
能力值:
( LV13,RANK:385 )
|
-
-
4 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢谢楼上
|
|
|