MxCreatePfn

VOID __fastcall MxCreatePfn(UINT64 PageFrameIndex, _MMPTE *PointerPxe, UINT64 ContainingPage, UINT64 LeafPage){
  char *v4; 
  UINT64 v5; 
  char v6; 
  INT64 v7; 
  int v8; 
  int v9; 
  INT64 v10; 
  __int64 v11; 
  __int16 v12; 
  __int64 v13; 
  int v14; 
  int v15; 
  v4 = (char *)MmGetPfnDb() + 48 * PageFrameIndex;
  if( v15 == 1 )
  {
    *(_OWORD *)v4 = 0i64;
    *((_OWORD *)v4 + 1) = 0i64;
    *((_OWORD *)v4 + 2) = 0i64;
  }
  v5 = LeafPage ^ *((_QWORD *)v4 + 5);
  *((_QWORD *)v4 + 1) = PointerPxe;
  *((_WORD *)v4 + 16) = 1;
  *((_QWORD *)v4 + 5) ^= v5 & 0xFFFFFFFFFi64;
  LOBYTE(v5) = v4[34] & 0xFE;
  *((_QWORD *)v4 + 3) ^= (*((_QWORD *)v4 + 3) ^ (*((_QWORD *)v4 + 3) + 1i64)) & 0x3FFFFFFFFFFFFFFFi64;
  v4[34] = v5 | 6;
  if( (ContainingPage & 0x10) != 0 || (ContainingPage & 8) == 0 )
    v6 = (ContainingPage & 0x10) == 0;
  else
    v6 = 2;
  v4[34] = v4[34] & 0x3F | (v6 << 6);
  v7 = MiSwizzleInvalidPte(128i64);
  if( v8 == v9 )
  {
    v7 |= 0x300ui64;
  }
  else if( !v8 )
  {
    v7 |= 0x100ui64;
  }
  *(_QWORD *)(v10 + 16) = v7;
  *(_BYTE *)(v10 + 34) |= 0x10u;
  *(_QWORD *)(v10 + 40) |= 0x4000000000000ui64;
  if( v14 == 1 )
  {
    if( v11 == (v11 & 0xFFFFFFFFFFFFFE00ui64) )
      *(_BYTE *)(v10 + 39) = v9 | *(_BYTE *)(v10 + 39) & 0xFE;
    MiSetResidentPageMemberInPfn(v10, 1ui64);
    *(_WORD *)(v13 + 32) = v12;
  }
}

Referenced by:

MxCreatePfns