MiConvertLargePfnToSmall

VOID __stdcall MiConvertLargePfnToSmall(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
  char v5; 
  __int64 v6; 
  bool v7; 
  int v8[8]; 
  __int128 v9; 
  __int128 v10; 
  unsigned __int64 v11[3]; 

  *(_BYTE *)(a2 + 35) &= 0xF8u;
  v5 = *(_BYTE *)(a2 + 34) & 0xEF;
  *(_BYTE *)(a2 + 34) = v5;
  if( a2 != a1 )
  {
    *(_BYTE *)(a2 + 34) = v5 ^ (v5 ^ *(_BYTE *)(a1 + 34)) & 7;
    *(_QWORD *)(a2 + 16) = *(_QWORD *)(a1 + 16);
  }
  v6 = *(_QWORD *)(a2 + 40);
  *(_BYTE *)(a2 + 39) &= 0xFCu;
  v11[0] = 0i64;
  v11[1] = v6 & 0xFFFFFFEFFFFFFFFFui64;
  v9 = 0i64;
  v10 = 0i64;
  *(_QWORD *)(a2 + 40) = v6 & 0xFFFFFFEFFFFFFFFFui64;
  if( (_DWORD)a4 )
  {
    *(_QWORD *)(a2 + 24) &= 0xC000000000000000ui64;
    v7 = *(_WORD *)(a2 + 32) == 2;
    *(_WORD *)(a2 + 32) -= 2;
    if( v7 )
    {
      _InterlockedOr(v8, 0);
      MiSetPfnTbFlushStamp((_MMPFN *)a2, (unsigned int)KiTbFlushTimeStamp, 1ui64);
    }
  }
}

Referenced by:

MiConvertEntireLargePageToSmall
MiDemoteValidLargePageOneLevel
MiInitializeMdlLeafPfns