MiSetPfnOwnedAndActive

VOID __stdcall MiSetPfnOwnedAndActive(
        _MMPFN *Pfn1,
        UINT64 PfnState,
        _MMPTE *PointerPte,
        _MI_PFN_CACHE_ATTRIBUTE CacheAttribute,
        UINT64 ReferenceCount){
  char v7; 
  UINT8 v9; 
  unsigned int v10; 
  unsigned __int64 v11; 

  v7 = PfnState;
  v9 = MiLockPageInline(Pfn1);
  v10 = *((unsigned __int8 *)&Pfn1->u3 + 2);
  Pfn1->u4._bf_0 &= ~0x8000000000000000ui64;
  Pfn1->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = 0i64;
  v11 = v9;
  if( v10 >> 6 != CacheAttribute )
  {
    MiChangePageAttribute(Pfn1, CacheAttribute, 1ui64);
    LOBYTE(v10) = *((_BYTE *)&Pfn1->u3 + 2);
  }
  Pfn1->u2._bf_0 = Pfn1->u2._bf_0 & 0xC000000000000000ui64 | 1;
  if( (_DWORD)ReferenceCount )
    Pfn1->u3.ReferenceCount = ReferenceCount;
  Pfn1->PteLong = (unsigned __int64)PointerPte;
  *((_BYTE *)&Pfn1->u3 + 2) = v10 & 0xF8 | 6;
  if( (v7 & 1) != 0 )
  {
    Pfn1->u4._bf_0 = Pfn1->u4._bf_0 & 0xFFFFFFF000000000ui64 | 0xFFFFFFFFDi64;
    Pfn1->OriginalPte.u.Long = MiSwizzleInvalidPte(128i64);
    Pfn1->PteLong = (unsigned __int64)MmGetPteBase();
    Pfn1->u2._bf_0 |= 0x4000000000000000ui64;
  }
  _InterlockedAnd64(&Pfn1->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
  __writecr8(v11);
}

Referenced by:

MiAssignNonPagedPoolPte
MiFindContiguousPages
MiFindLargeNodePage
MiRemoveMdlPages