KsepDbCacheReadDeviceInternal

INT64 __fastcall KsepDbCacheReadDeviceInternal(INT64 a1, INT64 *a2, WCHAR *a3, INT64 a4){
  unsigned int DatabaseMatch; 
  INT64 result; 
  RTL_RUN_ONCE *v8; 
  unsigned int i; 
  unsigned int v10; 
  unsigned int j; 
  unsigned int v12; 
  UINT64 Size; 
  UINT64 v14; 
  INT64 v15; 
  INT64 v16[2]; 
  VOID *v17[2]; 
  __int64 v18; 
  LODWORD(v14) = 0;
  v15 = 0i64;
  *(_OWORD *)v16 = 0i64;
  v18 = 0i64;
  *(_OWORD *)v17 = 0i64;
  DatabaseMatch = SdbGetDatabaseMatchEx(a1, 1, a3, a4, 0i64, 0i64, a2);
  if( !DatabaseMatch || !(unsigned int)SdbTagRefToTagID(a1, DatabaseMatch, (PVOID **)&v15, (int *)&v14) )
    return 3221226021i64;
  v8 = (RTL_RUN_ONCE *)v15;
  for( i = SdbFindFirstTag(v15, (unsigned int)v14, 28691); ; i = SdbFindNextTag((__int64)v8, v14, v10) )
  {
    v10 = i;
    if( !i )
      break;
    result = KsepDbReadKFlag(v8, i, (INT64)v16);
    if( (int)result < 0 )
      return result;
    LODWORD(Size) = HIDWORD(v16[1]);
    result = KsepCacheDeviceInsertData(a4, (_WORD *)v16[0], v17[0], LODWORD(v16[1]), Size);
    if( (int)result < 0 )
      return result;
  }
  for( j = SdbFindFirstTag((INT64)v8, (unsigned int)v14, 28712); ; j = SdbFindNextTag((__int64)v8, v14, v12) )
  {
    v12 = j;
    if( !j )
      break;
    result = KsepDbReadKData(v8, j, (INT64)v16);
    if( (int)result < 0 )
      return result;
    LODWORD(Size) = HIDWORD(v16[1]);
    result = KsepCacheDeviceInsertData(a4, (_WORD *)v16[0], v17[0], LODWORD(v16[1]), Size);
    if( (int)result < 0 )
      return result;
  }
  return 0i64;
}

Referenced by:

KsepDbCacheReadDevice