阅读:1372回复:5
有关驱动程序的存储分配
小弟看到Art Baker的《Windows 2000 设备驱动程序设计指南》上面写的,在x86平台下,内核堆栈只有12kB大小,然后介绍了使用内存池的办法。我想请教各位的是,在我的驱动程序里面有很多例程,比如DriverEntry,MPSend之类的函数,我想在函数之间共享数据,于是使用了全局变量,这个全局变量的存储空间是否就是在内核堆栈上面分配的?如果是的话,我要换成使用内存池,该怎么办呢?(也就是既是全局变量,又是在内存池里面分配的)多谢~~~~~~~~
|
|
|
沙发#
发布于:2002-11-25 12:24
全局变量使用的非分页的内存池空间,不是堆栈。请放心使用。
|
|
|
板凳#
发布于:2002-11-25 13:04
阿?真的吗?那可太好了阿!感谢版主!
对了,那么全局变量不用使用ExAllocatePool和ExFreePool来进行操作吗? |
|
|
地板#
发布于:2002-11-25 13:35
你全局变量声明的是什么?
如果全局变量声明的是一个缓冲区的指针,指向一块将分配的非分页内存,那么肯定地需要在后续的地方用ExAllocatePool来分配内存。 例如: 全局声明: LPVOID lpGlobalBuffer=NULL; 假设在DriverEntry例程中分配这块内存,并将这块非分内存的指存存在全局指针变量中,以方便其它例程存取。 NTSTATUS DriverEntry(...) { lpGlobalBuffer = ExAllocatePool( NonPagedPool,MY_SIZE ); } 表态分配的全局内存不需要调用ExFreePool释放,例如: ULONG data[1024]; 但是如果作为全局变量的只是一个指针,而且在随后的操作中将动态分配的内存指针赋给了它,就需要释放。 |
|
|
地下室#
发布于:2002-11-25 13:42
这下我彻底明白了!谢谢版主!再次感谢!
|
|
|
5楼#
发布于:2002-11-25 13:56
不客气:)
|
|
|