SepExpandDynamic
NTSTATUS __stdcall SepExpandDynamic(_TOKEN *Token, UINT64 NewLength){
int v3;
size_t v4;
_ACL *DefaultDacl;
VOID **PoolWithTag;
unsigned int *v7;
unsigned int *DynamicPart;
_ACL *v9;
v3 = NewLength;
v4 = Token->DynamicAvailable + 8 + 4 * *((unsigned __int8 *)Token->PrimaryGroup + 1);
DefaultDacl = Token->DefaultDacl;
if( DefaultDacl )
v4 += DefaultDacl->AclSize;
if( (unsigned int)NewLength <= v4 )
return 0;
PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)NewLength, 1683252563i64);
v7 = (unsigned int *)PoolWithTag;
if( PoolWithTag )
{
DynamicPart = Token->DynamicPart;
memmove(PoolWithTag, DynamicPart, v4);
v9 = Token->DefaultDacl;
Token->DynamicAvailable += v3 - v4;
Token->DynamicPart = v7;
if( v9 )
Token->DefaultDacl = (_ACL *)((char *)v7 + (char *)v9 - (char *)DynamicPart);
Token->PrimaryGroup = (char *)Token->PrimaryGroup + (char *)v7 - (char *)DynamicPart;
ExFreePoolWithTag(DynamicPart, 0);
return 0;
}
return -1073741670;
}Referenced by:
NtSetInformationToken
SepAppendAceToTokenDefaultDacl