RtlFindRange

NTSTATUS __stdcall RtlFindRange(
        PRTL_RANGE_LIST RangeList,
        ULONGLONG Minimum,
        ULONGLONG Maximum,
        ULONG Length,
        ULONG Alignment,
        ULONG Flags,
        UCHAR AttributeAvailableMask,
        PVOID Context,
        PRTL_CONFLICT_RANGE_CALLBACK Callback,
        PULONGLONG Start){
  unsigned __int64 v10; 
  __int64 v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  CHAR a5; 
  CHAR a6; 
  UINT64 v17; 
  unsigned __int64 v19; 
  struct _RANGE_LIST_ITERATOR Iterator; 
  v10 = *(_QWORD *)&Alignment;
  v12 = *(_QWORD *)&Length;
  memset(&Iterator, 0, sizeof(Iterator));
  v13 = Maximum - *(_QWORD *)&Length + 1 - (Maximum - *(_QWORD *)&Length + 1) % *(_QWORD *)&Alignment;
  if( Minimum > Maximum )
    return -1073741811;
  v14 = *(_QWORD *)&Length - 1i64;
  if( Maximum - Minimum < *(_QWORD *)&Length - 1i64
    || Minimum + *(_QWORD *)&Alignment < Minimum
    || v13 < Minimum
    || !*(_QWORD *)&Length
    || !*(_QWORD *)&Alignment )
  {
    return -1073741811;
  }
  a5 = Flags & 1;
  a6 = Flags & 2;
  v17 = Maximum - (Maximum - *(_QWORD *)&Length + 1) % *(_QWORD *)&Alignment;
  RtlGetLastRange(RangeList, &Iterator, (_RTL_RANGE **)&Alignment);
  do
  {
    if( RtlpIsRangeAvailable(
           (INT64 *)&Iterator,
           v13,
           v17,
           AttributeAvailableMask,
           a5,
           a6,
           0,
           (INT64)Context,
           (INT64)Callback) )
    {
      *Start = v13;
      return 0;
    }
    v19 = *(_QWORD *)Iterator.Current - v12;
    if( v19 > *(_QWORD *)Iterator.Current )
      break;
    v13 = v19 - v19 % v10;
    v17 = v14 + v13;
  }
  while( v13 >= Minimum );
  return -1073741823;
}

Referenced by:

ArbFindSuitableRange
IopPortFindSuitableRange
KiTpIsExcludedKernelTracepointLocation