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