MiQueuePageAccessLog
VOID __stdcall MiQueuePageAccessLog(_MM_PAGE_ACCESS_INFO_HEADER *AccessInfo){
unsigned int Alignment_low;
int v3;
AccessInfo->EmptyTime = KUSER_SHARED_DATA.TickCountQuad;
AccessInfo->EmptySequenceNumber = PfKernelGlobals.StreamSequenceNumber;
if( !ExAcquireRundownProtection(&PfKernelGlobals.AccessBufferRef) )
goto LABEL_9;
Alignment_low = LOWORD(PfKernelGlobals.AccessBufferList.Alignment);
if( LOWORD(PfKernelGlobals.AccessBufferList.Alignment) >= PfKernelGlobals.AccessBufferMax )
{
_InterlockedExchangeAdd((volatile signed __int32 *)&xmmword_140C4FC10, 0x64u);
v3 = 0;
}
else
{
RtlpInterlockedPushEntrySList(&PfKernelGlobals.AccessBufferList, (PSLIST_ENTRY)AccessInfo);
if( Alignment_low >= 8 && !*(_DWORD *)&PfKernelGlobals.gap10[4] )
KeSetEvent((PRKEVENT)PfKernelGlobals.gap10, 0, 0);
v3 = 1;
}
ExReleaseRundownProtection(&PfKernelGlobals.AccessBufferRef);
if( !v3 )
LABEL_9:
MmFreeAccessPfnBuffer(AccessInfo, 1u);
}Referenced by:
MiCheckAndProcessCcAccessLog
MiEmptyPageAccessLog
MiGetCcAccessLog
MiReturnCcAccessLog
MiTrimOrAgeWorkingSet