//  --------------------------------------------------------------------------
//  Module Name: TokenGroups.h
//
//  Copyright (c) 1999-2000, Microsoft Corporation
//
//  Classes related to authentication for use in neptune logon
//
//  History:    1999-09-13  vtan        created
//              2000-02-01  vtan        moved from Neptune to Whistler
//  --------------------------------------------------------------------------

#ifndef     _TokenGroups_
#define     _TokenGroups_

//  --------------------------------------------------------------------------
//  CTokenGroups
//
//  Purpose:    This class creates a TOKEN_GROUPS struct for use in several
//              different security related functions such as for
//              secur32!LsaLogonUser which includes the owner SID as
//              well as the logon SID passed in.
//
//  History:    1999-08-17  vtan        created
//              1999-09-13  vtan        increased functionality
//              2000-02-01  vtan        moved from Neptune to Whistler
//  --------------------------------------------------------------------------

class   CTokenGroups
{
    public:
                                        CTokenGroups (void);
                                        ~CTokenGroups (void);

                const TOKEN_GROUPS*     Get (void)                                                  const;

                NTSTATUS                CreateLogonGroup (PSID pLogonSID);
                NTSTATUS                CreateAdministratorGroup (void);

        static  NTSTATUS                StaticInitialize (void);
        static  NTSTATUS                StaticTerminate (void);
    private:
        static  PSID                    s_localSID;
        static  PSID                    s_administratorSID;

                PTOKEN_GROUPS           _pTokenGroups;
};

#endif  /*  _TokenGroups_   */