SeValidSecurityDescriptor

INT8 __fastcall SeValidSecurityDescriptor(UINT64 a1, INT64 a2){
  unsigned int v3; 
  __int64 v4; 
  VOID *v5; 
  int v6; 
  __int64 v7; 
  int v8; 
  __int64 v9; 
  VOID *v10; 
  _ACL *v11; 
  char v12; 
  __int64 v13; 
  unsigned int v15; 
  _ACL *v16; 
  VOID *AclSize; 
  char v18; 

  v3 = a1;
  if( (unsigned int)a1 < 0x14 )
    return 0;
  if( *(_BYTE *)a2 != 1 )
    return 0;
  if( *(__int16 *)(a2 + 2) >= 0 )
    return 0;
  v4 = *(unsigned int *)(a2 + 4);
  if( !(_DWORD)v4 )
    return 0;
  if( ((v4 + 3) & 0xFFFFFFFFFFFFFFFCui64) != v4 )
    return 0;
  if( (unsigned int)v4 > v3 )
    return 0;
  v5 = (VOID *)(v3 - (unsigned int)v4);
  if( (unsigned int)v5 < 0xC )
    return 0;
  if( *(_BYTE *)(v4 + a2) != 1 )
    return 0;
  v6 = *(unsigned __int8 *)(v4 + a2 + 1);
  if( (unsigned __int8)v6 > 0xFu )
    return 0;
  if( (unsigned int)v5 < 4 * v6 + 8 )
    return 0;
  v7 = *(unsigned int *)(a2 + 8);
  if( (_DWORD)v7 )
  {
    if( ((v7 + 3) & 0xFFFFFFFFFFFFFFFCui64) != v7 )
      return 0;
    if( (unsigned int)v7 > v3 )
      return 0;
    v5 = (VOID *)(v3 - (unsigned int)v7);
    if( (unsigned int)v5 < 0xC )
      return 0;
    if( *(_BYTE *)(v7 + a2) != 1 )
      return 0;
    v8 = *(unsigned __int8 *)(v7 + a2 + 1);
    if( (unsigned __int8)v8 > 0xFu || (unsigned int)v5 < 4 * v8 + 8 )
      return 0;
  }
  v9 = *(unsigned int *)(a2 + 16);
  if( (_DWORD)v9 )
  {
    if( ((v9 + 3) & 0xFFFFFFFFFFFFFFFCui64) != v9 )
      return 0;
    if( (unsigned int)v9 > v3 )
      return 0;
    v10 = (VOID *)(v3 - (unsigned int)v9);
    if( (unsigned int)v10 < 8 )
      return 0;
    v11 = (_ACL *)(a2 + v9);
    if( (unsigned int)v10 < v11->AclSize )
      return 0;
    RtlValidAcl(v11, v10, v5);
    if( !v12 )
      return 0;
  }
  v13 = *(unsigned int *)(a2 + 12);
  if( !(_DWORD)v13 )
    return 1;
  if( ((v13 + 3) & 0xFFFFFFFFFFFFFFFCui64) == v13
    && (unsigned int)v13 <= v3
    && (v15 = v3 - v13, v15 >= 8)
    && (v16 = (_ACL *)(a2 + v13), AclSize = (VOID *)v16->AclSize, v15 >= (unsigned int)AclSize)
    && (RtlValidAcl(v16, AclSize, v5), v18) )
  {
    return 1;
  }
  else
  {
    return 0;
  }
}

Referenced by:

EtwpGetGuidSecurityDescriptor
PiSwValidateCreateData
RtlNormalizeSecurityDescriptor
SepReadAndPopulateCapes
WmipSDRegistryQueryRoutine