KsepCacheLookup
VOID *__stdcall KsepCacheLookup(_KSE_CACHE *Cache, VOID *SearchObject){
unsigned int v4;
_QWORD **v5;
_QWORD *v6;
VOID *result;
_QWORD *v8;
_KSE_CACHE *v9;
__int64 v10;
_KSE_CACHE **v11;
_KSE_CACHE **v12;
v4 = (*((__int64(__fastcall **)(VOID *))Cache + 10))(SearchObject);
v5 = (_QWORD **)(*((_QWORD *)Cache + 2) + 16i64 * (v4 % Cache[3]));
v6 = *v5;
if( *v5 == v5 )
{
LABEL_2:
++Cache[13];
return 0i64;
}
else
{
while( 1 )
{
v8 = v6 - 1;
if( v4 == *((_DWORD *)v6 - 2) )
{
if( (*((unsigned int(__fastcall **)(VOID *, _QWORD *))Cache + 9))(SearchObject, v6 - 1) )
break;
}
v6 = (_QWORD *)*v6;
if( v6 == (_QWORD *)(*((_QWORD *)Cache + 2) + 16i64 * (v4 % Cache[3])) )
goto LABEL_2;
}
v9 = (_KSE_CACHE *)(v8 + 3);
v10 = v8[3];
if( *(_QWORD **)(v10 + 8) != v8 + 3
|| (v11 = (_KSE_CACHE **)v8[4], *v11 != v9)
|| (*v11 = (_KSE_CACHE *)v10,
*(_QWORD *)(v10 + 8) = v11,
v12 = (_KSE_CACHE **)*((_QWORD *)Cache + 5),
*v12 != Cache + 8) )
{
__fastfail(3u);
}
*(_QWORD *)v9 = Cache + 8;
v8[4] = v12;
*v12 = v9;
*((_QWORD *)Cache + 5) = v9;
result = v6 - 1;
++Cache[12];
}
return result;
}Referenced by:
KseAddHardwareId
KseLookupHardwareId
KseQueryDeviceDataList
KsepDbCacheInsertDevice
KsepDbCacheQueryDevice