MxMarkActiveDriverBits

unsigned __int64 __fastcall MxMarkActiveDriverBits(
        unsigned __int64 *a1,
        unsigned __int64 a2,
        unsigned __int64 a3,
        __int64 a4,
        int a5){
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  unsigned __int64 result; 
  _MMPTE *PteBase; 
  __int64 v11; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  v5 = a2;
  v6 = a3;
  if( a2 < *(_QWORD *)(a4 + 16i64 * a5) )
    v5 = *(_QWORD *)(a4 + 16i64 * a5);
  result = *(_QWORD *)(a4 + 16i64 * a5 + 8);
  if( a3 > result )
    v6 = *(_QWORD *)(a4 + 16i64 * a5 + 8);
  if( v5 <= v6 )
  {
    PteBase = MmGetPteBase();
    do
    {
      result = MI_READ_PTE_LOCK_FREE(v5);
      if( (result & 1) != 0 )
      {
        v11 = (__int64)((v5 << 25) - ((_QWORD)PteBase << 25)) >> 16;
        if( a5 == 1 )
        {
          v12 = ((((v11 << 25) - ((_QWORD)PteBase << 25)) >> 16) - a1[4]) >> 21;
          v13 = a1[1] + (v12 >> 3);
          if( (*(_DWORD *)((char *)PteBase + ((v13 >> 9) & 0x7FFFFFFFF8i64)) & 0x800i64) == 0 )
          {
            MiSplitBitmapPages(12i64, (VOID *)(a1[1] + (v12 >> 3)), (v12 & 7) + 1);
            KeZeroSinglePage((VOID *)(v13 & 0xFFFFFFFFFFFFF000ui64));
          }
          if( *a1 <= v12 )
            *a1 = v12 + 1;
          result = a1[1];
          _bittestandset64((signed __int64 *)result, v12);
        }
        else
        {
          result = MxMarkActiveDriverBits(
                     a1,
                     (__int64)((v5 << 25) - ((_QWORD)PteBase << 25)) >> 16,
                     v11 + 4088,
                     a4,
                     a5 - 1);
        }
      }
      v5 += 8i64;
    }
    while( v5 <= v6 );
  }
  return result;
}

Referenced by:

MiInitializeDriverImages
MxMarkActiveDriverBits