系列文章目录
道过 ExAllocatePool()分配缓冲区
EiAllocatePool()
道过 ExAllocatePool()分配缓冲区
/* FUNCTIONS ***************************************************************/
static PVOID STDCALL
EiAllocatePool(POOL_TYPE PoolType,
ULONG NumberOfBytes,
ULONG Tag,
PVOID Caller)
{
PVOID Block;
/* FIXME: Handle SESSION_POOL_MASK, VERIFIER_POOL_MASK, QUOTA_POOL_MASK */
if (PoolType & PAGED_POOL_MASK)//最低位为1
{
Block = ExAllocatePagedPoolWithTag(PoolType,NumberOfBytes,Tag);
}
else
{
Block = ExAllocateNonPagedPoolWithTag(PoolType,NumberOfBytes,Tag,Caller);
}
if ((PoolType & MUST_SUCCEED_POOL_MASK) && Block==NULL)
{//只许成功不许失败,但是失败了
KEBUGCHECK(MUST_SUCCEED_POOL_EMPTY);
}
return(Block);
}