首页
社区
课程
招聘
[笔记]IRP里两个方便同步请求的标志
发表于: 2015-4-5 21:06 3797

[笔记]IRP里两个方便同步请求的标志

2015-4-5 21:06
3797
IRP里两个方便同步请求的标志

See--> http://bbs.pediy.com/showthread.php?p=1363356

在中间层和其他过滤驱动中,经常有向下层设备获取信息的需求。
有4个内核函数可以完成这个操作:
IoBuildDeviceIoControlRequest
IoBuildAsynchronousFsdRequest
IoBuildSynchronousFsdRequest
IoAllocateIrp

其中前两者都会调用IoAllocateIrp,IoBuildSynchronousFsdRequest会在内部调用IoBuildAsynchronousFsdRequest。

IoAllocateIrp顾名思义,是分配IRP的函数,从它得到的IRP,需要填写符合目的的参数才可以IoCallDriver。

我们的驱动向下层获取信息,一般会等待这个操作完成,拿到数据才会往下执行,说明这里是个同步操作。
一般常见的操作是初始化一个事件,用上面提到的函数创建IRP,给IRP设置一个完成函数发往下层,然后等待这个事件;
完成函数里置信这个事件,返回STATUS_MORE_PROCESSING_REQUIRED,达到等待完成的目的。
操作完成后,IoAllocateIrp和IoBuildAsynchronousFsdRequest的IRP需要IoFreeIrp。

其实Irp里UserEvent,和Flags项,配合起来做同步操作是非常惬意的。

Irp->Flags |= IRP_CLOSE_OPERATION;        // 完成后自动 KeSetEvent(Irp->UserEvent)
Irp->Flags |= IRP_SYNCHRONOUS_PAGING_IO;  // 完成后自动 IoFreeIrp

这样就不需要设置完成函数来KeSetEvent。

参考:
http://bbs.pediy.com/showthread.php?t=140445  IoCompleteRequest
389K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7$3c8F1i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8X3I4A6j5Y4u0S2M7Y4W2Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0r3K9r3q4J5k6s2N6S2M7X3g2Q4x3V1k6X3k6U0f1@1z5o6x3I4z5q4)9J5z5s2k6Q4x3@1c8$3M7#2)9J5k6e0R3#2i4K6t1&6i4K6u0W2j5i4y4H3P5q4)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4x3U0k6F1j5Y4y4H3i4K6y4n7d9h3!0n7N6h3W2D9k6p5c8W2N6X3W2U0k6f1W2G2b7$3!0F1N6s2u0G2L8q4u0W2M7i4g2W2M7%4b7`.
1feK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7$3c8F1i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8X3I4A6j5Y4u0S2M7Y4W2Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0r3K9r3q4J5k6s2N6S2M7X3g2Q4x3V1k6X3k6U0f1@1z5o6x3K6x3q4)9J5z5s2k6Q4x3@1c8$3M7#2)9J5k6e0R3#2i4K6t1&6i4K6u0W2j5i4y4H3P5q4)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4x3U0k6F1j5Y4y4H3i4K6y4n7d9h3!0n7N6h3W2D9k6q4y4&6L8X3y4Z5M7X3!0F1L8%4g2K6c8Y4y4V1f1X3g2I4N6h3g2K6N6l9`.`.
79aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7$3c8F1i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8X3I4A6j5Y4u0S2M7Y4W2Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0r3K9r3q4J5k6s2N6S2M7X3g2Q4x3V1k6X3k6U0f1@1z5o6x3I4x3q4)9J5z5s2k6Q4x3@1c8$3M7#2)9J5k6e0R3#2i4K6t1&6i4K6u0W2j5i4y4H3P5q4)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4x3U0k6F1j5Y4y4H3i4K6y4n7d9h3!0n7N6h3W2D9k6p5q4K6P5h3&6U0K9s2u0G2L8X3!0#2M7@1k6K6k6q4u0W2M7i4g2W2M7%4b7`.

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 8
活跃值: (233)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
ok
2015-4-5 21:31
0
游客
登录 | 注册 方可回帖
返回