MiArePageContentsZero
NTSTATUS __stdcall MiArePageContentsZero(PVOID BugCheckParameter2){
unsigned __int64 v1;
unsigned __int64 v2;
char *v3;
_MMPFN *v4;
unsigned __int8 CurrentIrql;
int v6;
int v7;
VOID *v8;
__int64 v9;
NTSTATUS result;
v2 = v1;
v3 = (char *)BugCheckParameter2;
v4 = &MmGetPfnDb()[(_QWORD)BugCheckParameter2];
LABEL_2:
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
if( KeGetCurrentPrcb()->HyperPte )
{
v6 = *((unsigned __int8 *)&v4->u3 + 2) >> 6;
if( v6 == 3 )
{
v2 = 0i64;
}
else if( v6 != 1 && v2 > 0x10 )
{
v2 = 16i64;
}
while( v2 )
{
if( (*((_BYTE *)&v4->u3 + 3) & 0x40) == 0 )
{
LOBYTE(v7) = MiIsPageOnBadList((INT64)v4);
if( !v7 )
{
v8 = MiMapPageInHyperSpaceWorker((UINT64)v3, 0i64, 0x20000000ui64);
KeCheckForZeroPage();
if( v9 )
MiPageNotZero(v8, (ULONG_PTR)v3);
MiUnmapPageInHyperSpaceWorker(v8, 0x11u, 0i64);
}
}
++v4;
++v3;
if( (--v2 & 0x3F) == 0 && CurrentIrql < 2u && (unsigned int)KeShouldYieldProcessor() )
{
__writecr8(CurrentIrql);
goto LABEL_2;
}
}
}
result = CurrentIrql;
__writecr8(CurrentIrql);
return result;
}Referenced by:
MiConvertEntireLargePageToSmall
MiCreateSharedZeroPages
MiCreateSystemPageTable
MiGetLargePage
MiGetPage
MiIdealClusterPage
MiInsertLargePageInNodeList
MiInsertPageInFreeOrZeroedList
MiLargePageFreeToZero
MiReplenishPageSlist
MiSlistGetFreePage
MiUnlinkFreeOrZeroedPage
MiUnlinkNodeLargePageHelper