RtlValidRelativeSecurityDescriptor
INT8 __fastcall RtlValidRelativeSecurityDescriptor(INT64 a1, UINT64 a2, INT8 a3){
INT8 v3;
unsigned int v4;
__int16 v6;
UINT64 v7;
UINT64 v8;
__int64 v9;
int v10;
UINT64 v11;
__int64 v12;
int v13;
UINT64 v14;
VOID *v15;
__int64 v16;
VOID *v17;
_ACL *v18;
char v19;
UINT64 v21;
__int64 v22;
VOID *v23;
_ACL *v24;
VOID *AclSize;
char v26;
UINT64 v27[2];
UINT64 MaxLength;
UINT64 v29;
v3 = a3;
LODWORD(MaxLength) = 0;
v4 = a2;
LODWORD(v29) = 0;
v27[0] = 0i64;
if( (unsigned int)a2 < 0x14 )
return 0;
if( *(_BYTE *)a1 != 1 )
return 0;
v6 = *(_WORD *)(a1 + 2);
if( v6 >= 0 )
return 0;
v7 = *(unsigned int *)(a1 + 4);
v8 = 12i64;
if( (_DWORD)v7 )
{
if( !RtlpValidateSDOffsetAndSize(v7, a2, 0xCui64, &MaxLength) )
return 0;
if( *(_BYTE *)(v9 + a1) != 1 )
return 0;
v10 = *(unsigned __int8 *)(v9 + a1 + 1);
if( (unsigned __int8)v10 > 0xFu || (unsigned int)MaxLength < 4 * v10 + 8 )
return 0;
}
else if( (v3 & 1) != 0 )
{
return 0;
}
v11 = *(unsigned int *)(a1 + 8);
if( (_DWORD)v11 )
{
if( !RtlpValidateSDOffsetAndSize(v11, v4, v8, &v29) )
return 0;
if( *(_BYTE *)(v12 + a1) != 1 )
return 0;
v13 = *(unsigned __int8 *)(v12 + a1 + 1);
if( (unsigned __int8)v13 > 0xFu || (unsigned int)v29 < 4 * v13 + 8 )
return 0;
}
else if( (v3 & 2) != 0 )
{
return 0;
}
if( (v6 & 4) == 0
|| (v14 = *(unsigned int *)(a1 + 16), !(_DWORD)v14)
|| RtlpValidateSDOffsetAndSize(v14, v4, 8ui64, v27)
&& (v18 = (_ACL *)(a1 + v16), LODWORD(v27[0]) >= v18->AclSize)
&& (RtlValidAcl(v18, v15, v17), v19) )
{
if( (*(_BYTE *)(a1 + 2) & 0x10) == 0 )
return 1;
v21 = *(unsigned int *)(a1 + 12);
if( !(_DWORD)v21 )
return 1;
if( RtlpValidateSDOffsetAndSize(v21, v4, 8ui64, (UINT64 *)((char *)v27 + 4)) )
{
v24 = (_ACL *)(a1 + v22);
AclSize = (VOID *)v24->AclSize;
if( HIDWORD(v27[0]) >= (unsigned int)AclSize )
{
RtlValidAcl(v24, AclSize, v23);
if( v26 )
return 1;
}
}
}
return 0;
}Referenced by:
CmSetDeviceRegPropWorker
CmSetInstallerClassRegPropWorker
CmpValidateHiveSecurityDescriptors
CmpVerifyCreateOrDeleteKeyLogRecord
CmpVerifySetSecurityDescriptorLogRecord
ExpWnfLookupPermanentName
PipGetRegistrySecurityWithFallback
PnpValidatePropertyData