SdbGetDatabaseID

__int64 __fastcall SdbGetDatabaseID(__int64 a1, void *a2){
  int v2; 
  unsigned int v3; 
  unsigned int FirstTag; 
  unsigned int v7; 
  int v8; 
  UINT8 *v9; 
  v2 = *(_DWORD *)(a1 + 24);
  v3 = 0;
  if( (v2 & 2) != 0 )
  {
    v9 = (UINT8 *)(a1 + 28);
  }
  else
  {
    FirstTag = SdbFindFirstTag(a1, 0i64, 28673);
    if( !FirstTag )
    {
      AslLogCallPrintf(1ui64, "SdbGetDatabaseID", 0x1B8ui64, "Failed to get root tag");
      return v3;
    }
    v7 = SdbFindFirstTag(a1, FirstTag, 36871);
    v8 = v7;
    if( !v7 )
    {
      AslLogCallPrintf(1ui64, "SdbGetDatabaseID", 0x1BEui64, "Failed to get the database id");
      return v3;
    }
    v9 = (UINT8 *)(a1 + 28);
    if( !(unsigned int)SdbReadBinaryTag(a1, v7, (void *)(a1 + 28), 0x10u) )
    {
      AslLogCallPrintf(1ui64, "SdbGetDatabaseID", 0x1C3ui64, "Failed to read database id 0x%lx", v8);
      return v3;
    }
    *(_DWORD *)(a1 + 24) |= 2u;
    v2 = *(_DWORD *)(a1 + 24);
  }
  if( (v2 & 2) != 0 )
  {
    memmove((UINT8 *)a2, v9, 0x10ui64);
    return 1;
  }
  return v3;
}

Referenced by:

SdbReadEntryInformation
SdbpValidateAndApplyCompatFlags