MiInitializeGapFrames

UINT64 __stdcall MiInitializeGapFrames(UINT64 Pattern, UINT64 *GapFrames){
  INT64 v3; 
  INT64 v4; 
  unsigned int v5; 
  UINT64 *v6; 
  UINT64 Page; 
  char *v8; 
  unsigned __int64 v9; 
  UINT64 v10; 
  INT64 v11; 
  __int64 v12; 
  if( Pattern )
  {
    if( Pattern != -1i64 )
      return 0i64;
    v3 = qword_140C4EAA8;
  }
  else
  {
    v3 = qword_140C4EAC0;
  }
  v4 = MiReservePtes((INT64)&qword_140C4EC80, 3ui64);
  if( !v4 || (MiAcquireNonPagedResources((_MI_PARTITION *)&MiSystemPartition, 3ui64) & 0x80000000) != 0i64 )
    return 0i64;
  v5 = 0;
  v6 = GapFrames;
  do
  {
    if( v5 )
    {
      Page = MiGetPage((_MI_PARTITION *)&MiSystemPartition, v5, 0x208ui64);
      v3 = Page;
      if( Page == -1i64 )
        return 0i64;
      v8 = (char *)MmGetPfnDb() + 48 * Page;
      *((_QWORD *)v8 + 5) &= ~0x8000000000000000ui64;
      v9 = *((_QWORD *)v8 + 3) & 0xC000000000000001ui64;
      *((_WORD *)v8 + 16) = 1;
      *((_QWORD *)v8 + 3) = v9 | 1;
      v10 = v4 + 8i64 * v5 - 8;
      *(_QWORD *)v10 = MiMakeValidPte(v4 + 8i64 * v5, v3, 2684354564i64);
      v11 = 536870913i64;
      v12 = (__int64)((v10 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
      if( v5 != 1 )
        v11 = 2818572292i64;
      if( v5 != 1 )
        v10 = 0i64;
      memset64((void *)v12, MiMakeValidPte(v10, GapFrames[v5 - 1], v11), 0x200ui64);
    }
    *v6 = v3;
    ++v5;
    ++v6;
  }
  while( v5 < 4 );
  MiReleasePtes((INT64)&qword_140C4EC80, v4, 3ui64);
  return 1i64;
}

Referenced by:

MiFillPfnGaps
MiInitNucleus