MiGetFastLargePages

INT64 __fastcall MiGetFastLargePages(
        UINT64 PageFrameIndex,
        INT64 a2,
        INT64 a3,
        INT64 a4,
        UINT64 ProtectionMask,
        INT64 a6){
  UINT64 v7; 
  UINT64 v8; 
  UINT64 v9; 
  int v10; 
  int v11; 
  UINT64 v12; 
  INT64 LargePagesDemoteAsNeeded; 
  char *v14; 
  __int64 v15; 
  INT64 v17; 
  INT64 v18; 
  INT64 v19; 
  INT64 v20; 
  KeGetCurrentIrql();
  LODWORD(v20) = MiProtectionToCacheAttribute((unsigned int)ProtectionMask);
  v11 = v10 | 1;
  if( (a6 & 4) == 0 )
    v11 = v10;
  LODWORD(v19) = v11;
  LODWORD(v17) = 1;
  v12 = -1i64;
  LargePagesDemoteAsNeeded = MiGetLargePagesDemoteAsNeeded(PageFrameIndex, v7, v8, v9, v17, v19, v20);
  v14 = (char *)LargePagesDemoteAsNeeded;
  if( LargePagesDemoteAsNeeded )
  {
    do
    {
      v15 = (v14 - (char *)MmGetPfnDb()) / 48;
      if( v14 == (char *)LargePagesDemoteAsNeeded )
        v12 = MiLargePageSizes[(unsigned int)MiGetPfnPageSizeIndex((INT64)v14)];
      LODWORD(v18) = 1;
      MiUpdateLargePageBitMap(PageFrameIndex, v15, v12, 1ui64, v18);
      v14 = *(char **)v14;
    }
    while( v14 );
  }
  return LargePagesDemoteAsNeeded;
}

Referenced by:

MiAllocateLargeZeroPages