SdbpGetRegistryMatchingAttributes

VOID __stdcall SdbpGetRegistryMatchingAttributes(){
  UINT64 v0; 
  _DB *v1; 
  WCHAR **v2; 
  WCHAR **v3; 
  int v4; 
  unsigned int v5; 
  _DB *v6; 
  unsigned int v7; 
  WCHAR *v8; 
  VOID *BinaryTagData; 
  unsigned int FirstTag; 
  INT8 *v11; 
  UINT64 v12; 
  WCHAR *StringTagPtr; 
  WCHAR *v14; 
  unsigned int v15; 
  unsigned int v16; 
  unsigned int DWORDTag; 
  unsigned int v18; 
  __int64 TagDataSize; 
  unsigned int v20; 
  unsigned int v21; 
  unsigned int v22; 
  unsigned int v23; 
  WCHAR *v24; 
  __int64 QWORDTag; 
  WCHAR **v26; 
  WCHAR **v27; 
  unsigned int *v28; 
  WCHAR **v29; 
  _DWORD *v30; 
  __int64 *v31; 
  _QWORD *v32; 
  _QWORD *v33; 

  v27 = v3;
  v26 = v2;
  v4 = 0;
  *v2 = 0i64;
  v5 = v0;
  v24 = 0i64;
  v6 = v1;
  QWORDTag = 0i64;
  *v28 = 0;
  v7 = 0;
  v8 = 0i64;
  BinaryTagData = 0i64;
  *v3 = 0i64;
  *v29 = 0i64;
  *v30 = 0;
  *v31 = 0i64;
  *v32 = 0i64;
  *v33 = 0i64;
  FirstTag = SdbFindFirstTag(v1, v0, 0x6001u);
  if( FirstTag )
  {
    StringTagPtr = SdbGetStringTagPtr(v6, FirstTag);
    v14 = StringTagPtr;
    if( !StringTagPtr || !*StringTagPtr )
    {
      v11 = (INT8 *)"Failed to read key path";
      v12 = 798i64;
      goto LABEL_34;
    }
    v15 = SdbFindFirstTag(v6, v5, 0x6030u);
    if( v15 )
      v24 = SdbGetStringTagPtr(v6, v15);
    v16 = SdbFindFirstTag(v6, v5, 0x4051u);
    if( !v16 )
    {
LABEL_18:
      TagDataSize = 0i64;
      goto LABEL_19;
    }
    DWORDTag = SdbReadDWORDTag(v6, v16, 0);
    v7 = DWORDTag;
    if( !DWORDTag )
    {
      v11 = "Failed to read value type";
      v12 = 817i64;
      goto LABEL_34;
    }
    if( DWORDTag > 2 )
    {
      switch( DWORDTag )
      {
        case 3u:
          v21 = SdbFindFirstTag(v6, v5, 0x9012u);
          v22 = v21;
          if( !v21 )
          {
            v11 = "Failed to get TAG_REG_VALUE_DATA_BINARY";
            v12 = 864i64;
            goto LABEL_34;
          }
          BinaryTagData = SdbGetBinaryTagData(v6, v21);
          if( !BinaryTagData )
          {
            v11 = "Failed to read value data";
            v12 = 870i64;
            goto LABEL_34;
          }
          TagDataSize = (unsigned int)SdbGetTagDataSize(v6, v22);
          break;
        case 4u:
          v20 = SdbFindFirstTag(v6, v5, 0x4052u);
          if( !v20 )
          {
            v11 = "Failed to get TAG_REG_VALUE_DATA_DWORD";
            v12 = 844i64;
            goto LABEL_34;
          }
          v4 = SdbReadDWORDTag(v6, v20, 0);
          TagDataSize = 0i64;
          break;
        case 7u:
          goto LABEL_28;
        case 0xBu:
          v18 = SdbFindFirstTag(v6, v5, 0x501Bu);
          if( !v18 )
          {
            v11 = "Failed to get TAG_REG_VALUE_DATA_QWORD";
            v12 = 854i64;
            goto LABEL_34;
          }
          QWORDTag = SdbReadQWORDTag(v6, v18, 0i64);
          goto LABEL_18;
        default:
          v11 = "Unknown registry value type";
          v12 = 877i64;
          goto LABEL_34;
      }
LABEL_19:
      *v26 = v14;
      *v27 = v24;
      *v28 = v7;
      *v29 = v8;
      *v30 = v4;
      *v31 = QWORDTag;
      *v32 = BinaryTagData;
      *v33 = TagDataSize;
      return;
    }
LABEL_28:
    v23 = SdbFindFirstTag(v6, v5, 0x6031u);
    if( !v23 )
    {
      v11 = "Failed to get TAG_REG_VALUE_DATA_SZ";
      v12 = 830i64;
      goto LABEL_34;
    }
    v8 = SdbGetStringTagPtr(v6, v23);
    if( !v8 )
    {
      v11 = "Failed to read value data";
      v12 = 836i64;
      goto LABEL_34;
    }
    goto LABEL_18;
  }
  v11 = "Failed to get key path tag";
  v12 = 792i64;
LABEL_34:
  AslLogCallPrintf(1ui64, (INT8 *)"SdbpGetRegistryMatchingAttributes", v12, v11);
}

Referenced by:

SdbpCheckMatchingRegistry
SdbpCheckMatchingWildcardRegistry