MiFillGapPtes

char __fastcall MiFillGapPtes(unsigned __int64 a1, unsigned __int64 a2, __int64 a3, __int64 a4, int a5){
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  unsigned __int64 CurrentThread; 
  int v10; 
  UINT64 v11; 
  UINT64 ValidPte; 
  __int64 v13; 
  bool v14; 
  v5 = a1;
  v6 = a2;
  if( a1 < *(_QWORD *)(a3 + 16i64 * a5) )
    v5 = *(_QWORD *)(a3 + 16i64 * a5);
  CurrentThread = *(_QWORD *)(a3 + 16i64 * a5 + 8);
  if( a2 > CurrentThread )
    v6 = *(_QWORD *)(a3 + 16i64 * a5 + 8);
  if( v5 <= v6 )
  {
    v10 = 0;
    do
    {
      LOBYTE(CurrentThread) = MI_READ_PTE_LOCK_FREE(v5);
      if( (CurrentThread & 1) != 0 )
      {
        if( a5 && (CurrentThread & 0x80u) == 0i64 )
        {
          v13 = (__int64)((v5 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
          LOBYTE(CurrentThread) = MiFillGapPtes(v13, v13 + 4088, a3, a4, a5 - 1);
        }
        goto LABEL_14;
      }
      v11 = v5;
      if( a5 )
        v11 = 0i64;
      ValidPte = MiMakeValidPte(v11, *(_QWORD *)(a4 + 8i64 * a5), a5 != 0 ? -1476395004 : 536870913);
      LODWORD(CurrentThread) = MiPteInShadowRange(v5);
      if( (_DWORD)CurrentThread )
      {
        LODWORD(CurrentThread) = MiPteHasShadow();
        if( (_DWORD)CurrentThread )
        {
          v10 = 1;
          if( !HIBYTE(word_140C4DD48) )
          {
            v14 = (ValidPte & 1) == 0;
            goto LABEL_24;
          }
        }
        else
        {
          CurrentThread = (unsigned __int64)KeGetCurrentThread();
          if( (*(_DWORD *)(*(_QWORD *)(CurrentThread + 184) + 2172i64) & 0x1000) != 0 )
          {
            v14 = (ValidPte & 1) == 0;
LABEL_24:
            if( !v14 )
            {
              LOBYTE(CurrentThread) = 0;
              ValidPte |= 0x8000000000000000ui64;
            }
          }
        }
      }
      *(_QWORD *)v5 = ValidPte;
      if( v10 )
        LOBYTE(CurrentThread) = MiWritePteShadow();
      v10 = 0;
LABEL_14:
      v5 += 8i64;
    }
    while( v5 <= v6 );
  }
  return CurrentThread;
}

Referenced by:

MiFillGapAddresses
MiFillGapPtes