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