ViGrowPoolAllocation

PSLIST_ENTRY __fastcall ViGrowPoolAllocation(union SLIST_HEADER *a1){
  struct _SLIST_ENTRY *PoolWithTagPriority; 
  union _SLIST_HEADER *v3; 
  struct _SLIST_ENTRY *v4; 
  __int64 v6; 
  PoolWithTagPriority = (struct _SLIST_ENTRY *)ExAllocatePoolWithTagPriority(
                                                 (POOL_TYPE)640,
                                                 0x1000ui64,
                                                 0x70706556ui64,
                                                 HighPoolPriority);
  v3 = (union SLIST_HEADER *)((char *)a1 + 80);
  v4 = PoolWithTagPriority;
  if( !PoolWithTagPriority )
    return RtlpInterlockedPopEntrySList((union SLIST_HEADER *)((char *)a1 + 80));
  KeZeroSinglePage(PoolWithTagPriority);
  *((_QWORD *)&v4->Next + 1) = a1;
  v4[1].Next = (_SLIST_ENTRY *)556929861;
  RtlpInterlockedPushEntrySList((union SLIST_HEADER *)((char *)a1 + 64), v4);
  v6 = 126i64;
  do
  {
    v4 += 2;
    v4[1].Next = (_SLIST_ENTRY *)1;
    RtlpInterlockedPushEntrySList(v3, v4);
    --v6;
  }
  while( v6 );
  v4[3].Next = (_SLIST_ENTRY *)1;
  return v4 + 2;
}

Referenced by:

VeAllocatePoolWithTagPriority