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