首页
社区
课程
招聘
[讨论]Irp可以直接复制或者克隆吗?
发表于: 2023-4-9 22:35 7130

[讨论]Irp可以直接复制或者克隆吗?

2023-4-9 22:35
7130

Irp可以直接复制或者克隆吗?

 

就是 new_irp = old_irp 这个意思。

 

谢谢


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

收藏
免费 2
支持
分享
最新回复 (4)
雪    币: 3001
活跃值: (2625)
能力值: ( 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);
}



2023-4-10 08:41
0
雪    币: 8391
活跃值: (4971)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
可以,有API当然用API   irp栈刚刚申请的时候全是空的   操作系统也是帮你复制传递下去的
2023-4-10 10:23
0
雪    币: 940
活跃值: (9936)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
4
同一楼. 可以拷贝.但是要对IRP结构熟悉. 比如里面因为同步异步可能设置事件. 也会设置完成函数. CompletionRoutinue. 建议看下了解下IRP之后再拷贝.否则就是BSOD. xxxx 
2023-4-10 10:28
0
雪    币: 515
活跃值: (3312)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem
5
谢谢楼上
2023-4-13 10:38
0
游客
登录 | 注册 方可回帖
返回
//