RtlMakeSelfRelativeSD
NTSTATUS __stdcall RtlMakeSelfRelativeSD(
VOID *SecurityDescriptor,
VOID *SelfRelativeSecurityDescriptor,
UINT64 *BufferLength){
size_t v6;
__int64 v7;
__int64 v8;
__int64 v9;
size_t v10;
int v11;
char *v12;
int v13;
int v14;
int v15;
_ACL *Sacl;
_ACL *Dacl;
VOID *Owner;
VOID *PrimaryGroup;
UINT64 PrimaryGroupSize;
UINT64 OwnerSize;
UINT64 SaclSize;
UINT64 DaclSize;
LODWORD(DaclSize) = 0;
LODWORD(SaclSize) = 0;
LODWORD(OwnerSize) = 0;
LODWORD(PrimaryGroupSize) = 0;
Owner = 0i64;
PrimaryGroup = 0i64;
Dacl = 0i64;
Sacl = 0i64;
RtlpQuerySecurityDescriptor(
(_SECURITY_DESCRIPTOR *)SecurityDescriptor,
&Owner,
&OwnerSize,
&PrimaryGroup,
&PrimaryGroupSize,
&Dacl,
&DaclSize,
&Sacl,
&SaclSize);
v6 = PrimaryGroupSize;
v7 = (unsigned int)OwnerSize;
v8 = (unsigned int)DaclSize;
v9 = (unsigned int)SaclSize;
v10 = SaclSize + PrimaryGroupSize + OwnerSize + DaclSize + 20;
if( v10 > *(_DWORD *)BufferLength )
{
*(_DWORD *)BufferLength = v10;
return -1073741789;
}
else if( SelfRelativeSecurityDescriptor )
{
memset(SelfRelativeSecurityDescriptor, 0i64, v10);
v11 = *(_DWORD *)SecurityDescriptor;
v12 = (char *)SelfRelativeSecurityDescriptor + 20;
*(_DWORD *)SelfRelativeSecurityDescriptor = v11;
if( (_DWORD)v9 )
{
memmove((char *)SelfRelativeSecurityDescriptor + 20, Sacl, v9);
v12 += v9;
v13 = 20;
}
else
{
v13 = 0;
}
*((_DWORD *)SelfRelativeSecurityDescriptor + 3) = v13;
if( (_DWORD)v8 )
{
memmove(v12, Dacl, v8);
v14 = (int)v12;
v12 += v8;
v15 = v14 - (_DWORD)SelfRelativeSecurityDescriptor;
}
else
{
v15 = 0;
}
*((_DWORD *)SelfRelativeSecurityDescriptor + 4) = v15;
if( (_DWORD)v7 )
{
memmove(v12, Owner, v7);
*((_DWORD *)SelfRelativeSecurityDescriptor + 1) = (_DWORD)v12 - (_DWORD)SelfRelativeSecurityDescriptor;
v12 += v7;
}
if( v6 )
{
memmove(v12, PrimaryGroup, v6);
*((_DWORD *)SelfRelativeSecurityDescriptor + 2) = (_DWORD)v12 - (_DWORD)SelfRelativeSecurityDescriptor;
}
*((_WORD *)SelfRelativeSecurityDescriptor + 1) |= 0x8000u;
return 0;
}
else
{
return -1073741811;
}
}Referenced by:
RtlAbsoluteToSelfRelativeSD
RtlpSysVolCheckOwnerAndSecurity