/**********************************************************************/ /** Microsoft LAN Manager **/ /** Copyright(c) Microsoft Corp., 1990 **/ /**********************************************************************/ /* * History * chuckc 12/7/90 Created * rustanl 1/24/91 Moved lmodev enumerations here from * lmodev.hxx. * chuckc 3/1/91 coderev changes from 2/28/91 * (chuckc, rustanl, johnl, annmc, jonshu) * jonn 7/26/91 Created NEW_LM_OBJ * jonn 8/06/91 Updated to latest NEW_LM_OBJ spec * jonn 8/12/91 Code review changes * rustanl 21-Aug-1991 Changed BufferQuery[...] methods to * QueryBuffer[...], and BufferResize to * ResizeBuffer. * rustanl 8/26/91 Changed [W_]CloneFrom parameter from * to & * jonn 8/29/91 Added ChangeToNew() * jonn 9/05/91 Added IsOKState() and IsConstructedState() * terryk 9/09/91 Added QueryDomain() to LOC_LM_OBJ * jonn 9/17/91 Moved CHECK_OK / CHECK_VALID strings to static * terryk 9/19/91 Added SetLoc() to LOC_LM_OBJ * terryk 10/07/91 Type changes for NT * terryk 10/17/91 Remove Buffer object and add * SetBufferPtr and SetBufferPtrSize * terryk 10/21/91 Type changes for NT * KeithMo 10/23/91 Added forward references. * jonn 10/31/91 Use MNET memory primitives * jonn 05/08/92 Added ClearBuffer() * jonn 05/19/92 Added LMO_DEV_ALLDEVICES * KeithMo 07/17/92 Added QueryDisplayName() to LOC_LM_OBJ. * Yi-HsinS08/21/92 Added _fValidate, IsValidationOn, * and SetValidation to LM_OBJ_BASE */ #ifndef _LMOBJ_HXX_ #define _LMOBJ_HXX_ #include "base.hxx" #include "uibuffer.hxx" #include "lmoloc.hxx" /* * possible states for an object to be in */ enum LMO_STATE { LMOBJ_UNCONSTRUCTED, LMOBJ_CONSTRUCTED, LMOBJ_VALID, LMOBJ_INVALID, LMOBJ_NEW }; // Some enumerations used in lmodev and also in the DEVICE_COMBO class // in BLT. enum LMO_DEVICE { LMO_DEV_ERROR, LMO_DEV_DISK, LMO_DEV_PRINT, LMO_DEV_COMM, LMO_DEV_ANY }; // enum lMO_DEVICE enum LMO_DEV_USAGE { LMO_DEV_CANCONNECT, LMO_DEV_CANDISCONNECT, LMO_DEV_ISCONNECTED, LMO_DEV_ALLDEVICES, LMO_DEV_ALLDEVICES_DEFZ // used by DEVICE_COMBO to set default // entry to the last in list. Gets // mapped to LMO_DEV_ALLDEVICES when // passed into DEVICE class. }; // // Forward references. // DLL_CLASS LM_OBJ_BASE; DLL_CLASS LM_OBJ; DLL_CLASS NEW_LM_OBJ; DLL_CLASS LOC_LM_OBJ; /**********************************************************\ NAME: LM_OBJ_BASE SYNOPSIS: LM_OBJ_BASE provides the base accessors shared by the LM_OBJ and NEW_LM_OBJ lan manager object hierarchies. INTERFACE: Accessors to test current state: IsUnconstructed() IsConstructed() IsValid() IsInvalid() Accessors to change current state: MakeUnconstructed() MakeConstructed() MakeValid() MakeInvalid() PARENT: CAVEATS: Do not instantiate LM_OBJ_BASE, use LM_OBJ or NEW_LM_OBJ instead. NOTES: Note that the NEW state is only accessible from NEW_LM_OBJ and its derived classes HISTORY: chuckc 12/7/90 Created jonn 7/24/91 NEW_LM_OBJ \**********************************************************/ DLL_CLASS LM_OBJ_BASE : virtual public ALLOC_BASE { friend class LM_OBJ; friend class NEW_LM_OBJ; private: enum LMO_STATE _usState ; BOOL _fValidate; BOOL IsUnconstructed() const {return(_usState==LMOBJ_UNCONSTRUCTED);} BOOL IsConstructed() const {return(_usState==LMOBJ_CONSTRUCTED);} BOOL IsValid() const {return(_usState==LMOBJ_VALID);} BOOL IsInvalid() const {return(_usState==LMOBJ_INVALID);} VOID MakeUnconstructed() {_usState=LMOBJ_UNCONSTRUCTED;} VOID MakeConstructed() {_usState=LMOBJ_CONSTRUCTED;} VOID MakeValid() {_usState=LMOBJ_VALID;} VOID MakeInvalid() {_usState=LMOBJ_INVALID;} protected: LM_OBJ_BASE( BOOL fValidate = TRUE ) { MakeConstructed(); _fValidate = fValidate; } public: BOOL IsValidationOn( VOID ) { return _fValidate; } VOID SetValidation( BOOL fValidate = TRUE ) { _fValidate = fValidate; } }; /**********************************************************\ NAME: LM_OBJ SYNOPSIS: old-style lan manager object class INTERFACE: QueryName() - returns a name whose type depends on the subclass, e.g. a user name, a server name, etc. GetInfo() - pure virtual function WriteInfo() - pure virtual function PARENT: LM_OBJ_BASE CAVEATS: LM_OBJ is a pure virtual class, and only derived classes can be instantiated. HISTORY: chuckc 12/7/90 Created jonn 7/24/91 NEW_LM_OBJ \**********************************************************/ DLL_CLASS LM_OBJ : public LM_OBJ_BASE { protected: virtual APIERR ValidateName() {return(NERR_Success);} BOOL IsUnconstructed() const {return LM_OBJ_BASE::IsUnconstructed();} BOOL IsConstructed() const {return LM_OBJ_BASE::IsConstructed();} BOOL IsValid() const {return LM_OBJ_BASE::IsValid();} BOOL IsInvalid() const {return LM_OBJ_BASE::IsInvalid();} VOID MakeUnconstructed() {LM_OBJ_BASE::MakeUnconstructed();} VOID MakeConstructed() {LM_OBJ_BASE::MakeConstructed();} VOID MakeValid() {LM_OBJ_BASE::MakeValid();} VOID MakeInvalid() {LM_OBJ_BASE::MakeInvalid();} public: /* inherited from LM_OBJ_BASE */ virtual const TCHAR * QueryName() const = 0 ; virtual APIERR GetInfo() = 0 ; virtual APIERR WriteInfo() = 0 ; } ; /**********************************************************\ NAME: NEW_LM_OBJ SYNOPSIS: revised lan manager object class INTERFACE: Accessors to test current state: IsOKState() -- public method which returns whether the object is in a state acceptable for accessors. Currently VALID and NEW are acceptable. IsNew() -- private method Accessors to change current state: MakeNew() -- private method QueryName() - returns a name whose type depends on the subclass, e.g. a user name, a server name, etc. Do not use unless redefined. Do not use these methods unless the corresponding I_ methods have been redefined GetInfo() - Get information on the object WriteInfo() - Write information on existing object CreateNew() - Set up default new object WriteNew() - Create new object Write() - Either writes information on existing object or creates new object, depending on whether the object is believed to already exist. Delete() - Delete exising object. See the specific subclass for the interpretation of usForce. ChangeToNew() - Transforms an existing object from state VALID to state NEW. Redefine these protected methods to make the corresponding public methods available I_GetInfo() - Get information on the object I_WriteInfo() - Write information on existing object I_CreateNew() - Set up default new object I_WriteNew() - Create new object I_Delete() - Delete exising object. See the specific subclass for the interpretation of usForce. I_ChangeToNew() - Transforms an existing object from state VALID to state NEW. Internal protected methods W_CloneFrom() - worker function for CloneFrom() W_CreateNew() - worker function for I_CreateNew() W_ChangeToNew() - worker function for I_ChangeToNew() FixupPointer() - Helper routine to translate pointers embedded in copied API buffers. QueryName() - Do not use unless redefined PARENT: LM_OBJ_BASE USES: BUFFER HISTORY: jonn 7/24/91 NEW_LM_OBJ jonn 8/06/91 Revised to NEW_LM_OBJ spec jonn 10/31/91 Use MNET memory primitives jonn 05/08/92 Added ClearBuffer() \**********************************************************/ DLL_CLASS NEW_LM_OBJ : public BASE, public LM_OBJ_BASE { private: // // This buffer stores the API buffer for all subclasses // BYTE *_pBuf; BOOL IsNew() const {return(_usState==LMOBJ_NEW);} VOID MakeNew() {_usState=LMOBJ_NEW;} protected: virtual APIERR I_GetInfo(); virtual APIERR I_WriteInfo(); virtual APIERR I_CreateNew(); virtual APIERR I_WriteNew(); virtual APIERR I_Delete( UINT usForce ); virtual APIERR I_ChangeToNew(); APIERR W_CloneFrom( const NEW_LM_OBJ & lmobj ); virtual APIERR W_CreateNew(); virtual APIERR W_ChangeToNew(); VOID FixupPointer( TCHAR ** ppchar, const NEW_LM_OBJ * plmobjOld ); VOID ReportError( APIERR err ) { BASE::ReportError( err ); MakeUnconstructed(); } BYTE * QueryBufferPtr() const { return _pBuf; } UINT QueryBufferSize() const; VOID SetBufferPtr( BYTE * pBuffer ); APIERR ResizeBuffer( UINT cbNewRequestedSize ); APIERR ClearBuffer(); inline BOOL IsOKState() const { return ( IsValid() || IsNew() ); } public: NEW_LM_OBJ( BOOL fValidate = TRUE ); ~NEW_LM_OBJ(); virtual const TCHAR * QueryName() const; APIERR GetInfo(); APIERR WriteInfo(); APIERR CreateNew(); APIERR WriteNew(); APIERR Write(); APIERR Delete( UINT usForce = 0 ); APIERR ChangeToNew(); } ; /**********************************************************\ NAME: LOC_LM_OBJ SYNOPSIS: revised lan manager object class with implicit LOCATION PARENT: NEW_LM_OBJ USES: LOCATION HISTORY: jonn 7/26/91 Created \**********************************************************/ DLL_CLASS LOC_LM_OBJ : public NEW_LM_OBJ { private: void CtAux( void ); // constructor helper routine // // This buffer stores the object location // LOCATION _loc; protected: APIERR W_CloneFrom( const LOC_LM_OBJ & lmobj ); const TCHAR * QueryServer() const { return _loc.QueryServer(); } const TCHAR * QueryDomain() const { return _loc.QueryDomain(); } APIERR SetLoc( const TCHAR * pszLocation ) { return _loc.Set( pszLocation ); } APIERR QueryDisplayName( NLS_STR * pnls ) const { return _loc.QueryDisplayName( pnls ); } public: // _loc must construct successfully LOC_LM_OBJ( const TCHAR * pszLocation = NULL, BOOL fValidate = TRUE ); LOC_LM_OBJ( enum LOCATION_TYPE loctype, BOOL fValidate = TRUE ); LOC_LM_OBJ( const LOCATION & loc, BOOL fValidate = TRUE ); ~LOC_LM_OBJ() {} } ; // Macro used in the implementation of the various LMOBJ classes // This should only be used in the old LM_OBJ hierarchy #define CHECK_VALID( default_ret_val ) \ { \ if ( !IsValid() ) \ { \ UIASSERT( FALSE ); \ return default_ret_val; \ } \ } // This should only be used in the NEW_LM_OBJ hierarchy #define CHECK_OK( default_ret_val ) \ { \ if ( !IsOKState() ) \ { \ UIASSERT( FALSE ); \ return default_ret_val; \ } \ } #endif // _LMOBJ_HXX_