Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

214 lines
4.9 KiB

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corp., 1991 **/
/**********************************************************************/
/*
lmorepld.hxx
Class declarations for the REPL_DIR_BASE class.
REPL_DIR_BASE is an abstract superclass that contains common methods
and data members shared between the REPL_EDIR_? and REPL_IDIR_?
classes.
The classes are structured as follows:
LOC_LM_OBJ
|
\---REPL_DIR_BASE
|
+---REPL_EDIR
| |
| \---REPL_EDIR_0
| |
| \---REPL_EDIR_1
| |
| \---REPL_EDIR_2
|
\---REPL_IDIR
|
\---REPL_IDIR_0
|
\---REPL_IDIR_1
FILE HISTORY:
KeithMo 20-Feb-1992 Created for the Server Manager.
*/
#ifndef _LMOREPLD_HXX_
#define _LMOREPLD_HXX_
#include "string.hxx"
#include "strlst.hxx"
#include "lmobj.hxx"
/*************************************************************************
NAME: REPL_DIR_BASE
SYNOPSIS: Abstract superclass for the Replicator Export/Import
Directory classes.
INTERFACE: REPL_DIR_BASE - Class constructor.
~REPL_DIR_BASE - Class destructor.
QueryDirName - Returns the directory name.
SetDirName - Sets the directory name.
QueryName - Returns the target server's name.
QueryReplInfoLevel - Returns the info-level this
object represents.
QueryReplBufferSize - Returns the size (in BYTEs) of
the info structure used by this
object.
PARENT: LOC_LM_OBJ
USES: NLS_STR
HISTORY:
KeithMo 20-Feb-1992 Created for the Server Manager.
**************************************************************************/
DLL_CLASS REPL_DIR_BASE : public LOC_LM_OBJ
{
private:
//
// These data members cache the values retrieved
// from the REPL_DIR_BASE_INFO_0 structure.
//
NLS_STR _nlsDirName;
//
// This is the API info-level this object represents.
//
UINT _nInfoLevel;
//
// This is the size of the NetReplXxx data structure
// used for this object. We need this so that we can
// put a common I_CreateNew method here and not sprinkle
// many copies around the class heirarchy.
//
UINT _cbBuffer;
//
// This is the "lock bias". This data member's initial
// value is zero. Everytime LockDirectory() is called,
// this value is incremented. Everytime UnlockDirectory()
// is called, this value is decremented. At I_WriteInfo()
// and I_WriteNew() time, this value is used to determine
// how many NetReplXxxDirLock() & NetReplXxxDirUnlock()
// APIs to invoke.
//
INT _nLockBias;
//
// This private virtual callback extracts & caches any
// data from an API buffer which must be "persistant".
//
virtual APIERR W_CacheApiData( const BYTE * pbBuffer ) = 0;
protected:
//
// These protected accessors should only be invoked
// by this class or derived subclasses.
//
APIERR SetDirName( const TCHAR * pszDirName );
//
// These methods access the current info-level.
//
UINT QueryReplInfoLevel( VOID ) const
{ return _nInfoLevel; }
VOID SetReplInfoLevel( UINT nInfoLevel )
{ _nInfoLevel = nInfoLevel; }
//
// These methods access the current buffer size.
//
UINT QueryReplBufferSize( VOID ) const
{ return _cbBuffer; }
VOID SetReplBufferSize( UINT cbBuffer )
{ _cbBuffer = cbBuffer; }
//
// This virtual callback is called by NEW_LM_OBJ to
// create a new object. This method will call the
// W_CreateNew helper, then initialize the API buffer.
// This method does not invoke any network API.
//
virtual APIERR I_CreateNew( VOID );
//
// This virtual helper is called by I_WriteInfo and
// I_WriteNew to setup the necessary data structures
// before the network API is invoked.
//
virtual APIERR W_Write( VOID ) = 0;
//
// Since this is an abstract superclass, its constructor
// is protected.
//
REPL_DIR_BASE( const TCHAR * pszServerName,
const TCHAR * pszDirName );
public:
~REPL_DIR_BASE( VOID );
//
// Accessor methods.
//
const TCHAR * QueryDirName( VOID ) const
{ return _nlsDirName.QueryPch(); }
INT QueryLockBias( VOID ) const
{ return _nLockBias; }
VOID SetLockBias( ULONG lLockBias )
{ _nLockBias = lLockBias; }
//
// Provide access to the target server's name.
//
const TCHAR * QueryName( VOID ) const
{ return LOC_LM_OBJ::QueryServer(); }
//
// Lock/Unlock the directory.
//
APIERR LockDirectory( VOID )
{ _nLockBias++; return NERR_Success; }
APIERR UnlockDirectory( VOID )
{ _nLockBias--; return NERR_Success; }
}; // class REPL_DIR_BASE
#endif // _LMOREPLD_HXX_