SdbpGetRegistryMatchingAttributes

INT64 __fastcall SdbpGetRegistryMatchingAttributes(
        _RTL_RUN_ONCE *a1,
        UINT64 a2,
        _QWORD *a3,
        INT64 *a4,
        INT64 a5,
        INT64 a6,
        INT64 a7,
        INT64 a8,
        INT64 a9,
        INT64 a10){
  int v10; 
  unsigned int v11; 
  unsigned int v13; 
  INT64 v14; 
  INT64 BinaryTagData; 
  unsigned int v16; 
  unsigned int FirstTag; 
  _WORD *StringTagPtr; 
  _WORD *v19; 
  unsigned int v20; 
  unsigned int v21; 
  unsigned int DWORDTag; 
  unsigned int v23; 
  __int64 TagDataSize; 
  unsigned int v25; 
  unsigned int v26; 
  unsigned int v27; 
  unsigned int v28; 
  INT64 v30; 
  INT64 QWORDTag; 
  v10 = 0;
  *a3 = 0i64;
  v11 = a2;
  v30 = 0i64;
  QWORDTag = 0i64;
  *(_DWORD *)a5 = 0;
  v13 = 0;
  v14 = 0i64;
  BinaryTagData = 0i64;
  *a4 = 0i64;
  v16 = 0;
  *(_QWORD *)a6 = 0i64;
  *(_DWORD *)a7 = 0;
  *(_QWORD *)a8 = 0i64;
  *(_QWORD *)a9 = 0i64;
  *(_QWORD *)a10 = 0i64;
  FirstTag = SdbFindFirstTag((INT64)a1, a2, 24577);
  if( FirstTag )
  {
    StringTagPtr = (_WORD *)SdbGetStringTagPtr(a1, FirstTag);
    v19 = StringTagPtr;
    if( !StringTagPtr || !*StringTagPtr )
    {
      AslLogCallPrintf(1ui64, "SdbpGetRegistryMatchingAttributes", 0x31Eui64, "Failed to read key path");
      return v16;
    }
    v20 = SdbFindFirstTag((INT64)a1, v11, 24624);
    if( v20 )
      v30 = SdbGetStringTagPtr(a1, v20);
    v21 = SdbFindFirstTag((INT64)a1, v11, 16465);
    if( v21 )
    {
      DWORDTag = SdbReadDWORDTag((INT64)a1, v21, 0i64);
      v13 = DWORDTag;
      if( !DWORDTag )
      {
        AslLogCallPrintf(1ui64, "SdbpGetRegistryMatchingAttributes", 0x331ui64, "Failed to read value type");
        return v16;
      }
      if( DWORDTag <= 2 )
        goto LABEL_28;
      switch( DWORDTag )
      {
        case 3u:
          v26 = SdbFindFirstTag((INT64)a1, v11, 36882);
          v27 = v26;
          if( !v26 )
          {
            AslLogCallPrintf(
              1ui64,
              "SdbpGetRegistryMatchingAttributes",
              0x360ui64,
              "Failed to get TAG_REG_VALUE_DATA_BINARY");
            return v16;
          }
          BinaryTagData = SdbGetBinaryTagData((INT64)a1, v26);
          if( !BinaryTagData )
          {
            AslLogCallPrintf(1ui64, "SdbpGetRegistryMatchingAttributes", 0x366ui64, "Failed to read value data");
            return v16;
          }
          TagDataSize = (unsigned int)SdbGetTagDataSize((INT64)a1, v27);
          goto LABEL_19;
        case 4u:
          v25 = SdbFindFirstTag((INT64)a1, v11, 16466);
          if( !v25 )
          {
            AslLogCallPrintf(
              1ui64,
              "SdbpGetRegistryMatchingAttributes",
              0x34Cui64,
              "Failed to get TAG_REG_VALUE_DATA_DWORD");
            return v16;
          }
          v10 = SdbReadDWORDTag((INT64)a1, v25, 0i64);
          TagDataSize = 0i64;
          goto LABEL_19;
        case 7u:
LABEL_28:
          v28 = SdbFindFirstTag((INT64)a1, v11, 24625);
          if( !v28 )
          {
            AslLogCallPrintf(
              1ui64,
              "SdbpGetRegistryMatchingAttributes",
              0x33Eui64,
              "Failed to get TAG_REG_VALUE_DATA_SZ");
            return v16;
          }
          v14 = SdbGetStringTagPtr(a1, v28);
          if( !v14 )
          {
            AslLogCallPrintf(1ui64, "SdbpGetRegistryMatchingAttributes", 0x344ui64, "Failed to read value data");
            return v16;
          }
          break;
        case 0xBu:
          v23 = SdbFindFirstTag((INT64)a1, v11, 20507);
          if( !v23 )
          {
            AslLogCallPrintf(
              1ui64,
              "SdbpGetRegistryMatchingAttributes",
              0x356ui64,
              "Failed to get TAG_REG_VALUE_DATA_QWORD");
            return v16;
          }
          QWORDTag = SdbReadQWORDTag((INT64)a1, v23, 0i64);
          break;
        default:
          AslLogCallPrintf(1ui64, "SdbpGetRegistryMatchingAttributes", 0x36Dui64, "Unknown registry value type");
          return v16;
      }
    }
    TagDataSize = 0i64;
LABEL_19:
    v16 = 1;
    *a3 = v19;
    *a4 = v30;
    *(_DWORD *)a5 = v13;
    *(_QWORD *)a6 = v14;
    *(_DWORD *)a7 = v10;
    *(_QWORD *)a8 = QWORDTag;
    *(_QWORD *)a9 = BinaryTagData;
    *(_QWORD *)a10 = TagDataSize;
    return v16;
  }
  AslLogCallPrintf(1ui64, "SdbpGetRegistryMatchingAttributes", 0x318ui64, "Failed to get key path tag");
  return v16;
}

Referenced by:

SdbpCheckMatchingRegistry
SdbpCheckMatchingWildcardRegistry