MxCreatePfn

VOID __stdcall MxCreatePfn(UINT64 PageFrameIndex, _MMPTE *PointerPxe, UINT64 ContainingPage, UINT64 LeafPage){
  _MMPFN *v4; 
  UINT64 v5; 
  char v6; 
  __int64 v7; 
  int v8; 
  int v9; 
  INT64 v10; 
  __int64 v11; 
  __int16 v12; 
  __int64 v13; 
  int v14; 
  int v15; 

  v4 = &MmGetPfnDb()[PageFrameIndex];
  if( v15 == 1 )
  {
    v4->ListEntry = 0i64;
    *((_OWORD *)&v4->3 + 1) = 0i64;
    *(_OWORD *)&v4->u3.ReferenceCount = 0i64;
  }
  v5 = LeafPage ^ v4->u4._bf_0;
  v4->PteLong = (unsigned __int64)PointerPxe;
  v4->u3.ReferenceCount = 1;
  v4->u4._bf_0 ^= v5 & 0xFFFFFFFFFi64;
  LOBYTE(v5) = *(_BYTE *)(&v4->u3 + 1) & 0xFE;
  v4->u2._bf_0 ^= (v4->u2._bf_0 ^ (v4->u2._bf_0 + 1)) & 0x3FFFFFFFFFFFFFFFi64;
  *((_BYTE *)&v4->u3 + 2) = v5 | 6;
  if( (ContainingPage & 0x10) != 0 || (ContainingPage & 8) == 0 )
    v6 = (ContainingPage & 0x10) == 0;
  else
    v6 = 2;
  *((_BYTE *)&v4->u3 + 2) = *(_BYTE *)(&v4->u3 + 1) & 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