MiMakeValidPte

UINT64 __fastcall MiMakeValidPte(UINT64 a1, INT64 a2, INT64 a3){
  int v3; 
  INT64 v4; 
  UINT64 PteBase; 
  INT64 v7; 
  unsigned __int64 v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  __int64 v11; 
  _MMPTE *PteLimit; 
  unsigned __int64 LeafVa; 
  unsigned __int64 v15; 
  int v16; 
  v3 = a3;
  v4 = a3 & 0x1F;
  PteBase = (UINT64)MmGetPteBase();
  v7 = (a2 & 0xFFFFFFFFFi64) << 12;
  v8 = v7 | MmProtectToPteMask[v4] & 0xFFFF000000000E7Fui64 | 0x21;
  if( a1 < PteBase )
    goto LABEL_2;
  PteLimit = MmGetPteLimit();
  if( a1 > (unsigned __int64)PteLimit )
    goto LABEL_2;
  LeafVa = (__int64)((a1 << 25) - (PteBase << 25)) >> 16;
  if( a1 >= (unsigned __int64)MmGetPdeBase() && a1 <= (unsigned __int64)MmGetPdeLimit() )
  {
    if( (_MMPTE *)a1 == MmGetPxeSelfRef() )
    {
      v8 = v7 | MmProtectToPteMask[v4] & 0xFFFF000000000E7Fui64 | 0x8000000000000021ui64;
    }
    else if( (a3 & 0x4000000) == 0 )
    {
      v8 = v7 & 0x7FFFFFFFFFFFFFFFi64 | MmProtectToPteMask[v4] & 0x7FFF000000000E7Fi64 | 0x21;
    }
    if( (unsigned int)MiUserPdeOrAbove(a1) )
      v8 |= 4ui64;
  }
  v15 = v8;
  v8 |= 4ui64;
  if( a1 > PteBase + 0x3FFFFFFF78i64 )
    v8 = v15;
  if( (v3 & 0x4000000) != 0 )
    LeafVa = MiGetLeafVa((__int64)((a1 << 25) - (PteBase << 25)) >> 16);
  if( LeafVa < 0xFFFF800000000000ui64 )
  {
    v16 = HIBYTE(word_140C4DD48);
    goto LABEL_25;
  }
  if( *((_BYTE *)&antNameB + ((LeafVa >> 39) & 0x1FF) - 256) != 1
    && (LeafVa < PteBase || LeafVa > (unsigned __int64)PteLimit) )
  {
    if( LeafVa < qword_140C4F878 || LeafVa > qword_140C4E0A8 )
      v16 = (unsigned __int8)word_140C4DD48;
    else
      v16 = HIBYTE(word_140C4DD48);
LABEL_25:
    if( !v16 )
      goto LABEL_3;
LABEL_2:
    v8 |= 0x100ui64;
  }
LABEL_3:
  v9 = v8 | 0x42;
  if( v3 >= 0 || (v4 & 5) != 4 )
    v9 = v8;
  if( (v3 & 0x40000000) != 0 )
    v9 &= ~4ui64;
  if( (v3 & 0x20000000) != 0 )
    v9 = ((unsigned __int16)v9 ^ (unsigned __int16)((unsigned __int8)word_140C4DD48 << 8)) & 0x100 ^ (unsigned __int64)v9;
  v10 = v9 & 0xFFFFFFFFFFFFFEFFui64;
  if( (v3 & 0x8000000) == 0 )
    v10 = v9;
  v11 = v10 | 0x80;
  if( (v3 & 0x4000000) == 0 )
    v11 = v10;
  return v11 & 0xF0FFFFFFFFFFFFFFui64 | 0xA00000000000000i64;
}

Referenced by:

MiAddPagesToEnclave
MiAllocateKernelStackPages
MiAllocateTopLevelPage
MiAssignNonPagedPoolPte
MiBuildForkPageTable
MiBuildReservationCluster
MiCaptureSparsePages
MiCompleteRestrictedImageFault
MiCopyDataPageToImagePage
MiCopyPagesIntoEnclave
MiCopySinglePage
MiCopyToUserVa
MiCreateHardwareEnclave
MiCreateSharedZeroPages
MiDbgTranslatePhysicalAddress
MiDecommitHardwareEnclavePages
MiDecrementAndInsertStandbyPages
MiDeletePteRun
MiDemoteValidLargePageOneLevel
MiEnableLargeSubsection
MiFillGapPtes
MiFillPageWithImageExtentContents
MiFillPhysicalPages
MiFillSystemPtes
MiFinishLastForkPageTable
MiGetPageChain
MiGetPteFromCopyList
MiGetUltraMapping
MiHugePageOperation
MiInitializeDummyPages
MiInitializeDynamicBitmap
MiInitializeEnclaveMetadataPage
MiInitializeGapFrames
MiInitializeNewUltraHugeContext
MiInitializeProtoPfn
MiInitializeShadowPageTable
MiInitializeSharedUserData
MiInitializeSlowPte
MiInitializeSystemPageTable
MiInitializeTbFlush
MiInitializeUnusablePfns
MiInsertLargeUserMapping
MiInsertLargeVadMapping
MiInsertPhysicalPteMapping
MiLinkPoolCommitChain
MiMakeLargePageTable
MiMakeOutswappedPageResident
MiMakeSystemCachePteValid
MiMakeTransitionPteValid
MiMapArbitraryPage
MiMapBBTMemory
MiMapDummyPages
MiMapFrame
MiMapMdlCommon
MiMapMemoryDumpMdl
MiMapNewSession
MiMapPageFileHash
MiMapPageInHyperSpaceWorker
MiMapRetpolineStubs
MiMapSinglePage
MiMapWithLargePages
MiPrivateFixup
MiProtectAweRegion
MiProtectEnclavePages
MiProtectLargeKernelHalRange
MiReadyStandbyPageForActive
MiRelocateImagePfn
MiReplacePfnWithGapMapping
MiResolveProtoCombine
MiScrubNodeLargePageList
MiScrubPage
MiSetProtectionOnTransitionPte
MiSetSystemCodeProtection
MiTimeSingleLargePageZeroWorker
MiUnlinkStandbyPfn
MiUnmapMdlCommon
MiUpdateImagePfnImportRelocations
MiUpdateLargePageSectionPfns
MiValidateImagePfn
MiWriteAwePtes
MiWsleFree
MiZeroLargePage
MiZeroPhysicalPage
MiZeroWithSystemPtes
MiZeroWithUltraSpace
MmAllocateIndependentPagesEx
MmAllocateNonCachedMemory
MmChangeKernelCfgBitmap
MmCheckCachedPageStates
MmCreateProcessAddressSpace
MmMapHotPatchTablePage
MmProtectMdlSystemAddress
MmProtectPool
MmReadProcessPageTables
MmSetPageProtection
MxCopyPage
MxMapVa
MxSwapPages