SepBuildCapeSecurityDescriptor
NTSTATUS __stdcall SepBuildCapeSecurityDescriptor(PVOID CapeSecurityDescriptor, PVOID CapPolicyEntrySD, _ACL *Sacl){
NTSTATUS result;
__int16 v7;
_ACL *v8;
__int64 v9;
result = RtlCreateSecurityDescriptor(CapeSecurityDescriptor, *(unsigned __int8 *)CapPolicyEntrySD);
if( result >= 0 )
{
*((_WORD *)CapeSecurityDescriptor + 1) |= 3u;
v7 = *((_WORD *)CapPolicyEntrySD + 1);
if( (v7 & 4) == 0 )
{
LABEL_3:
v8 = 0i64;
goto LABEL_8;
}
if( v7 >= 0 )
{
v8 = (_ACL *)*((_QWORD *)CapPolicyEntrySD + 4);
}
else
{
v9 = *((unsigned int *)CapPolicyEntrySD + 4);
if( !(_DWORD)v9 )
goto LABEL_3;
v8 = (_ACL *)((char *)CapPolicyEntrySD + v9);
}
LABEL_8:
result = RtlSetDaclSecurityDescriptor(
CapeSecurityDescriptor,
(*((_WORD *)CapPolicyEntrySD + 1) & 4) != 0,
v8,
(*((_WORD *)CapPolicyEntrySD + 1) & 8) != 0);
if( result >= 0 )
return RtlSetSaclSecurityDescriptor(CapeSecurityDescriptor, 1u, Sacl, 0);
}
return result;
}Referenced by:
SeAccessCheckByTypeWithAdminlessChecks
SeAccessCheckWithHintWithAdminlessChecks
SepAccessCheckAndAuditAlarmWithAdminlessChecks
SepCommonAccessCheckExWithAdminlessChecks