RtlpQuerySecurityDescriptor
VOID __stdcall RtlpQuerySecurityDescriptor(
_SECURITY_DESCRIPTOR *SecurityDescriptor,
VOID **Owner,
UINT64 *OwnerSize,
VOID **PrimaryGroup,
UINT64 *PrimaryGroupSize,
_ACL **Dacl,
UINT64 *DaclSize,
_ACL **Sacl,
UINT64 *SaclSize){
unsigned int v9;
unsigned __int8 *v10;
unsigned int v11;
signed __int16 Control;
_ACL *v13;
unsigned int v14;
unsigned __int8 *Group;
unsigned int v16;
signed __int16 v17;
_ACL *v18;
__int64 v19;
__int64 Group_low;
__int64 Owner_low;
__int64 Owner_high;
v9 = 0;
if( (SecurityDescriptor->Control & 0x8000u) != 0 )
{
v19 = *(unsigned int *)(&SecurityDescriptor->Control + 1);
if( (_DWORD)v19 )
v10 = &SecurityDescriptor->Revision + v19;
else
v10 = 0i64;
}
else
{
v10 = (unsigned __int8 *)SecurityDescriptor->Owner;
}
*Owner = v10;
if( v10 )
v11 = (4 * v10[1] + 11) & 0xFFFFFFFC;
else
v11 = 0;
*(_DWORD *)OwnerSize = v11;
Control = SecurityDescriptor->Control;
if( (Control & 4) == 0 )
goto LABEL_31;
if( Control >= 0 )
{
v13 = SecurityDescriptor->Dacl;
goto LABEL_8;
}
Group_low = LODWORD(SecurityDescriptor->Group);
if( (_DWORD)Group_low )
v13 = (_ACL *)(&SecurityDescriptor->Revision + Group_low);
else
LABEL_31:
v13 = 0i64;
LABEL_8:
*Dacl = v13;
if( v13 )
v14 = (v13->AclSize + 3) & 0xFFFFFFFC;
else
v14 = 0;
*(_DWORD *)DaclSize = v14;
if( (SecurityDescriptor->Control & 0x8000u) != 0 )
{
Owner_low = LODWORD(SecurityDescriptor->Owner);
if( (_DWORD)Owner_low )
Group = &SecurityDescriptor->Revision + Owner_low;
else
Group = 0i64;
}
else
{
Group = (unsigned __int8 *)SecurityDescriptor->Group;
}
*PrimaryGroup = Group;
if( Group )
v16 = (4 * Group[1] + 11) & 0xFFFFFFFC;
else
v16 = 0;
*(_DWORD *)PrimaryGroupSize = v16;
v17 = SecurityDescriptor->Control;
if( (v17 & 0x10) == 0 )
goto LABEL_15;
if( v17 < 0 )
{
Owner_high = HIDWORD(SecurityDescriptor->Owner);
if( !(_DWORD)Owner_high )
{
LABEL_15:
v18 = 0i64;
goto LABEL_16;
}
v18 = (_ACL *)(&SecurityDescriptor->Revision + Owner_high);
}
else
{
v18 = SecurityDescriptor->Sacl;
}
LABEL_16:
*Sacl = v18;
if( v18 )
v9 = (v18->AclSize + 3) & 0xFFFFFFFC;
*(_DWORD *)SaclSize = v9;
}Referenced by:
RtlMakeSelfRelativeSD
RtlSelfRelativeToAbsoluteSD
RtlSelfRelativeToAbsoluteSD2