PiAuCreateStandardSecurityObject

__int64 __fastcall PiAuCreateStandardSecurityObject(PSID *a1){
  ACL *v2; 
  VOID *v3; 
  unsigned int v4; 
  PVOID *v5; 
  __int64 *v6; 
  int Acl; 
  __int64 v8; 
  __int64 v9; 
  _DWORD *v10; 
  __int64 v11; 
  __int64 v12; 
  UINT32 v13; 
  __int64 *v14; 
  __int64 v15; 
  struct _ACL *PoolWithTag; 
  unsigned int v17; 
  __int64 *v18; 
  ULONG v19; 
  VOID *v20; 
  __int64 *v21; 
  ULONG BufferLength[2]; 
  _BYTE SecurityDescriptor[40]; 
  __int64 v25; 
  __int64 result[22]; 
  LOWORD(BufferLength[1]) = 1280;
  BufferLength[0] = 0;
  v25 = 0i64;
  v2 = 0i64;
  v3 = 0i64;
  memset((INT64)result, 0i64);
  v4 = 0;
  memset(SecurityDescriptor, 0, sizeof(SecurityDescriptor));
  v5 = (PVOID *)result;
  v6 = PiAuSwDeviceCreateSidSubAuthorities;
  do
  {
    Acl = PiAuAllocateAndInitializeSid(
            (VOID **)&result[v4],
            (SID_IDENTIFIER_AUTHORITY *)BufferLength,
            *(unsigned int *)v6);
    if( Acl < 0 )
      goto LABEL_42;
    v8 = *(_QWORD *)SecurityDescriptor;
    v9 = 0i64;
    if( *(_DWORD *)v6 )
    {
      v10 = *v5;
      do
      {
        v10[v9 + 2] = *((_DWORD *)PiAuSwDeviceCreateSidSubAuthorities + v8 + v9 + 1);
        v9 = (unsigned int)(v9 + 1);
      }
      while( (unsigned int)v9 < *(_DWORD *)v6 );
    }
    if( !RtlValidSid(*v5) )
    {
      Acl = -1073741595;
LABEL_42:
      v11 = 21i64;
      goto LABEL_30;
    }
    ++v4;
    v6 = (__int64 *)((char *)v6 + 28);
    *(_QWORD *)SecurityDescriptor = v8 + 7;
    ++v5;
  }
  while( v4 < 0x15 );
  v11 = 21i64;
  v12 = 21i64;
  v13 = 4
      * (*((unsigned __int8 *)a1[6] + 1)
       + *((unsigned __int8 *)*a1 + 1)
       + *((unsigned __int8 *)a1[4] + 1)
       + *((unsigned __int8 *)a1[5] + 1)
       + *((unsigned __int8 *)a1[3] + 1)
       + *((unsigned __int8 *)a1[2] + 1))
      + 104;
  v14 = result;
  do
  {
    v15 = *v14++;
    v13 += 4 * *(unsigned __int8 *)(v15 + 1) + 16;
    --v12;
  }
  while( v12 );
  PoolWithTag = (struct _ACL *)ExAllocatePoolWithTag(PagedPool, v13, 0x20207050ui64);
  v2 = PoolWithTag;
  if( PoolWithTag )
  {
    Acl = RtlCreateAcl(PoolWithTag, v13, 2u);
    if( Acl >= 0 )
    {
      Acl = RtlAddAccessAllowedAceEx(v2, 2ui64, 0i64, 0x201E7ui64, a1[2]);
      if( Acl >= 0 )
      {
        Acl = RtlAddAccessDeniedAceEx(v2, 2ui64, 0i64, 0xF01FFui64, a1[3]);
        if( Acl >= 0 )
        {
          Acl = RtlAddAccessAllowedAceEx(v2, 2ui64, 0i64, 0xF01FFui64, *a1);
          if( Acl >= 0 )
          {
            Acl = RtlAddAccessAllowedAceEx(v2, 2ui64, 0i64, 0x20125ui64, a1[4]);
            if( Acl >= 0 )
            {
              Acl = RtlAddAccessAllowedAceEx(v2, 2ui64, 0i64, 0x40ui64, a1[5]);
              if( Acl >= 0 )
              {
                Acl = RtlAddAccessAllowedAceEx(v2, 2ui64, 0i64, 0x40ui64, a1[6]);
                if( Acl >= 0 )
                {
                  v17 = 0;
                  v18 = result;
                  while( 1 )
                  {
                    Acl = RtlAddAccessAllowedAceEx(v2, 2ui64, 0i64, 0x80ui64, (VOID *)*v18);
                    if( Acl < 0 )
                      break;
                    ++v17;
                    ++v18;
                    if( v17 >= 0x15 )
                    {
                      Acl = RtlCreateSecurityDescriptor(&SecurityDescriptor[8], 1ui64);
                      if( Acl >= 0 )
                      {
                        Acl = RtlSetDaclSecurityDescriptor(&SecurityDescriptor[8], 1u, v2, 0);
                        if( Acl >= 0 )
                        {
                          Acl = RtlSetOwnerSecurityDescriptor(&SecurityDescriptor[8], *a1, 0);
                          if( Acl >= 0 )
                          {
                            Acl = RtlSetGroupSecurityDescriptor(&SecurityDescriptor[8], *a1, 0);
                            if( Acl >= 0 )
                            {
                              if( RtlValidSecurityDescriptor(&SecurityDescriptor[8])
                                && (v19 = RtlLengthSecurityDescriptor(&SecurityDescriptor[8]),
                                    BufferLength[0] = v19,
                                    v19 >= 0x28) )
                              {
                                v20 = ExAllocatePoolWithTag(PagedPool, v19, 0x20207050ui64);
                                v3 = v20;
                                if( !v20 )
                                  goto LABEL_39;
                                memset((INT64)v20, 0i64);
                                Acl = RtlAbsoluteToSelfRelativeSD(&SecurityDescriptor[8], v3, (UINT64 *)BufferLength);
                                if( Acl >= 0 )
                                {
                                  PiAuSecurityObject = v3;
                                  v3 = 0i64;
                                }
                              }
                              else
                              {
                                Acl = -1073741595;
                              }
                            }
                          }
                        }
                      }
                      break;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  else
  {
LABEL_39:
    Acl = -1073741670;
  }
LABEL_30:
  v21 = result;
  do
  {
    if( *v21 )
      ExFreePoolWithTag((PVOID)*v21, 0);
    ++v21;
    --v11;
  }
  while( v11 );
  if( v2 )
    ExFreePoolWithTag(v2, 0);
  if( v3 )
    ExFreePoolWithTag(v3, 0);
  return(unsigned int)Acl;
}

Referenced by:

PiAuCreateSecurityObjects