SeValidSecurityDescriptor
INT8 __fastcall SeValidSecurityDescriptor(UINT64 a1, INT64 a2){
unsigned int v3;
__int64 v4;
VOID *v5;
int v6;
__int64 v7;
int v8;
__int64 v9;
VOID *v10;
_ACL *v11;
char v12;
__int64 v13;
unsigned int v15;
_ACL *v16;
VOID *AclSize;
char v18;
v3 = a1;
if( (unsigned int)a1 < 0x14 )
return 0;
if( *(_BYTE *)a2 != 1 )
return 0;
if( *(__int16 *)(a2 + 2) >= 0 )
return 0;
v4 = *(unsigned int *)(a2 + 4);
if( !(_DWORD)v4 )
return 0;
if( ((v4 + 3) & 0xFFFFFFFFFFFFFFFCui64) != v4 )
return 0;
if( (unsigned int)v4 > v3 )
return 0;
v5 = (VOID *)(v3 - (unsigned int)v4);
if( (unsigned int)v5 < 0xC )
return 0;
if( *(_BYTE *)(v4 + a2) != 1 )
return 0;
v6 = *(unsigned __int8 *)(v4 + a2 + 1);
if( (unsigned __int8)v6 > 0xFu )
return 0;
if( (unsigned int)v5 < 4 * v6 + 8 )
return 0;
v7 = *(unsigned int *)(a2 + 8);
if( (_DWORD)v7 )
{
if( ((v7 + 3) & 0xFFFFFFFFFFFFFFFCui64) != v7 )
return 0;
if( (unsigned int)v7 > v3 )
return 0;
v5 = (VOID *)(v3 - (unsigned int)v7);
if( (unsigned int)v5 < 0xC )
return 0;
if( *(_BYTE *)(v7 + a2) != 1 )
return 0;
v8 = *(unsigned __int8 *)(v7 + a2 + 1);
if( (unsigned __int8)v8 > 0xFu || (unsigned int)v5 < 4 * v8 + 8 )
return 0;
}
v9 = *(unsigned int *)(a2 + 16);
if( (_DWORD)v9 )
{
if( ((v9 + 3) & 0xFFFFFFFFFFFFFFFCui64) != v9 )
return 0;
if( (unsigned int)v9 > v3 )
return 0;
v10 = (VOID *)(v3 - (unsigned int)v9);
if( (unsigned int)v10 < 8 )
return 0;
v11 = (_ACL *)(a2 + v9);
if( (unsigned int)v10 < v11->AclSize )
return 0;
RtlValidAcl(v11, v10, v5);
if( !v12 )
return 0;
}
v13 = *(unsigned int *)(a2 + 12);
if( !(_DWORD)v13 )
return 1;
if( ((v13 + 3) & 0xFFFFFFFFFFFFFFFCui64) == v13
&& (unsigned int)v13 <= v3
&& (v15 = v3 - v13, v15 >= 8)
&& (v16 = (_ACL *)(a2 + v13), AclSize = (VOID *)v16->AclSize, v15 >= (unsigned int)AclSize)
&& (RtlValidAcl(v16, AclSize, v5), v18) )
{
return 1;
}
else
{
return 0;
}
}Referenced by:
EtwpGetGuidSecurityDescriptor
PiSwValidateCreateData
RtlNormalizeSecurityDescriptor
SepReadAndPopulateCapes
WmipSDRegistryQueryRoutine