MiInitializeMdlOneNodeBatchPages
void __fastcall MiInitializeMdlOneNodeBatchPages(__int64 a1, _QWORD *a2, __int64 a3){
__int64 v3;
_QWORD *v4;
UINT64 v5;
_MMPFN *v6;
_MMPFN *v7;
_MMPFN *v8;
_MMPFN *v9;
_MMPFN *PfnDb;
int v11;
char v12;
_MMPFN *v13;
bool v14;
__int64 v15;
_MMPFN *v16;
__int64 v17;
int v18;
int v19;
int v20;
__int64 *v21;
__int64 v22;
__int64 v23;
INT64 v24[2];
__int128 v25;
__int128 v26;
v3 = *(int *)(a1 + 60);
v4 = a2;
v21 = a2;
v5 = *(unsigned int *)(a1 + 8);
v6 = 0i64;
v23 = a3;
v7 = 0i64;
v19 = *(_DWORD *)(a1 + 8);
v8 = 0i64;
v22 = 0i64;
v9 = 0i64;
*(_OWORD *)v24 = 0i64;
v25 = 0i64;
v26 = 0i64;
if( !a3 )
goto LABEL_11;
PfnDb = MmGetPfnDb();
v11 = v5 & 1;
v20 = v11;
do
{
v12 = 0;
v13 = &PfnDb[*v4];
if( v11 || !MiPfnZeroingNeeded(&PfnDb[*v4], (_MI_PFN_CACHE_ATTRIBUTE)v3) )
{
if( *((unsigned __int8 *)&v13->u3 + 2) >> 6 == (_DWORD)v3 )
goto LABEL_5;
goto LABEL_15;
}
if( (_DWORD)v25 )
goto LABEL_14;
LODWORD(v17) = MiSearchNumaNodeTable((PVOID)(v13 - PfnDb));
if( MiCreateColorAnchors((INT64)v24, *(unsigned int *)(v17 + 8)) )
{
v18 = 3;
if( (v19 & 8) != 0 )
v18 = 7;
v24[1] = __PAIR64__(v3, v18);
v15 = *v21;
LABEL_14:
MiInsertMdlPageNeedsZero((__int64)v24, v15, 1i64);
++v22;
v12 = 1;
LABEL_15:
if( (_DWORD)v3 == 3 && v12 == 1 )
{
if( MiPageAttributeBatchChangeNeeded(v13, MiCached) == 1 )
{
v16 = v6;
v6 = v13;
}
else
{
v16 = v7;
v7 = v13;
}
v13->OriginalPte.u.Long = (unsigned __int64)v16;
}
else if( MiPageAttributeBatchChangeNeeded(v13, (_MI_PFN_CACHE_ATTRIBUTE)v3) == 1 )
{
if( !v12
|| *((_DWORD *)&stru_140C4DB30 + 4 * ((unsigned __int64)*((unsigned __int8 *)&v13->u3 + 2) >> 6) + v3 + 106) == (_DWORD)v3 )
{
v13->OriginalPte.u.Long = (unsigned __int64)v8;
v8 = v13;
}
else
{
v13->OriginalPte.u.Long = (unsigned __int64)v9;
v9 = v13;
}
}
goto LABEL_19;
}
MiZeroAndConvertPage((_MI_ZERO_THREAD_CONTEXT *)v13, 3ui64, (unsigned int)v3, 2);
LABEL_19:
PfnDb = MmGetPfnDb();
LABEL_5:
v11 = v20;
v4 = v21 + 1;
v14 = v23-- == 1;
++v21;
}
while( !v14 );
if( v8 )
MiChangePageAttributeBatch(v8, (_MI_PFN_CACHE_ATTRIBUTE)v3, 0i64);
if( v6 )
MiChangePageAttributeBatch(v6, MiCached, (_MMPTE)-1i64);
if( v22 )
{
MiZeroInParallel((_COLORED_PAGE_INFO *)v24, v5, (UINT64)PfnDb);
if( v6 )
MiChangePageAttributeBatch(v6, MiNotMapped, 0i64);
if( v7 )
MiChangePageAttributeBatch(v7, MiNotMapped, 0i64);
if( v9 )
MiChangePageAttributeBatch(v9, (_MI_PFN_CACHE_ATTRIBUTE)v3, 0i64);
}
LABEL_11:
MiDeleteColorAnchors((INT64)v24);
}Referenced by:
MiInitializeMdlBatchPages