| 
			 
					阅读:1393回复: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				
			
					谢谢各位了,我明白了。				 
							 | 
	|