MiReplaceNumaStandbyPage
VOID __fastcall MiReplaceNumaStandbyPage(_MMPFN *Pfn1, _MMPFN *Pfn2){
_MMPFN *PfnDb;
__int64 v5;
__int64 v6;
__int64 PfnChannel;
unsigned __int64 v8;
__int64 v9;
int v10;
NTSTATUS v11;
__int64 v12;
unsigned __int64 v13;
_MMPFN *v14;
unsigned __int64 v15;
_MMPFN *v16;
unsigned __int64 v17;
PfnDb = MmGetPfnDb();
LODWORD(v5) = MiSearchNumaNodeTable((PVOID)(Pfn1 - PfnDb));
v6 = *(unsigned int *)(v5 + 8);
PfnChannel = (unsigned int)MiGetPfnChannel((INT64)Pfn1);
v8 = Pfn2 - PfnDb;
LODWORD(v9) = MiSearchNumaNodeTable((PVOID)v8);
v10 = *(_DWORD *)(v9 + 8);
v11 = MiGetPfnChannel((INT64)Pfn2);
if( (_DWORD)v6 == v10 && (_DWORD)PfnChannel == v11 )
{
v12 = 4544 * v6
+ *(_QWORD *)(*(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * (((unsigned __int64)Pfn1->u4._bf_0 >> 39) & 0x3FF))
+ 16i64)
+ 24 * ((unsigned int)MiGetPfnPriority(Pfn1) + 8 * PfnChannel);
v13 = Pfn1->ViewCount | ((unsigned __int64)Pfn1->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 >> 28) & 0xFFFFFFF00i64;
Pfn2->ViewCount = Pfn1->ViewCount;
Pfn2->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = (v13 << 28) ^ (Pfn2->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 ^ (v13 << 28)) & 0xFFFFFFFFFi64;
if( v13 == 0xFFFFFFFFFi64 )
{
*(_QWORD *)(v12 + 3272) = v8;
}
else
{
v14 = &PfnDb[v13];
v14->NodeBlinkLow = v8;
MiSetPfnNodeBlinkHigh(v14, v8 >> 16, 0i64);
}
v15 = Pfn1->NodeBlinkLow | ((unsigned __int64)Pfn1->u2._bf_0 >> 20) & 0xFFFFF0000i64;
Pfn2->NodeBlinkLow = Pfn1->NodeBlinkLow;
Pfn2->u2._bf_0 ^= (Pfn2->u2._bf_0 ^ (v15 << 20)) & 0xFFFFF000000000i64;
if( v15 == 0xFFFFFFFFFi64 )
{
*(_QWORD *)(v12 + 3264) = v8;
}
else
{
v16 = &PfnDb[v15];
v17 = v16->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 ^ (v8 << 28);
v16->ViewCount = v8;
v16->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = (v8 << 28) ^ v17 & 0xFFFFFFFFFi64;
}
}
else
{
MiUnlinkNumaStandbyPage(Pfn1);
MiInsertNumaStandbyPage(Pfn2);
}
}Referenced by:
MiReplaceTransitionPage