KsepDbReadKData
NTSTATUS __fastcall KsepDbReadKData(_DB *pdb, UINT64 tiParent, INT64 a3){
unsigned int v4;
NTSTATUS v6;
unsigned int FirstTag;
WCHAR *StringTagPtr;
unsigned int v9;
int DWORDTag;
unsigned int v11;
WCHAR *v12;
__int64 v13;
int TagDataSize;
unsigned int v15;
INT64 v16;
unsigned int v17;
unsigned int v18;
VOID *MappedTagData;
v4 = tiParent;
v6 = -1073741823;
if( !(_DWORD)tiParent )
return v6;
FirstTag = SdbFindFirstTag(pdb, tiParent, 0x6001u);
if( !FirstTag )
return v6;
StringTagPtr = SdbGetStringTagPtr(pdb, FirstTag);
if( !StringTagPtr )
return v6;
v9 = SdbFindFirstTag(pdb, v4, 0x4018u);
if( !v9 )
return v6;
DWORDTag = SdbReadDWORDTag(pdb, v9, 0);
switch( DWORDTag )
{
case 1:
v11 = SdbFindFirstTag(pdb, v4, 0x601Eu);
v12 = SdbGetStringTagPtr(pdb, v11);
if( v12 )
{
*(_QWORD *)a3 = StringTagPtr;
v13 = -1i64;
*(_DWORD *)(a3 + 8) = 1;
do
++v13;
while( v12[v13] );
TagDataSize = 2 * v13 + 2;
*(_QWORD *)(a3 + 16) = v12;
goto LABEL_18;
}
return v6;
case 4:
v15 = SdbFindFirstTag(pdb, v4, 0x4019u);
*(_QWORD *)a3 = StringTagPtr;
*(_DWORD *)(a3 + 8) = 4;
*(_DWORD *)(a3 + 12) = 4;
v16 = a3 + 24;
*(_DWORD *)(a3 + 24) = SdbReadDWORDTag(pdb, v15, 0);
LABEL_14:
*(_QWORD *)(a3 + 16) = v16;
return 0;
case 11:
v17 = SdbFindFirstTag(pdb, v4, 0x5007u);
*(_QWORD *)a3 = StringTagPtr;
*(_DWORD *)(a3 + 8) = 11;
*(_DWORD *)(a3 + 12) = 8;
v16 = a3 + 32;
*(_QWORD *)(a3 + 32) = SdbReadQWORDTag(pdb, v17, 0i64);
goto LABEL_14;
}
if( DWORDTag != 3 )
return -1073741811;
v18 = SdbFindFirstTag(pdb, v4, 0x9005u);
MappedTagData = SdbpGetMappedTagData(pdb, v18);
if( MappedTagData )
{
*(_QWORD *)a3 = StringTagPtr;
*(_DWORD *)(a3 + 8) = 3;
TagDataSize = SdbGetTagDataSize(pdb, v18);
*(_QWORD *)(a3 + 16) = MappedTagData;
LABEL_18:
*(_DWORD *)(a3 + 12) = TagDataSize;
return 0;
}
return v6;
}Referenced by:
KsepDbCacheReadDeviceInternal