MiSlistGetFreePage
NTSTATUS __stdcall MiSlistGetFreePage(_MI_PARTITION *Partition, _MMLISTS PageType, UINT64 Color){
int v3;
__int64 v4;
__int64 v6;
_SLIST_HEADER *v7;
PSLIST_ENTRY v9;
_QWORD *p_Next;
v3 = **(_DWORD **)&PageType;
v4 = *(_QWORD *)&PageType;
v6 = (unsigned int)Color;
while( 1 )
{
v7 = &Partition->PageLists.FreePageSlist[v3][v6];
if( LOWORD(v7->Alignment) )
{
v9 = RtlpInterlockedPopEntrySList(v7);
p_Next = &v9->Next;
if( v9 )
break;
}
if( v3 == *(_DWORD *)(v4 + 4) )
return 0;
v3 = *(_DWORD *)(v4 + 4);
}
v9[1].Next = (_SLIST_ENTRY *)ZeroPte.u.Long;
if( v3 )
{
MiSetOriginalPtePfnFromFreeList((UINT64 *)&v9[1]);
}
else if( (MiFlags & 0x80u) != 0 && (++*(&stru_140C4DB30 + 631) & MmPageValidationFrequency) == 0 )
{
MiArePageContentsZero((PVOID)(((char *)v9 - (char *)MmGetPfnDb()) / 48));
}
*p_Next = 0i64;
return(int)p_Next;
}Referenced by:
MiGetPageSlist
MiRemovePageAnyColor