KsepCacheLookup
_QWORD *__fastcall KsepCacheLookup(INT64 a1, INT64 a2){
unsigned int v4;
_QWORD **v5;
_QWORD *v6;
_QWORD *result;
_QWORD *v8;
_QWORD *v9;
__int64 v10;
_QWORD *v11;
_QWORD *v12;
v4 = (*(__int64(__fastcall **)(INT64))(a1 + 80))(a2);
v5 = (_QWORD **)(*(_QWORD *)(a1 + 16) + 16i64 * (v4 % *(_DWORD *)(a1 + 12)));
v6 = *v5;
if( *v5 == v5 )
{
LABEL_2:
++*(_DWORD *)(a1 + 52);
return 0i64;
}
else
{
while( 1 )
{
v8 = v6 - 1;
if( v4 == *((_DWORD *)v6 - 2) )
{
if( (*(unsigned int(__fastcall **)(INT64, _QWORD *))(a1 + 72))(a2, v6 - 1) )
break;
}
v6 = (_QWORD *)*v6;
if( v6 == (_QWORD *)(*(_QWORD *)(a1 + 16) + 16i64 * (v4 % *(_DWORD *)(a1 + 12))) )
goto LABEL_2;
}
v9 = v8 + 3;
v10 = v8[3];
if( *(_QWORD **)(v10 + 8) != v8 + 3
|| (v11 = (_QWORD *)v8[4], (_QWORD *)*v11 != v9)
|| (*v11 = v10, *(_QWORD *)(v10 + 8) = v11, v12 = *(_QWORD **)(a1 + 40), *v12 != a1 + 32) )
{
__fastfail(3u);
}
*v9 = a1 + 32;
v8[4] = v12;
*v12 = v9;
*(_QWORD *)(a1 + 40) = v9;
result = v6 - 1;
++*(_DWORD *)(a1 + 48);
}
return result;
}Referenced by:
KseAddHardwareId
KseLookupHardwareId
KseQueryDeviceDataList
KsepDbCacheInsertDevice
KsepDbCacheQueryDevice