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