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

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

2023-4-9 22:35
7281

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

 

就是 new_irp = old_irp 这个意思。

 

谢谢


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 2
支持
分享
赞赏记录
参与人
雪币
留言
时间
pysafe
为你点赞~
2023-5-6 10:28
704088
为你点赞~
2023-4-13 13:43
最新回复 (4)
雪    币: 3032
活跃值: (2650)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

不建议直接复制或克隆Irp对象。因为Irp对象是内核数据结构,需要了解其结构和使用方法,否则会带来不可预知的后果。


如果需要请用IoCopyCurrentIrpStackLocationToNext() 函数拷贝原Irp栈,然后通过IoGetNextIrpStackLocation() 函数取得新Irp的栈,通过IoSetCompletionRoutine() 函数复制完成处理例程和Context,最后完成copy。具体代码实现如下:


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

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册