RtlDeleteAce
NTSTATUS __stdcall RtlDeleteAce(PACL Acl, UINT64 AceIndex){
VOID *v2;
unsigned int v4;
char v5;
PACL v6;
__int64 v7;
__int64 AclSize;
unsigned int v9;
unsigned int v10;
unsigned __int8 *v12;
unsigned __int8 v13;
__int64 v14;
VOID *FirstFree;
FirstFree = 0i64;
v4 = AceIndex;
RtlValidAcl(Acl, (VOID *)AceIndex, v2);
if( !v5 || v4 >= Acl->AceCount || !RtlFirstFreeAce(Acl, &FirstFree) )
return -1073741811;
v6 = Acl + 1;
if( v4 )
{
v7 = v4;
do
{
v6 = (PACL)((char *)v6 + v6->AclSize);
--v7;
}
while( v7 );
}
AclSize = v6->AclSize;
v9 = v6->AclSize;
v10 = (_DWORD)FirstFree - (_DWORD)v6;
if( (unsigned int)AclSize < (int)FirstFree - (int)v6 )
{
v12 = (unsigned __int8 *)v6 + AclSize;
do
{
v13 = *v12;
v14 = v9 - (unsigned int)AclSize;
++v9;
++v12;
*(&v6->AclRevision + v14) = v13;
}
while( v9 < v10 );
}
if( v10 - (unsigned int)AclSize < v10 )
memset((char *)v6 + v10 - (unsigned int)AclSize, 0i64, AclSize);
--Acl->AceCount;
return 0;
}Referenced by:
SepRemoveAceFromTokenDefaultDacl