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