MiSetPfnOwnedAndActive
INT64 __fastcall MiSetPfnOwnedAndActive(INT64 a1, CHAR a2, INT64 a3, INT64 a4, INT64 a5){
unsigned int v5;
unsigned __int8 v9;
unsigned int v10;
unsigned __int64 v11;
INT64 result;
v5 = a4;
v9 = MiLockPageInline(a1);
v10 = *(unsigned __int8 *)(a1 + 34);
*(_QWORD *)(a1 + 40) &= ~0x8000000000000000ui64;
*(_QWORD *)a1 = 0i64;
v11 = v9;
if( v10 >> 6 != v5 )
{
MiChangePageAttribute(a1, v5, 1);
LOBYTE(v10) = *(_BYTE *)(a1 + 34);
}
*(_QWORD *)(a1 + 24) = *(_QWORD *)(a1 + 24) & 0xC000000000000000ui64 | 1;
if( (_DWORD)a5 )
*(_WORD *)(a1 + 32) = a5;
*(_QWORD *)(a1 + 8) = a3;
*(_BYTE *)(a1 + 34) = v10 & 0xF8 | 6;
if( (a2 & 1) != 0 )
{
*(_QWORD *)(a1 + 40) = *(_QWORD *)(a1 + 40) & 0xFFFFFFF000000000ui64 | 0xFFFFFFFFDi64;
*(_QWORD *)(a1 + 16) = MiSwizzleInvalidPte(128i64);
*(_QWORD *)(a1 + 8) = MmGetPteBase();
*(_QWORD *)(a1 + 24) |= 0x4000000000000000ui64;
}
_InterlockedAnd64((volatile signed __int64 *)(a1 + 24), 0x7FFFFFFFFFFFFFFFui64);
result = (unsigned int)KiIrqlFlags;
__writecr8(v11);
return result;
}Referenced by:
MiAssignNonPagedPoolPte
MiFindContiguousPages
MiFindLargeNodePage
MiRemoveMdlPages