分类: 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);