MiInitializeSystemPageTable

VOID __stdcall MiInitializeSystemPageTable(_MMPTE *PointerPte, _MMPFN *Pfn1){
  INT64 v2; 
  char *v3; 
  char *v4; 
  UINT64 v5; 
  unsigned int v6; 
  unsigned int v7; 
  _MMPTE *PteBase; 
  __int64 v9; 
  unsigned __int64 v10; 
  _MMPTE *v11; 
  _MMPTE *PteLimit; 
  unsigned int v13; 
  UINT64 v14; 
  unsigned __int64 v15; 
  UINT64 v16; 
  unsigned __int64 v17; 
  UINT64 v18; 
  INT64 v19; 
  _MMPTE v20; 
  VOID *v21; 
  INT64 v22; 
  UINT64 v23; 
  unsigned __int64 v24; 
  int v25; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  _MI_TB_FLUSH_LIST *TbFlushList; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  v4 = v3;
  v5 = v2;
  v6 = (unsigned int)Pfn1;
  v7 = 0;
  MI_READ_PTE_LOCK_FREE(v2);
  PteBase = MmGetPteBase();
  v9 = (v4 - (char *)MmGetPfnDb()) / 48;
  v10 = (__int64)((v5 << 25) - ((_QWORD)PteBase << 25)) >> 16;
  v11 = PteBase;
  PteLimit = MmGetPteLimit();
  if( v10 < (unsigned __int64)v11 || v10 > (unsigned __int64)PteLimit )
  {
    MiFillPhysicalPages((PVOID)v9);
    v13 = -1879048188;
  }
  else
  {
    v13 = -1879048186;
  }
  LODWORD(v14) = MiGetLeafVa(v5);
  v15 = v14;
  if( MiGetSystemRegionType(v14) == 1 )
  {
    v7 = 1;
  }
  else if( v15 <= 0x7FFFFFFEFFFFi64
         || v15 >= *(&stru_140C4DB30 + 937) && v15 <= *(&stru_140C4DB30 + 175)
         || v15 >= (unsigned __int64)MmGetPteBase() && v15 <= (unsigned __int64)MmGetPteLimit() )
  {
    v7 = 4;
  }
  *(_QWORD *)v4 = 0i64;
  LODWORD(v16) = MiGetContainingPageTable(v5);
  v18 = v16;
  if( v10 >= (unsigned __int64)MmGetPteBase() && v10 <= v17 )
    v13 |= 0x8000000u;
  LODWORD(v19) = MiMakeValidPte((_XSTATE_CONFIGURATION *)v5, v9, v13);
  v22 = v19;
  if( v6 == 3 && (MiFlags & 0x30) != 0 )
  {
    if( (v7 & 1) != 0 )
    {
      LODWORD(v23) = MiUpdateSessionPdeMaster(v21, v20);
      v18 = v23;
    }
    else if( v7 < 4 )
    {
      if( PsInitialSystemProcess )
      {
        v18 = PsInitialSystemProcess->Pcb.DirectoryTableBase >> 12;
      }
      else
      {
        LODWORD(v24) = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((v5 >> 9) & 0x7FFFFFFFF8i64));
        v18 = (v24 >> 12) & 0xFFFFFFFFFi64;
      }
    }
  }
  MiInitializePfnForOtherProcess(v9, (_MMPTE *)v5, v18, 0x200ui64);
  if( v6 == 3 )
    KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C4DB30 + 522, &LockHandle);
  if( (MI_READ_PTE_LOCK_FREE(v5) & 1) != 0 )
  {
    MiTransformValidPteInPlace((INT64 *)v5, v5, v22, v6);
    if( v6 != 3 )
      return;
    MiInsertRecursiveTbFlushEntries(TbFlushList, 3i64, v5);
  }
  else
  {
    LOBYTE(v25) = MiPteInShadowRange(v5);
    if( v25 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v22 & 1) != 0 )
      v22 |= 0x8000000000000000ui64;
    *(_QWORD *)v5 = v22;
  }
  if( v6 == 3 )
  {
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
  }
}

Referenced by:

MiCreateSystemPageTable