MiAllocateZeroPageDecisionTraceBuffer

_DWORD *__fastcall MiAllocateZeroPageDecisionTraceBuffer(INT64 a1, UINT64 a2){
  _DWORD *v2; 
  unsigned __int64 v3; 
  __int64 v4; 
  __int64 v5; 
  __int64 *v6; 
  _QWORD *v7; 
  unsigned __int64 v8; 
  _DWORD *v9; 
  v2 = 0i64;
  v3 = 0i64;
  v4 = 2i64;
  v5 = *(_QWORD *)(a1 + 16) + 4544i64 * (unsigned int)a2;
  v6 = MiLargePageSizes;
  v7 = (_QWORD *)(v5 + 8);
  do
  {
    if( *v7 )
      v3 += *v7 * *v6;
    v7 += 134;
    ++v6;
    --v4;
  }
  while( v4 );
  if( !v3 )
    return 0i64;
  v8 = v3 >> 12;
  if( 16i64 * (unsigned int)v8 )
  {
    LODWORD(v9) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
    v2 = v9;
    if( v9 )
    {
      v9[1] = 0;
      *v9 = v8;
      v9[2] = 1;
    }
  }
  return v2;
}

Referenced by:

MiZeroBootLargePages