HalpMmAllocCtxAllocBuffer

_DWORD *__fastcall HalpMmAllocCtxAllocBuffer(__int64 a1, SIZE_T a2){
  SIZE_T v3; 
  _DWORD *PoolWithTag; 
  _DWORD *v5; 
  VOID *v6; 
  __int64 v7; 
  _DWORD *v8; 
  v3 = a2 >> 4;
  PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, (a2 >> 7) + 48, 0x626C6148ui64);
  v5 = PoolWithTag;
  if( !PoolWithTag )
    return 0i64;
  memset((INT64)PoolWithTag, 0i64);
  v5[8] = v3;
  *((_QWORD *)v5 + 5) = ((unsigned __int64)v5 + 51) & 0xFFFFFFFFFFFFFFFCui64;
  *((_QWORD *)v5 + 1) = v5;
  *(_QWORD *)v5 = v5;
  v6 = ExAllocatePoolWithTag(NonPagedPoolNx, a2, 0x426C6148ui64);
  *((_QWORD *)v5 + 2) = v6;
  if( v6 )
  {
    v8 = v5;
    v5 = 0i64;
  }
  else
  {
    v8 = 0i64;
  }
  if( v5 )
    HalpMmAllocCtxBufferCleanup(v7, v5);
  return v8;
}

Referenced by:

HalpMmAllocCtxAlloc