RtlpIsRangeAvailable

CHAR __fastcall RtlpIsRangeAvailable(
        INT64 *a1,
        UINT64 a2,
        UINT64 a3,
        UINT8 a4,
        CHAR a5,
        CHAR a6,
        CHAR MoveForwards,
        INT64 a8,
        INT64 a9){
  PRTL_RANGE v11; 
  INT64 v14; 
  UINT64 Start; 
  bool v16; 
  PRTL_RANGE Range; 
  v11 = (PRTL_RANGE)a1[2];
  for( Range = v11; ; v11 = Range )
  {
    if( !v11 )
      return 1;
    v14 = a1[1];
    if( MoveForwards )
    {
      if( !v14 && a3 < v11->Start )
        return 1;
    }
    else if( !v14 && a2 > v11->End )
    {
      return 1;
    }
    Start = v11->Start;
    v16 = v11->Start < a2;
    if( v11->Start > a2 )
    {
      if( a3 < Start )
        goto LABEL_9;
      v16 = Start < a2;
    }
    if( (!v16 || v11->End >= a2)
      && (!a5 || (v11->Flags & 1) == 0)
      && (a4 & v11->Attributes) == 0
      && (!a6 || v11->Owner)
      && (!a9 || !((unsigned __int8(__fastcall *)(INT64))a9)(a8)) )
    {
      break;
    }
LABEL_9:
    RtlGetNextRange((_RANGE_LIST_ITERATOR *)a1, &Range, MoveForwards);
  }
  return 0;
}

Referenced by:

RtlFindRange
RtlIsRangeAvailable