//  --------------------------------------------------------------------------
//  Module Name: SystemSettings.h
//
//  Copyright (c) 1999-2000, Microsoft Corporation
//
//  A class to handle opening and reading/writing from the Winlogon key.
//
//  History:    1999-09-09  vtan        created
//              1999-11-16  vtan        separate file
//              2000-02-01  vtan        moved from Neptune to Whistler
//  --------------------------------------------------------------------------

#ifndef     _SystemSettings_
#define     _SystemSettings_

//  --------------------------------------------------------------------------
//  CSystemSettings
//
//  Purpose:    This class deals with system settings typically found in
//              HKLM\System or HKLM\Software
//
//  History:    1999-09-09  vtan        created
//              2000-04-12  vtan        consolidation for policy checking
//  --------------------------------------------------------------------------

class   CSystemSettings
{
    public:
        static  bool            IsSafeMode (void);
        static  bool            IsSafeModeMinimal (void);
        static  bool            IsSafeModeNetwork (void);
        static  bool            IsNetwareActive (void);
        static  bool            IsWorkStationProduct (void);
        static  bool            IsDomainMember (void);
        static  bool            IsActiveConsoleSession (void);
        static  bool            IsTerminalServicesEnabled (void);
        static  bool            IsFriendlyUIActive (void);
        static  bool            IsMultipleUsersEnabled (void);
        static  bool            IsRemoteConnectionsEnabled (void);
        static  bool            IsRemoteConnectionPresent (void);
        static  bool            IsShutdownWithoutLogonAllowed (void);
        static  bool            IsUndockWithoutLogonAllowed (void);
        static  bool            IsForceFriendlyUI (void);
        static  LONG            GetUIHost (TCHAR *pszPath);
        static  bool            IsUIHostStatic (void);
        static  bool            EnableFriendlyUI (bool fEnable);
        static  bool            EnableMultipleUsers (bool fEnable);
        static  bool            EnableRemoteConnections (bool fEnable);
        static  int             GetLoggedOnUserCount (void);
        static  NTSTATUS        CheckDomainMembership (void);
        static  DWORD   WINAPI  AdjustFUSCompatibilityServiceState (void *pV);
    private:
        static  LONG            GetEffectiveInteger (HKEY hKey, const TCHAR *pszKeyName, const TCHAR *pszPolicyKeyName, const TCHAR *pszValueName, int& iResult);
        static  LONG            GetEffectivePath (HKEY hKey, const TCHAR *pszKeyName, const TCHAR *pszPolicyKeyName, const TCHAR *pszValueName, TCHAR *pszPath);
        static  bool            IsProfessionalTerminalServer (void);
        static  bool            IsMicrosoftGINA (void);
        static  bool            IsSCMTerminalServicesDisabled (void);

        static  const TCHAR     s_szSafeModeKeyName[];
        static  const TCHAR     s_szSafeModeOptionValueName[];
        static  const TCHAR     s_szWinlogonKeyName[];
        static  const TCHAR     s_szSystemPolicyKeyName[];
        static  const TCHAR     s_szTerminalServerKeyName[];
        static  const TCHAR     s_szTerminalServerPolicyKeyName[];
        static  const TCHAR     s_szNetwareClientKeyName[];
        static  const TCHAR     s_szLogonTypeValueName[];
        static  const TCHAR     s_szBackgroundValueName[];
        static  const TCHAR     s_szMultipleUsersValueName[];
        static  const TCHAR     s_szDenyRemoteConnectionsValueName[];
        static  int             s_iIsSafeModeMinimal;
        static  int             s_iIsSafeModeNetwork;
};

#endif  /*  _SystemSettings_    */