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