SepMakeTokenEffectiveOnly
VOID __stdcall SepMakeTokenEffectiveOnly(_TOKEN *Token){
unsigned __int64 Enabled;
unsigned int v2;
unsigned int UserAndGroupCount;
_SID_AND_ATTRIBUTES *UserAndGroups;
unsigned int DefaultOwnerIndex;
unsigned int IntegrityLevelIndex;
Enabled = Token->Privileges.Enabled;
v2 = 1;
Token->Privileges.Present &= Enabled;
Token->Privileges.EnabledByDefault &= Enabled;
UserAndGroupCount = Token->UserAndGroupCount;
if( UserAndGroupCount > 1 )
{
do
{
UserAndGroups = Token->UserAndGroups;
if( (UserAndGroups[v2].Attributes & 0x34) != 0 )
{
++v2;
}
else
{
DefaultOwnerIndex = Token->DefaultOwnerIndex;
if( v2 == DefaultOwnerIndex )
{
Token->DefaultOwnerIndex = 0;
DefaultOwnerIndex = 0;
}
IntegrityLevelIndex = Token->IntegrityLevelIndex;
if( v2 == IntegrityLevelIndex )
{
Token->IntegrityLevelIndex = -1;
IntegrityLevelIndex = -1;
}
if( --UserAndGroupCount == IntegrityLevelIndex )
Token->IntegrityLevelIndex = v2;
if( UserAndGroupCount == DefaultOwnerIndex )
Token->DefaultOwnerIndex = v2;
UserAndGroups[v2] = UserAndGroups[UserAndGroupCount];
}
}
while( v2 < UserAndGroupCount );
}
Token->UserAndGroupCount = UserAndGroupCount;
}Referenced by:
SepDuplicateToken