ArbAllocateEntry
__int64 __fastcall ArbAllocateEntry(__int64 a1, unsigned __int64 a2){
char v2;
unsigned __int64 v5;
char v6;
unsigned __int64 v7;
__int64 result;
_QWORD *i;
__int64 v10;
__int64 v11;
unsigned int v12;
__int64 v13;
__int16 v14;
unsigned __int64 v15;
unsigned __int64 v16;
v2 = 0;
v5 = a2;
v6 = 0;
v7 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart + 10000000i64;
while( 1 )
{
while( 1 )
{
if( v5 < a2 || !*(_QWORD *)(v5 + 32) )
{
for( i = (_QWORD *)(a2 + 32); *i; i += 10 )
{
(*(void(__fastcall **)(_QWORD, _QWORD, _QWORD))(a1 + 128))(
*(_QWORD *)(i[1] + 40i64),
*(i - 4),
*(_QWORD *)(*i + 72i64));
v10 = i[1];
v11 = *i;
*(_QWORD *)(v11 + 80) = *(_QWORD *)(v10 + 40);
}
v12 = 0;
goto LABEL_15;
}
result = (*(__int64(__fastcall **)(__int64, unsigned __int64))(a1 + 224))(a1, v5);
if( (int)result < 0 )
return result;
if( !v2 )
break;
v13 = *(_QWORD *)(v5 + 40);
v2 = 0;
*(_QWORD *)(v5 + 120) = 0i64;
if( !*(_QWORD *)(v13 + 16) )
goto LABEL_18;
(*(void(__fastcall **)(__int64, unsigned __int64))(a1 + 264))(a1, v5);
v14 = *(_WORD *)(v5 + 64);
if( (v14 & 0x40) != 0 )
{
*(_WORD *)(v5 + 64) = v14 & 0xFFBF;
goto LABEL_18;
}
v15 = *(_QWORD *)v5 - 1i64;
if( v15 > *(_QWORD *)v5
|| v15 < **(_QWORD **)(v5 + 40)
|| *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart > v7 )
{
break;
}
*(_QWORD *)(v5 + 24) = v15;
LABEL_7:
if( !(*(unsigned __int8(__fastcall **)(__int64, unsigned __int64))(a1 + 248))(a1, v5) )
break;
if( *(_QWORD *)(*(_QWORD *)(v5 + 40) + 16i64) )
(*(void(__fastcall **)(__int64, unsigned __int64))(a1 + 256))(a1, v5);
else
*(_DWORD *)(*(_QWORD *)(v5 + 32) + 88i64) = 2;
v5 += 80i64;
}
if( (*(unsigned __int8(__fastcall **)(__int64, unsigned __int64))(a1 + 240))(a1, v5) )
goto LABEL_7;
LABEL_18:
if( (*(_BYTE *)(v5 + 64) & 0x20) != 0 )
v6 = 1;
if( v5 == a2 )
break;
v2 = 1;
v5 -= 80i64;
}
v12 = v6 != 0 ? -1073739512 : -1073741823;
LABEL_15:
if( *(_QWORD *)(a2 + 32) )
{
v16 = a2 + 64;
do
{
if( (*(_BYTE *)v16 & 0x10) != 0 )
{
ExFreePoolWithTag(*(PVOID *)(v16 + 8), 0);
*(_QWORD *)(v16 + 8) = 0i64;
*(_WORD *)v16 &= ~0x10u;
}
v16 += 80i64;
}
while( *(_QWORD *)(v16 - 32) );
}
return v12;
}Referenced by:
No references.