KsepDbReadKData

INT64 __fastcall KsepDbReadKData(RTL_RUN_ONCE *a1, UINT64 a2, INT64 a3){
  unsigned int v4; 
  unsigned int v6; 
  unsigned int FirstTag; 
  INT64 StringTagPtr; 
  unsigned int v9; 
  int DWORDTag; 
  unsigned int v11; 
  INT64 v12; 
  __int64 v13; 
  int TagDataSize; 
  unsigned int v15; 
  INT64 v16; 
  unsigned int v17; 
  unsigned int v18; 
  INT64 MappedTagData; 
  v4 = a2;
  v6 = -1073741823;
  if( !(_DWORD)a2 )
    return v6;
  FirstTag = SdbFindFirstTag((INT64)a1, a2, 24577);
  if( !FirstTag )
    return v6;
  StringTagPtr = SdbGetStringTagPtr(a1, FirstTag);
  if( !StringTagPtr )
    return v6;
  v9 = SdbFindFirstTag((INT64)a1, v4, 16408);
  if( !v9 )
    return v6;
  DWORDTag = SdbReadDWORDTag((INT64)a1, v9, 0i64);
  switch( DWORDTag )
  {
    case 1:
      v11 = SdbFindFirstTag((INT64)a1, v4, 24606);
      v12 = SdbGetStringTagPtr(a1, v11);
      if( v12 )
      {
        *(_QWORD *)a3 = StringTagPtr;
        v13 = -1i64;
        *(_DWORD *)(a3 + 8) = 1;
        do
          ++v13;
        while( *(_WORD *)(v12 + 2 * v13) );
        TagDataSize = 2 * v13 + 2;
        *(_QWORD *)(a3 + 16) = v12;
        goto LABEL_18;
      }
      return v6;
    case 4:
      v15 = SdbFindFirstTag((INT64)a1, v4, 16409);
      *(_QWORD *)a3 = StringTagPtr;
      *(_DWORD *)(a3 + 8) = 4;
      *(_DWORD *)(a3 + 12) = 4;
      v16 = a3 + 24;
      *(_DWORD *)(a3 + 24) = SdbReadDWORDTag((INT64)a1, v15, 0i64);
LABEL_14:
      *(_QWORD *)(a3 + 16) = v16;
      return 0;
    case 11:
      v17 = SdbFindFirstTag((INT64)a1, v4, 20487);
      *(_QWORD *)a3 = StringTagPtr;
      *(_DWORD *)(a3 + 8) = 11;
      *(_DWORD *)(a3 + 12) = 8;
      v16 = a3 + 32;
      *(_QWORD *)(a3 + 32) = SdbReadQWORDTag((INT64)a1, v17, 0i64);
      goto LABEL_14;
  }
  if( DWORDTag != 3 )
    return(unsigned int)-1073741811;
  v18 = SdbFindFirstTag((INT64)a1, v4, 36869);
  MappedTagData = SdbpGetMappedTagData((INT64)a1, v18);
  if( MappedTagData )
  {
    *(_QWORD *)a3 = StringTagPtr;
    *(_DWORD *)(a3 + 8) = 3;
    TagDataSize = SdbGetTagDataSize((INT64)a1, v18);
    *(_QWORD *)(a3 + 16) = MappedTagData;
LABEL_18:
    *(_DWORD *)(a3 + 12) = TagDataSize;
    return 0;
  }
  return v6;
}

Referenced by:

KsepDbCacheReadDeviceInternal