Chinaunix首页 | 论坛 | 博客
  • 博客访问: 426786
  • 博文数量: 72
  • 博客积分: 1583
  • 博客等级: 上尉
  • 技术积分: 775
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-23 09:36
文章分类

全部博文(72)

文章存档

2011年(72)

我的朋友

分类: WINDOWS

2011-03-08 14:48:52

局部变量存放在栈(Stack)中,栈空间不是很大,所以驱动程序不适合递归调用,或   者局部变量是大型结构体。如果需要大型结构体,要在堆(Heap)中申请

 

堆中申请内存的函数

PVOID ExAllocatePool(

       IN POOL_TYPE PoolType,

       IN SIZE_T NumberOfBytes
    );

PVOID ExAllocatePoolWithTag(//系统在要求的内存外又分配了4个字节的标签

       IN POOL_TYPE PoolType,

       IN SIZE_T NumberOfBytes,

     IN ULONG Tag
    );

 

PVOID ExAllocatePoolWithQuota(//分配的时候按配额分配

       IN POOL_TYPE PoolType,

       IN SIZE_T NumberOfBytes
    );

 

PVOID ExAllocatePoolWithQuotaTag(

       IN POOL_TYPE PoolType,

       IN SIZE_T NumberOfBytes,

       IN ULONG Tag
    );

注意:

PoolType是枚举变量,

如果此值为NonPagedPool,则分配非分页内存。

如果为PagedPool  则分配内存为分页内存

NumberOfBytes是分配的内存的大小,最好是4的倍数

返回值:为分配的内存的地址,一定是内核模式地址。如果返回0,则代表分配失败

 

回收内存

VOID ExFreePool(IN PVOID p);

VOID ExFreePool(IN PVOID p,IN ULONG Tag);

阅读(6311) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~