阅读:1286回复:5
关于分配缓冲区的问题
我有一个驱动程序.
在DriverEntry列程中有这么 ConfigList = ExAllocatePool(PagedPool,sizeof(*ConfigList)); RtlZeroMemory(ConfigList, sizeof(*ConfigList)); 一条语句。 我不明白的是: 1、为什么用PagedPool,因为PagedPool 只有在IRQL低于DISPATCH_LEVEL的例程使用,然而DriverEntry例程运行在DISPATCH_LEVEL中断级。 2、为什么要用RtlZeroMemory(ConfigList, sizeof(*ConfigList)); 这条语句。 [编辑 - 2/22/05 by zhongjie] |
|
沙发#
发布于:2005-02-22 22:50
1、为什么用PagedPool,因为PagedPool 只有在IRQL低于DISPATCH_LEVEL的例程使用,然而DriverEntry例程运行在DISPATCH_LEVEL中断级。
谁说的???一般的DriverEntry都运行在PASSIVE_LEVEL的 2、为什么要用RtlZeroMemory(ConfigList, sizeof(*ConfigList)); 分配好以后初始化为0 ,不然的话里面都是垃圾数据,可能会对你的数据产生干扰...... |
|
|
板凳#
发布于:2005-02-22 22:52
我有一个驱动程序. (1)DriverEntry例程是运行在PASSIVE_LEVEL中断级的! 所以问题一是合理的。。没有问题! (2)用RtlZeroMemory(ConfigList, sizeof(*ConfigList));就是把 指针所指的存储区域初始化为零。。。就跟新定义的变量要初始化是一个概念的。。 |
|
|
地板#
发布于:2005-02-23 09:46
DriverEntry例程是运行在PASSIVE_LEVEL中断级的!而且有的驱动甚至在调用完DriverEntry例程后,就将它从内存中整个抛掉了
用RtlZeroMemory(ConfigList, sizeof(*ConfigList));就是把 指针所指的存储区域初始化为零。在应用程序中为防止一个进程的数据被另一个进程窃取,操作系统自动会为你做此事,核心驱动就得自己做 |
|
|
地下室#
发布于:2005-02-23 10:55
越讲越清楚啊,呵呵
|
|
|
5楼#
发布于:2005-02-23 16:10
谢谢各位了,我明白了。
|
|