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