MiInitializeShadowPageTable

void __fastcall MiInitializeShadowPageTable(__int64 a1, char *a2, int a3){
  _MMPTE *PteBase; 
  __int64 v5; 
  __int64 v6; 
  UINT64 v7; 
  __int64 v8; 
  unsigned __int64 PteShadow; 
  int v10; 
  signed __int64 v11; 
  int v12; 
  int v13; 
  _MMPTE *v14; 
  int v15; 
  unsigned __int64 v16; 
  int v17; 
  UINT64 v18; 
  __int64 v19; 
  unsigned __int64 v20; 
  _MMPTE *PteAddress; 
  int v22; 
  __int64 v23; 
  signed __int64 v24; 
  __int64 v25; 
  UINT64 v26; 

  PteBase = MmGetPteBase();
  v5 = a1;
  if( a3 )
  {
    *(_QWORD *)a2 = 0i64;
    v13 = 6;
    v12 = 3;
    v11 = (a2 - (char *)MmGetPfnDb()) / 48;
    if( a3 == 3 )
    {
      v18 = -1i64;
      goto LABEL_11;
    }
  }
  else
  {
    v6 = ((a1 << 25) - ((_QWORD)PteBase << 25)) >> 16;
    if( MI_IS_PHYSICAL_ADDRESS((VOID *)v6) )
    {
      PteAddress = (_MMPTE *)v5;
      do
        PteAddress = MiGetPteAddress(PteAddress);
      while( v22 != 1 );
      LODWORD(v23) = MI_READ_PTE_LOCK_FREE((INT64)PteAddress);
      v8 = v23;
      LODWORD(v24) = MiVaToPfn((VOID *)v6);
      v11 = v24;
    }
    else
    {
      LODWORD(v7) = MI_READ_PTE_LOCK_FREE(v5);
      v26 = v7;
      v8 = v7;
      PteShadow = v7;
      LOBYTE(v10) = MiPteInShadowRange((UINT64)&v26);
      if( v10 )
        PteShadow = MiReadPteShadow((__int64)&v26, v8);
      v11 = (PteShadow >> 12) & 0xFFFFFFFFFi64;
    }
    v12 = 3;
    v13 = ((v8 & 0x800) != 0 ? 4 : 1) | 2;
    if( v8 < 0 )
      v13 = (v8 & 0x800) != 0 ? 4 : 1;
  }
  v14 = MiGetPteAddress((VOID *)v5);
  v26 = MiReadWriteAnyLevelShadowPte((unsigned __int64)v14, v15, 0, ZeroPte.u.Long);
  v16 = v26;
  LOBYTE(v17) = MiPteInShadowRange((UINT64)&v26);
  if( v17 )
    v16 = MiReadPteShadow((__int64)&v26, v16);
  v18 = (v16 >> 12) & 0xFFFFFFFFFi64;
LABEL_11:
  LODWORD(v19) = MiMakeValidPte((_XSTATE_CONFIGURATION *)v5, v11, v13 | (a3 != 0 ? -1744830464 : -1879048192));
  v20 = v19 & 0xFFFFFFFFFFFFFEFFui64;
  if( a3 )
  {
    if( a3 == 3 )
      v18 = PsInitialSystemProcess->Pcb.DirectoryTableBase >> 12;
    MiInitializePfnForOtherProcess(v11, (_MMPTE *)v5, v18, 0xA00ui64);
  }
  MiReadWriteAnyLevelShadowPte(v5, a3, 1, v20);
  if( a3 == 3 )
  {
    MiMarkPxeAsShadowed(v5);
    v25 = (_QWORD)MmGetPteBase() << 25;
    do
    {
      v5 = ((v5 << 25) - v25) >> 16;
      --v12;
    }
    while( v12 );
    MiReplicatePteChange((_MMPTE *)v5, (_MMPTE *)v5);
  }
}

Referenced by:

MiMakeShadowPageTableRange