RtlDeleteAce
NTSTATUS __stdcall RtlDeleteAce(PACL Acl, ULONG AceIndex){
PACL v4;
__int64 v5;
__int64 AclSize;
unsigned int v7;
unsigned int v8;
unsigned __int8 *v10;
unsigned __int8 v11;
__int64 v12;
PACE Ace;
Ace = 0i64;
if( !RtlValidAcl(Acl) || AceIndex >= Acl->AceCount || !RtlFirstFreeAce(Acl, (VOID **)&Ace) )
return -1073741811;
v4 = Acl + 1;
if( AceIndex )
{
v5 = AceIndex;
do
{
v4 = (PACL)((char *)v4 + v4->AclSize);
--v5;
}
while( v5 );
}
AclSize = v4->AclSize;
v7 = v4->AclSize;
v8 = (_DWORD)Ace - (_DWORD)v4;
if( (unsigned int)AclSize < (int)Ace - (int)v4 )
{
v10 = (unsigned __int8 *)v4 + AclSize;
do
{
v11 = *v10;
v12 = v7 - (unsigned int)AclSize;
++v7;
++v10;
*(&v4->AclRevision + v12) = v11;
}
while( v7 < v8 );
}
if( v8 - (unsigned int)AclSize < v8 )
memset((INT64)v4 + v8 - (unsigned int)AclSize, 0i64);
--Acl->AceCount;
return 0;
}Referenced by:
SepRemoveAceFromTokenDefaultDacl