MiInsertTbFlushEntry

UINT64 __fastcall MiInsertTbFlushEntry(INT64 a1, UINT64 a2, INT64 a3, INT64 a4){
  __int64 v6; 
  UINT64 v7; 
  unsigned int v8; 
  int v9; 
  UINT64 result; 
  unsigned __int64 v11; 
  INT64 v12; 
  unsigned __int64 v13; 
  INT64 v14; 
  size_t v15; 
  INT64 v16; 
  char v17; 
  INT64 v18; 
  __int64 v19; 
  v6 = 4096i64 << (9 * (unsigned __int8)a4);
  v7 = a2;
  if( *(_DWORD *)a1 != 1 )
  {
    v17 = *(_BYTE *)(a1 + 4);
    if( (v17 & 8) == 0 && a2 >= (unsigned __int64)MmGetPteBase() && a2 <= (unsigned __int64)MmGetPteLimit() )
      *(_BYTE *)(a1 + 4) = v17 | 8;
  }
  v8 = *(_DWORD *)(a1 + 12);
  v9 = 1;
  if( !v8 || (*(_BYTE *)(a1 + 4) & 4) != 0 )
  {
    result = 0i64;
  }
  else
  {
    result = *(_QWORD *)(a1 + 8i64 * (v8 - 1) + 24);
    if( ((result >> 10) & 3) != (unsigned int)a4 )
      goto LABEL_11;
    result &= 0xFFFFFFFFFFFFF000ui64;
    v11 = *(_QWORD *)(a1 + 8i64 * (v8 - 1) + 24) & 0x3FFi64;
    if( result + v6 * (v11 + 1) != v7 )
      goto LABEL_11;
    result = v11 + a3;
    if( v11 + a3 > 0x3FF || result <= v11 )
      goto LABEL_11;
    result = 1i64;
  }
  if( (_DWORD)result )
  {
    v16 = a1 + 8i64 * (v8 - 1);
    result = *(_QWORD *)(v16 + 24);
    *(_QWORD *)(a1 + 16) += a3;
    *(_QWORD *)(v16 + 24) = result ^ ((unsigned __int16)result ^ (unsigned __int16)(result + a3)) & 0x3FF;
    return result;
  }
LABEL_11:
  if( !v8 || (*(_BYTE *)(a1 + 4) & 4) != 0 )
  {
    v9 = 0;
    v12 = v6 * a3;
  }
  else
  {
    result = *(_QWORD *)(a1 + 8i64 * (v8 - 1) + 24);
    if( ((result >> 10) & 3) != (unsigned int)a4 )
      goto LABEL_14;
    v12 = a3 * v6;
    if( (result & 0xFFFFFFFFFFFFF000ui64) != a3 * v6 + v7 )
      goto LABEL_14;
    result &= 0x3FFu;
    if( result + a3 <= result || result + a3 > 0x3FF )
      goto LABEL_14;
  }
  if( v9 )
  {
    v18 = a1 + 8i64 * (v8 - 1);
    v19 = *(_QWORD *)(v18 + 24);
    *(_QWORD *)(a1 + 16) += a3;
    result = v19 - v12;
    *(_QWORD *)(v18 + 24) = result ^ ((unsigned __int16)result ^ (unsigned __int16)(result + a3)) & 0x3FF;
    return result;
  }
LABEL_14:
  if( v8 >= *(_DWORD *)(a1 + 8) )
  {
    *(_BYTE *)(a1 + 5) = 1;
  }
  else if( a3 )
  {
    v13 = (unsigned __int64)(a4 & 3) << 10;
    while( 1 )
    {
      v14 = 1024i64;
      if( (unsigned __int64)(a3 - 1) <= 0x3FF )
        v14 = a3;
      a3 -= v14;
      result = v13 | v7 & 0xFFFFFFFFFFFFF000ui64 | ((_WORD)v14 - 1) & 0x3FF;
      v7 += v14 * v6;
      *(_QWORD *)(a1 + 8i64 * (unsigned int)(*(_DWORD *)(a1 + 12))++ + 24) = result;
      v15 = *(unsigned int *)(a1 + 12);
      *(_QWORD *)(a1 + 16) += v14;
      if( (_DWORD)v15 == *(_DWORD *)(a1 + 8) && (*(_BYTE *)(a1 + 4) & 4) == 0 )
      {
        qsort((WCHAR *)(a1 + 24), v15, (const WCHAR *)8, MiTbFlushSort);
        MiCompressTbFlushList(a1);
        result = *(unsigned int *)(a1 + 12);
        if( (_DWORD)result == *(_DWORD *)(a1 + 8) )
          break;
      }
      if( !a3 )
        return result;
    }
    if( a3 )
    {
      *(_BYTE *)(a1 + 5) = 1;
      *(_QWORD *)(a1 + 16) = result;
    }
  }
  return result;
}

Referenced by:

MiAgePteWorker
MiBuildForkPte
MiClearDriverHotPatchPtes
MiClearSystemAccessBits
MiConvertPrivateToProto
MiCopyOnWrite
MiDecommitHardwareEnclavePages
MiDecommitLargePte
MiDecommitPages
MiDeleteEmptyPageTable
MiDeleteLargeUserPde
MiDeleteNonPagedPoolPte
MiDeletePhysmemPte
MiDeletePteWsleCluster
MiDeleteSystemPagableVm
MiDeleteSystemPageTable
MiDeleteTopLevelSessionMapping
MiDeleteVa
MiDeprioritizeVirtualAddresses
MiEliminateZeroPages
MiEmptyWorkingSetHelper
MiFlushDirtyBitsToPfn
MiFlushEnclaveTb
MiFlushHyperSpace
MiFlushKernelCfgBitmap
MiFlushTbAsNeeded
MiFreePhysicalPages
MiGetPteFromCopyList
MiInitializeTbFlush
MiInsertLargeTbFlushEntry
MiInsertRecursiveTbFlushEntries
MiLargePageFault
MiLockCode
MiMakePteClean
MiMakeVaRangeNoAccess
MiMapMdlCommon
MiMapMemoryDumpMdl
MiMarkBootKernelStack
MiObtainSystemCacheView
MiOutPageSingleKernelStack
MiProtectAweRegion
MiProtectEnclavePages
MiProtectLargeKernelHalRange
MiProtectSharedUserPage
MiReleasePtes
MiReplacePageTablePage
MiReplaceRotateWithDemandZero
MiReplenishBitMap
MiRevertValidPte
MiRevokeExecutePte
MiScrubLargeMappedPage
MiSetPagingOfDriver
MiSetProtectionOnSection
MiSetSystemCodeProtection
MiSharePages
MiSwitchToTransition
MiTerminateWsleCluster
MiTrimPte
MiTrimPteWorker
MiTrimSharedPageFromViews
MiUnmapMdlCommon
MiUnmapPatchTable
MiUnmapRetpolineStubs
MiWalkVaRange
MiWriteAwePtes
MiWsleFlush
MiZeroAndFlushPtes
MiZeroPage
MiZeroPageWorkMapping
MiZeroWithSystemPtes
MmDeleteShadowMapping
MmFreeLoaderBlock
MmMapViewInSystemCache
MmProtectMdlSystemAddress
MmProtectPool
MmSetAddressRangeModifiedEx
MmSetPageProtection
NtUnlockVirtualMemory