MiInitializeMdlLeafPfns
VOID __fastcall MiInitializeMdlLeafPfns(INT64 a1, INT64 a2, UINT64 a3, INT64 a4, INT64 a5){
INT64 v6;
UINT64 v8;
__int64 v9;
INT64 v10;
UINT64 SpinCount;
v6 = a1 + 48 * a2;
if( v6 != a1 )
{
v8 = (a3 >> 3) & 0xFFFFFFFFFFEi64;
do
{
v6 -= 48i64;
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)(v6 + 24), 0x3Fui64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *(__int64 *)(v6 + 24) < 0 );
}
v9 = *(_QWORD *)(v6 + 40);
if( (v9 & 0x1000000000i64) != 0 )
{
MiConvertLargePfnToSmall(a1, v6, a3, 1i64);
v9 = *(_QWORD *)(v6 + 40);
}
*(_QWORD *)v6 = 0i64;
v10 = (unsigned int)a5;
*(_QWORD *)(v6 + 8) = MmGetPteBase();
*(_QWORD *)(v6 + 16) = a4;
*(_QWORD *)(v6 + 40) = v9 & 0x7FFFFFF000000000i64 | 0xFFFFFFFFDi64;
*(_QWORD *)v6 = v8;
MiInitializeMdlPfn(v6, v10);
_InterlockedAnd64((volatile signed __int64 *)(v6 + 24), 0x7FFFFFFFFFFFFFFFui64);
}
while( v6 != a1 );
}
}Referenced by:
MiInitializeLargeMdlLeafPfns
MiInitializeMdlPages