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