|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/
/*
lhourset.hxx An encapsulation of the logon hours control setting
This file provides communication between the USER class of LMOBJ and the LOGON_HOURS_CONTROL class of BLTCC.
FILE HISTORY: beng 06-May-1992 Created (from lmouser.hxx)
*/
#ifndef _LHOURSET_HXX_
#define _LHOURSET_HXX_
#include "base.hxx"
#include "uibuffer.hxx"
// needed for clients who must bind at compile-time rather than link-time
// clients should use cDaysPerWeek etc. when possible
//
#define HOURS_PER_DAY (24)
#define DAYS_PER_WEEK (7)
#define HOURS_PER_WEEK (HOURS_PER_DAY * DAYS_PER_WEEK)
#define MINUTES_PER_HOUR (60)
#define MINUTES_PER_WEEK (MINUTES_PER_HOUR * HOURS_PER_WEEK)
/*************************************************************************
NAME: LOGON_HOURS_SETTING
SYNOPSIS: Helper class for USER_11 to manage logon hours settings
This class help manage the 7 * 24 (hours/week) packed bit field which the LanMan API uses to represent logon hours settings. LOGON_HOURS_SETTING should not be confused with the BLT Logon Hours custom control, this class is more like a collection.
INTERFACE: Construct with initial setting, or no parameters for new user default.
SetFromBits(): Set the logon hours setting. Pass the number of bits in the bit block (should be uHoursPerWeek).
SetFromBytes(): Set the logon hours setting. Pass the number of bytes in the bytes block (should be uHoursPerWeek/8).
PermitAll(): Permit logon at any time. MakeDefault(): Revert to new user default. Default is UnitsPerWeek == HoursPerWeek and all hours set.
QueryHoursBlock(): Returns the logon hours setting in byte block format (BYTE *). Note that the return value is not const; it is permitted to modify this value directly, which in turn modifies the LOGON_HOURS_SETTING directly. This pointer ceases to be valid when the LOGON_HOURS_SETTING is destructed.
QueryUnitsPerWeek(): Returns the number of bits in the QueryHoursBlock block.
QueryByteCount(): Returns the number of bytes in the QueryHoursBlock block.
IsEditableUnitsPerWeek(): Returns TRUE iff a logon hours block with this unitsPerWeek value is valid for the QueryHour and SetHour APIs.
QueryHourInWeek(): QueryHourInDay(): Determines whether an individual hour is enabled. Only valid if IsEditableUnitsPerWeek.
SetHourInWeek(): SetHourInDay(): Changes whether an individual hour is enabled. Only valid if IsEditableUnitsPerWeek.
IsIdentical(): IsIdenticalToBits(): IsIdenticalToBytes(): operator==(): Returns TRUE iff the setting is identical to the parameter setting, where the parameter may be another LOGON_HOURS_SETTING, or a logon hours setting in byte string format. In the IsIdenticalToBits and Bytes forms, extra bits in the last byte must be 0.
ConvertToHoursPerWeek Converts a LOGON_HOUR_SETTING in DaysPerWeek format into HoursPerWeek format. Will not convert from MinutesPerWeek or any other format. ConvertToGMT Rotate the logonhours to GMT ConvertFromGMT Rotate the logonhours from GMT
NOTES: The UnitsPerWeek setting is required to always be uHoursPerWeek, or 7*24 (168). We do not even remember this value, instead we just assert out if it is wrong. Similarly, the count of bytes is expected to always be uHoursPerWeek / 8, or 21.
PARENT: BASE
USES: BUFFER
HISTORY: jonn 12/11/91 Created beng 06-May-1992 Religious whitespace/naming delta beng 06-Jul-1992 Tinker the consts to make it work in a DLL KeithMo 25-Aug-1992 Changed consts to enum to quite linker.
**************************************************************************/
DLL_CLASS LOGON_HOURS_SETTING : public BASE { private: UINT _cUnitsPerWeek; BUFFER _buf;
static UINT QueryByteCount( UINT unitsperweek ) { return (unitsperweek + 7) / 8; }
public: enum { cHoursPerDay = HOURS_PER_DAY, cDaysPerWeek = DAYS_PER_WEEK, cHoursPerWeek = HOURS_PER_WEEK, cMinutesPerHour = MINUTES_PER_HOUR, cMinutesPerWeek = MINUTES_PER_WEEK };
LOGON_HOURS_SETTING( const BYTE * pLogonHours = NULL, UINT unitsperweek = HOURS_PER_WEEK ); LOGON_HOURS_SETTING( const LOGON_HOURS_SETTING & lhours ); ~LOGON_HOURS_SETTING();
static BOOL IsEditableUnitsPerWeek( UINT cUnitsperweek ) { return ( cUnitsperweek == cHoursPerWeek ); }
static BOOL IsConvertibleUnitsPerWeek( UINT cUnitsperweek ) { return ( (cUnitsperweek == cHoursPerWeek) || (cUnitsperweek == cDaysPerWeek) ); }
APIERR SetFromBits( const BYTE * pLogonHours, UINT cUnitsperweek ); APIERR SetFromBytes( const BYTE * pb, UINT cb ) { return SetFromBits( pb, cb * 8 ); } APIERR Set( const LOGON_HOURS_SETTING & lhours ) { return SetFromBits( lhours.QueryHoursBlock(), lhours.QueryUnitsPerWeek() ); }
APIERR PermitAll(); APIERR MakeDefault();
BYTE * QueryHoursBlock() const { return _buf.QueryPtr(); } UINT QueryUnitsPerWeek() const { return _cUnitsPerWeek; } UINT QueryByteCount() const { return QueryByteCount( QueryUnitsPerWeek() ); }
// only valid for editable UnitsPerWeek values
BOOL QueryHourInWeek( UINT hourinweek ) const; BOOL QueryHourInDay( UINT hourinday, UINT dayinweek ) const;
// only valid for editable UnitsPerWeek values
APIERR SetHourInWeek( BOOL fLogonAllowed, UINT hourinweek ); APIERR SetHourInDay( BOOL fLogonAllowed, UINT hourinday, UINT dayinweek );
// only valid for editable UnitsPerWeek values
BOOL IsIdenticalToBits( const BYTE * pbLogonHours, UINT unitsperweek ) const; BOOL IsIdenticalToBytes( const BYTE * pb, UINT cb ) const { return IsIdenticalToBits( pb, cb * 8 ); } BOOL IsIdentical( const LOGON_HOURS_SETTING & lhours ) const { return IsIdenticalToBits( lhours.QueryHoursBlock(), lhours.QueryUnitsPerWeek() ); } BOOL operator==( const LOGON_HOURS_SETTING & lhours ) const { return IsIdentical( lhours ); }
APIERR ConvertToHoursPerWeek();
BOOL ConvertToGMT(); BOOL ConvertFromGMT(); };
#endif // end of file - _LHOURSET_HXX_
|