RtlReplaceSidInSd
INT64 __fastcall RtlReplaceSidInSd(VOID *SecurityDescriptor, VOID *OldSid, VOID *NewSid, UINT64 *NumChanges){
void *v4;
unsigned int v8;
INT64 result;
int v10;
int v11;
int v12;
UINT8 *v13;
int v14;
int v15;
int v16;
UINT8 *v17;
__int64 v18;
unsigned __int8 *v19;
__int64 v20;
int v21;
int v22;
int v23;
unsigned int v24;
UINT8 *v25;
__int64 v26;
unsigned __int8 *v27;
__int64 v28;
int v29;
int v30;
int v31;
unsigned int v32;
UINT8 *v33;
unsigned __int8 OwnerDefaulted[4];
unsigned int v35;
PSID Owner;
unsigned __int8 DaclPresent;
*(_DWORD *)NumChanges = 0;
v4 = SecurityDescriptor;
DaclPresent = 0;
Owner = 0i64;
v8 = 4 * *RtlSubAuthorityCountSid(OldSid);
v35 = v8;
LODWORD(result) = RtlGetOwnerSecurityDescriptor(v4, &Owner, OwnerDefaulted);
if( (int)result >= 0 )
{
if( Owner )
{
if( *(_BYTE *)Owner == *(_BYTE *)OldSid )
{
v10 = *((unsigned __int8 *)Owner + 1);
v11 = *((unsigned __int8 *)OldSid + 1);
if( (_BYTE)v10 == (_BYTE)v11 || v10 == v11 + 1 )
{
v12 = *(_DWORD *)((char *)Owner + 2) - *(_DWORD *)((char *)OldSid + 2);
if( !v12 )
v12 = *((unsigned __int16 *)Owner + 3) - *((unsigned __int16 *)OldSid + 3);
if( !v12 )
{
v13 = (UINT8 *)Owner + 8;
if( !memcmp((char *)Owner + 8, (char *)OldSid + 8, v8) )
{
memmove(v13, (UINT8 *)NewSid + 8, v8);
++*(_DWORD *)NumChanges;
}
}
}
}
}
Owner = 0i64;
result = RtlGetGroupSecurityDescriptor(v4, &Owner, OwnerDefaulted);
if( (int)result >= 0 )
{
if( Owner )
{
if( *(_BYTE *)Owner == *(_BYTE *)OldSid )
{
v14 = *((unsigned __int8 *)Owner + 1);
v15 = *((unsigned __int8 *)OldSid + 1);
if( (_BYTE)v14 == (_BYTE)v15 || v14 == v15 + 1 )
{
v16 = *(_DWORD *)((char *)Owner + 2) - *(_DWORD *)((char *)OldSid + 2);
if( !v16 )
v16 = *((unsigned __int16 *)Owner + 3) - *((unsigned __int16 *)OldSid + 3);
if( !v16 )
{
v17 = (UINT8 *)Owner + 8;
if( !memcmp((char *)Owner + 8, (char *)OldSid + 8, v8) )
{
memmove(v17, (UINT8 *)NewSid + 8, v8);
++*(_DWORD *)NumChanges;
}
}
}
}
}
Owner = 0i64;
LODWORD(result) = RtlGetDaclSecurityDescriptor(v4, &DaclPresent, (ACL **)&Owner, OwnerDefaulted);
if( (int)result >= 0 )
{
if( DaclPresent )
{
if( Owner )
{
v18 = *((unsigned __int16 *)Owner + 2);
v19 = (unsigned __int8 *)Owner + 8;
if( *((_WORD *)Owner + 2) )
{
while( *v19 > 3u )
{
if( *v19 == 4 )
{
v20 = (__int64)&v19[(unsigned int)RtlLengthSid(v19 + 12) + 12];
goto LABEL_29;
}
LABEL_38:
v19 += *((unsigned __int16 *)v19 + 1);
if( !--v18 )
{
v4 = SecurityDescriptor;
goto LABEL_40;
}
}
v20 = (__int64)(v19 + 8);
LABEL_29:
if( *(_BYTE *)v20 == *(_BYTE *)OldSid )
{
v21 = *(unsigned __int8 *)(v20 + 1);
v22 = *((unsigned __int8 *)OldSid + 1);
if( (_BYTE)v21 == (_BYTE)v22 || v21 == v22 + 1 )
{
v23 = *(_DWORD *)(v20 + 2) - *(_DWORD *)((char *)OldSid + 2);
if( !v23 )
v23 = *(unsigned __int16 *)(v20 + 6) - *((unsigned __int16 *)OldSid + 3);
if( !v23 )
{
v24 = v8;
v25 = (UINT8 *)(v20 + 8);
if( !memcmp((PVOID)(v20 + 8), (char *)OldSid + 8, v24) )
{
memmove(v25, (UINT8 *)NewSid + 8, v24);
++*(_DWORD *)NumChanges;
}
v8 = v35;
}
}
}
goto LABEL_38;
}
}
}
LABEL_40:
Owner = 0i64;
result = RtlGetSaclSecurityDescriptor(v4, &DaclPresent, (_ACL **)&Owner, OwnerDefaulted);
if( (int)result >= 0 && DaclPresent && Owner )
{
v26 = *((unsigned __int16 *)Owner + 2);
v27 = (unsigned __int8 *)Owner + 8;
if( *((_WORD *)Owner + 2) )
{
while( *v27 > 3u )
{
if( *v27 == 4 )
{
v28 = (__int64)&v27[(unsigned int)RtlLengthSid(v27 + 12) + 12];
goto LABEL_48;
}
LABEL_56:
v8 = v35;
v27 += *((unsigned __int16 *)v27 + 1);
if( !--v26 )
return 0i64;
}
v28 = (__int64)(v27 + 8);
LABEL_48:
if( *(_BYTE *)v28 == *(_BYTE *)OldSid )
{
v29 = *(unsigned __int8 *)(v28 + 1);
v30 = *((unsigned __int8 *)OldSid + 1);
if( (_BYTE)v29 == (_BYTE)v30 || v29 == v30 + 1 )
{
v31 = *(_DWORD *)(v28 + 2) - *(_DWORD *)((char *)OldSid + 2);
if( !v31 )
v31 = *(unsigned __int16 *)(v28 + 6) - *((unsigned __int16 *)OldSid + 3);
if( !v31 )
{
v32 = v8;
v33 = (UINT8 *)(v28 + 8);
if( !memcmp((PVOID)(v28 + 8), (char *)OldSid + 8, v32) )
{
memmove(v33, (UINT8 *)NewSid + 8, v32);
++*(_DWORD *)NumChanges;
}
}
}
}
goto LABEL_56;
}
return 0i64;
}
}
}
}
return result;
}Referenced by:
No references.