RtlpComputeMergedAcl2
__int64 __fastcall RtlpComputeMergedAcl2(
_BYTE *a1,
__int16 a2,
unsigned __int8 *a3,
__int16 a4,
__int64 a5,
__int64 a6,
__int64 a7,
int a8,
__int64 a9,
PACL Acl,
__int64 a11){
_DWORD *v13;
PACL v14;
char v16;
char v17;
unsigned int v18;
_DWORD *v19;
__int64 result;
int v21;
bool v22;
unsigned int v23;
unsigned int v24;
int v25[18];
unsigned int v27;
v27 = 0;
v25[0] = 0;
v13 = (_DWORD *)a9;
v14 = Acl;
v16 = 0;
v17 = 1;
v18 = 2;
RtlCreateAcl(Acl, *(_DWORD *)a9, 2u);
v19 = (_DWORD *)a11;
*(_DWORD *)a11 = 1024;
if( (a4 & 0x1000) != 0 )
{
*v19 = 5120;
if( a3 )
{
if( *a3 >= 2u )
LOBYTE(v18) = *a3;
result = RtlpCopyAces(
(__int64)a3,
(struct _GENERIC_MAPPING *)a7,
2,
16,
1,
a5,
a6,
a5,
a6,
1,
0,
a8,
&v27,
(__int64)v14);
LABEL_6:
if( (_DWORD)result == -1073741789 )
{
v16 = 1;
result = 0i64;
}
if( (int)result < 0 )
return result;
v17 = 0;
goto LABEL_30;
}
goto LABEL_30;
}
if( (a2 & 0x1000) == 0 )
{
v21 = a8;
v22 = a8 != 1;
if( a3 )
{
if( *a3 >= 2u )
v18 = *a3;
result = RtlpCopyAces(
(__int64)a3,
(struct _GENERIC_MAPPING *)a7,
1,
0,
1,
a5,
a6,
a5,
a6,
1,
0,
a8,
&v27,
(__int64)v14);
if( (_DWORD)result == -1073741789 )
{
v16 = 1;
result = 0i64;
}
if( (int)result < 0 )
return result;
v17 = *((_WORD *)a3 + 2) != 0 && v22;
}
else
{
v17 = a8 != 1;
if( a8 == 1 )
return 3221225591i64;
}
if( a1 )
{
if( v18 <= (unsigned __int8)*a1 )
LOBYTE(v18) = *a1;
result = RtlpCopyAces(
(__int64)a1,
(struct _GENERIC_MAPPING *)a7,
0,
0,
0,
0i64,
0i64,
0i64,
0i64,
1,
0,
v21,
(unsigned int *)v25,
(__int64)v14);
if( (_DWORD)result == -1073741789 )
{
v16 = 1;
result = 0i64;
}
if( (int)result < 0 )
return result;
}
goto LABEL_30;
}
if( a3 )
{
if( *a3 >= 2u )
LOBYTE(v18) = *a3;
result = RtlpCopyAces(
(__int64)a3,
(struct _GENERIC_MAPPING *)a7,
2,
0,
1,
a5,
a6,
a5,
a6,
1,
1,
a8,
&v27,
(__int64)v14);
goto LABEL_6;
}
if( a8 == 1 )
return 3221225591i64;
LABEL_30:
v23 = v27 + v25[0];
if( v27 + v25[0] || !v17 )
{
if( (unsigned __int64)v23 + 8 > 0xFFFF )
return 3221225597i64;
v24 = v23 + 8;
*v13 = v24;
if( v16 )
return 3221225507i64;
v14->AclSize = v24;
v14->AclRevision = v18;
}
else
{
*v13 = 0;
}
return 0i64;
}Referenced by:
RtlpComputeMergedAcl