HalpLaReserveRange
INT64 __fastcall HalpLaReserveRange(INT64 a1, UINT64 a2, INT64 a3){
INT64 *v3;
UINT64 v4;
int v7;
INT64 v8;
INT64 *v9;
INT64 v10;
INT64 **v11;
INT64 v12;
INT64 **v13;
INT64 **v14;
INT64 v15;
INT64 v16;
UINT64 v17;
INT64 v18;
INT64 v19;
INT64 **v20;
INT64 *v21;
INT64 v22;
INT64 v23;
INT64 **v24;
INT64 *v25;
INT64 v26;
v3 = *(INT64 **)(a1 + 56);
v4 = a2 + a3;
v7 = 0;
while( 1 )
{
v8 = v3[6];
if( v8 == a2 && v8 + v3[8] == v4 )
break;
v9 = (INT64 *)v3[3];
if( !v9 )
{
v7 = HalpLapSplitNode(a1, (INT64)v3);
if( v7 < 0 )
return(unsigned int)v7;
v10 = *v3;
if( *(INT64 **)(*v3 + 8) != v3 || (v11 = (INT64 **)v3[1], *v11 != v3) )
LABEL_40:
__fastfail(3u);
*v11 = (INT64 *)v10;
*(_QWORD *)(v10 + 8) = v11;
v3[1] = (INT64)v3;
*v3 = (INT64)v3;
HalpLaBltAdd((INT64 *)v3[4], a1);
HalpLaBltAdd((INT64 *)v3[3], v12);
v9 = (INT64 *)v3[3];
}
if( v4 > v9[6] + v9[8] )
{
if( a2 < *(_QWORD *)(v3[4] + 48) )
break;
v3 = (INT64 *)v3[4];
}
else
{
v3 = v9;
}
}
v13 = (INT64 **)(v3 + 2);
LABEL_38:
while( 1 )
{
v25 = *v13;
if( v3 == *v13 )
return(unsigned int)v7;
v14 = (INT64 **)(v3 + 3);
v15 = v3[3];
if( v15 && a2 < *(_QWORD *)(v15 + 48) + *(_QWORD *)(v15 + 64) )
{
v3 = (INT64 *)v3[3];
}
else
{
v16 = v3[4];
if( v16 && v4 > *(_QWORD *)(v16 + 48) )
{
v3 = (INT64 *)v3[4];
}
else
{
v17 = v3[6];
if( (a2 <= v17 || a2 >= v17 + v3[8]) && ((v18 = v3[8], v4 >= v18 + v17) || v4 <= v17) )
{
if( a2 <= v17 && v4 >= v18 + v17 )
{
v3[5] = -1i64;
*((_BYTE *)v3 + 56) = 1;
v3[9] = v18;
*(_QWORD *)(a1 + 48) += v18;
v23 = *v3;
if( *(INT64 **)(*v3 + 8) != v3 )
goto LABEL_40;
v24 = (INT64 **)v3[1];
if( *v24 != v3 )
goto LABEL_40;
*v24 = (INT64 *)v23;
*(_QWORD *)(v23 + 8) = v24;
v3[1] = (INT64)v3;
*v3 = (INT64)v3;
v25 = *v13;
}
if( v3 != v25 )
{
while( 1 )
{
v26 = v3[2];
if( *(INT64 **)(v26 + 24) == v3 )
break;
v3 = (INT64 *)v3[2];
if( (INT64 *)v26 == v25 )
goto LABEL_38;
}
v3 = *(INT64 **)(v26 + 32);
}
}
else
{
v7 = HalpLapSplitNode(a1, (INT64)v3);
if( v7 < 0 )
return(unsigned int)v7;
v19 = *v3;
if( *(INT64 **)(*v3 + 8) != v3 )
goto LABEL_40;
v20 = (INT64 **)v3[1];
if( *v20 != v3 )
goto LABEL_40;
*v20 = (INT64 *)v19;
*(_QWORD *)(v19 + 8) = v20;
v21 = (INT64 *)v3[4];
v3[1] = (INT64)v3;
*v3 = (INT64)v3;
HalpLaBltAdd(v21, a1);
HalpLaBltAdd(*v14, v22);
v3 = *v14;
}
}
}
}
}Referenced by:
HalpDmaAddReservedRangesToDomain
HalpLaInitializeState