MiScrubNodeLargePages
VOID __stdcall MiScrubNodeLargePages(
PVOID OpaqueParameter,
_MI_PARTITION *Partition,
UINT64 PreferredNode,
_KEVENT *StopEvent){
__int64 v4;
__int64 *v6;
INT64 v7;
unsigned __int64 v8;
_QWORD *v9;
__int64 v10;
__int64 v11;
int v12;
unsigned int NextPageColor;
int v14;
int *v15;
unsigned int v16;
_QWORD *v17;
int v18;
int i;
unsigned int j;
int k;
INT64 LargePageListHeadBase;
unsigned int v23;
_QWORD *v24;
unsigned int v25;
int v26;
INT64 v27;
INT64 v28;
INT64 v29;
int v30;
int v31;
unsigned int m;
int v33;
unsigned __int64 v34;
unsigned __int64 v35;
INT64 v36;
INT64 v37;
int *v38;
UINT64 *v39;
INT64 v40[2];
INT64 result[16];
v4 = (unsigned int)PreferredNode;
v39 = (UINT64 *)OpaqueParameter;
*(_OWORD *)v40 = 0i64;
memset((INT64)result, 0i64);
v6 = MiLargePageSizes;
v7 = *((_QWORD *)Partition + 2) + 4544 * v4;
v8 = 0i64;
v37 = v7;
v9 = (_QWORD *)v7;
v10 = 3i64;
do
{
v11 = *v9 + v9[1];
if( v11 )
v8 += *v6 * v11;
v9 += 134;
++v6;
--v10;
}
while( v10 );
v35 = v8;
if( v8 )
{
v12 = 0;
v34 = 0i64;
v30 = 0;
MiInitializePageColorBase(0i64, (unsigned int)(v4 + 1), (INT64)v40);
NextPageColor = MiGetNextPageColor((INT64)v40);
if( (unsigned int)MiCreateUltraThreadContext((INT64)result, NextPageColor, (unsigned int)(v14 + 7)) )
{
v15 = dword_140C4DCC0;
v16 = 0;
v38 = dword_140C4DCC0;
v17 = (_QWORD *)v7;
do
{
if( *v17 + v17[1] )
{
v18 = 0;
v33 = 0;
v31 = *v15;
do
{
for( i = 1; ; --i )
{
if( !i && !v12 )
{
_InterlockedIncrement((volatile signed __int32 *)Partition + 1585);
v30 = 1;
}
for( j = 0; j < MmNumberOfChannels; ++j )
{
for( k = 0; k <= 3; ++k )
{
LODWORD(v28) = k;
LODWORD(v27) = i;
LargePageListHeadBase = MiGetLargePageListHeadBase((unsigned int)v18, v7, v16, j, v27, v28);
v23 = v31;
v24 = (_QWORD *)LargePageListHeadBase;
v25 = 0;
for( m = 0; v25 < v23; m = v25 )
{
if( (_QWORD *)*v24 != v24 )
{
LODWORD(v29) = k;
v36 = v35 - v34;
LODWORD(v28) = j;
LODWORD(v27) = i;
v26 = MiScrubNodeLargePageList(
(INT64)Partition,
(unsigned int)v4,
v16,
(unsigned int)v18,
v27,
v28,
v29,
&v36,
v39,
(INT64)result);
v34 += v36;
if( v34 >= v35 || !v26 )
goto LABEL_29;
v18 = v33;
v25 = m;
v23 = v31;
}
++v25;
v24 += 3;
}
v7 = v37;
}
}
v12 = v30;
if( !i )
break;
}
v33 = ++v18;
}
while( v18 <= 1 );
v15 = v38;
}
++v15;
++v16;
v17 += 134;
v38 = v15;
}
while( v16 < 3 );
LABEL_29:
if( v30 == 1 )
_InterlockedDecrement((volatile signed __int32 *)Partition + 1585);
MiDeleteUltraThreadContext((INT64)result);
}
}
}Referenced by:
MiScrubNode