RtlFindNextForwardRunClearEx

UINT64 __fastcall RtlFindNextForwardRunClearEx(INT64 a1, UINT64 a2, UINT64 *a3){
  unsigned __int64 v3; 
  unsigned __int64 v5; 
  __int64 v8; 
  _DWORD *v9; 
  _DWORD *v10; 
  UINT64 v11; 
  unsigned __int64 v12; 
  _DWORD *v13; 
  unsigned __int64 i; 
  v3 = *(_QWORD *)a1;
  v5 = a2;
  if( *(_QWORD *)a1 > a2 )
  {
    v8 = *(_QWORD *)(a1 + 8);
    v9 = (_DWORD *)(v8 + 4 * ((v3 - 1) >> 5));
    v10 = (_DWORD *)(v8 + 4 * (a2 >> 5));
    if( v10 != v9 && (*v10 | *((_DWORD *)qword_140011CE0 + (a2 & 0x1F))) == -1 )
    {
      v5 = (a2 & 0xFFFFFFFFFFFFFFE0ui64) + 32;
      for( ++v10; v10 < v9 && *v10 == -1; ++v10 )
        v5 += 32i64;
    }
    for( ; v5 < v3; ++v5 )
    {
      if( !_bittest64(*(const signed __int64 **)(a1 + 8), v5) )
        break;
    }
    v11 = 0i64;
    if( v10 != v9 )
    {
      v12 = v5 & 0x1F;
      if( (~*((_DWORD *)qword_140011CE0 + v12) & *v10) == 0 )
      {
        v11 = 32 - v12;
        if( v12 == 33 )
        {
LABEL_23:
          *a3 = v5;
          return v11;
        }
        v13 = v10 + 1;
        while( v13 < v9 && !*v13 )
        {
          ++v13;
          v11 += 32i64;
          if( v11 == -1i64 )
            goto LABEL_23;
        }
      }
    }
    for( i = v11 + v5; i < *(_QWORD *)a1; ++v11 )
    {
      if( _bittest64(*(const signed __int64 **)(a1 + 8), i) )
        break;
      if( v11 == -1i64 )
        break;
      ++i;
    }
    goto LABEL_23;
  }
  *a3 = a2;
  return 0i64;
}

Referenced by:

IopLiveDumpMirrorPhysicalMemoryCallback
IopLiveDumpPopulateBitmapForDump
MiDeleteAweInfoPages
MiDeleteEmptyPageTableTail