ExGetHeapFromType

NTSTATUS __stdcall ExGetHeapFromType(INT64 a1, UINT64 a2, INT64 a3){
  __int64 *v3; 
  __int64 v4; 
  __int64 v5; 
  __int64 v6; 

  if( (_DWORD)a2 == 0x80000000 )
    LODWORD(a2) = KeGetCurrentPrcb()->ParentNode->Affinity.Reserved[0];
  v3 = &qword_140C57E00[1048 * ((unsigned int)a2 < dword_140C57DD0 ? a2 : 0)];
  if( (int)a1 < 0 )
  {
    if( (_DWORD)a3 )
      LODWORD(v5) = qword_140CDAE18;
    else
      return v3[3];
  }
  else if( (a1 & 0x21) == 33 )
  {
    v6 = *((_QWORD *)KeGetCurrentThread()->ApcState.Process->Session + 84);
    if( (_DWORD)a3 )
      return *(_QWORD *)(v6 + 14568);
    else
      return *(_QWORD *)(v6 + 14560);
  }
  else
  {
    if( (a1 & 1) != 0 )
      v4 = 2i64;
    else
      v4 = (a1 & 0x200) != 0;
    if( (_DWORD)a3 )
      return qword_140CDAE00[v4];
    else
      return v3[v4];
  }
  return v5;
}

Referenced by:

ExAllocateContiguousHeapPool
ExAllocateHeapPages
ExAllocateHeapSpecialPool