MiUpdatePageAttributeStamp
VOID __stdcall MiUpdatePageAttributeStamp(_MMPFN *Pfn1){
__int64 v2;
char v3;
__int64 v4;
__int64 v5;
__int64 v6;
int v7[8];
_KLOCK_QUEUE_HANDLE LockQueue;
*(_QWORD *)&LockQueue.OldIrql = 0i64;
if( !Pfn1->u3.ReferenceCount )
{
v2 = *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * (((unsigned __int64)Pfn1->u4._bf_0 >> 39) & 0x3FF));
v3 = *((_BYTE *)&Pfn1->u3 + 2);
v4 = *(_QWORD *)(v2 + 8i64 * (v3 & 7) + 4216);
if( (v3 & 7) == 2 )
{
v5 = 5i64 * (unsigned int)MiGetPfnPriority(Pfn1) + 304;
}
else
{
if( *(_DWORD *)(v4 + 8) != 3 || (*(_DWORD *)(&Pfn1->3 + 1) & 0x400i64) == 0 )
goto LABEL_5;
LODWORD(v6) = MiSearchNumaNodeTable((PVOID)(Pfn1 - MmGetPfnDb()));
v5 = 5i64 * *(unsigned int *)(v6 + 8) + 432;
}
v4 = v2 + 8 * v5;
LABEL_5:
LockQueue.LockQueue.Next = 0i64;
LockQueue.LockQueue.Lock = (unsigned __int64 *volatile)(v4 + 32);
KxAcquireQueuedSpinLock(&LockQueue.LockQueue, (UINT64 *)(v4 + 32));
_InterlockedOr(v7, 0);
Pfn1->u2._bf_0 ^= (Pfn1->u2._bf_0 ^ ((unsigned __int64)(unsigned int)KiTbFlushTimeStamp << 56)) & 0xF00000000000000i64;
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
}
}Referenced by:
MiCopyHeaderIfResident