windows-nt/Source/XPSP1/NT/admin/netui/common/h/lmoshare.hxx
2020-09-26 16:20:57 +08:00

399 lines
12 KiB
C++

/**********************************************************************/
/** Microsoft NT Windows **/
/** Copyright(c) Microsoft Corp., 1991 **/
/**********************************************************************/
/*
* lmoshare.hxx
*
* This file contains the definitions for the share class objects.
*
* History
* t-yis 8/9/91 Created
* rustanl 8/27/91 Changed CloneFrom param from * to &
* terryk 10/07/91 type changes for NT
* terryk 10/21/91 type changes for NT
* Yi-HsinS 1/21/92 QueryPath return NULL
* when its contents is empty.
* Yi-HsinS 11/30/92 Added flag to SetWriteBuffer
*/
#ifndef _LMOSHARE_HXX_
#define _LMOSHARE_HXX_
#include "lmobj.hxx"
/*************************************************************************
NAME: SHARE
SYNOPSIS: Superclass for manipulation of share object
INTERFACE: PUBLIC:
QueryName
Returns the share name e.g. PUBLIC
QueryServer
Returns the name of the server the share is on
e.g. \\FOOBAR
Delete - defined as public in NEW_LM_OBJ
The interface to delete the share
PROTECTED:
I_Delete - redefined as protected in SHARE class
and will be called by Delete.
Do the actual work in deleting the share
SetName -
Set the share name
PARENT: LOC_LM_OBJ
USES: NLS_STR
CAVEATS:
NOTES: SetName() is protected in SHARE class and redefined
as public in SHARE_2 class so that only SHARE_2 objects
can set the share name for use when creating a new share.
HISTORY:
t-yis 8/9/91 Created
**************************************************************************/
DLL_CLASS SHARE : public LOC_LM_OBJ
{
private:
NLS_STR _nlsShareName;
protected:
APIERR W_CloneFrom( const SHARE & share );
APIERR W_CreateNew( VOID );
APIERR I_Delete( UINT usForce = 0 );
APIERR SetName( const TCHAR *pszShareName );
public:
SHARE( const TCHAR *pszShareName,
const TCHAR *pszServerName = NULL,
BOOL fValidate = TRUE );
~SHARE();
// Need to add macro to check if the share object is in valid state
// before querying the data members
const TCHAR *QueryName( VOID ) const
{ return _nlsShareName.QueryPch(); }
// QueryServer() defined in LOC_LM_OBJ is protected,
// make it public here so that we can use it.
const TCHAR *QueryServer( VOID ) const
{ return LOC_LM_OBJ::QueryServer(); }
};
/*************************************************************************
NAME: SHARE_1
SYNOPSIS: SHARE_1 does not support WriteNew since
the API does not support level 1 NetShareAdd.
INTERFACE: In addition to the interface of SHARE, SHARE_1 also support
the following:
PUBLIC:
GetInfo
Retrieves info about the share, returns a standard
error code.
WriteInfo
Writes the current state of the object to the
API. This write is atomic, either all
parameters are set or none are set.
CloneFrom
Makes this SHARE_1 instance an exact copy of the
parameter SHARE_1 instance. All fields including
name and state will be copied. If this operation
fails, the object will be invalid. The parameter
must be a SHARE_1 and not a subclass of SHARE_1.
QueryResourceType
Returns the type of the shared resource,
disk, printer queue ...
QueryComment
Returns the comment set for the share
IsAdminOnly
TRUE is the share can be access only by administrator
or server operator
IsDiskDirectory
TRUE if the share is a disk directory
IsPrinterQueue
TRUE if the share is a printer queue
IsCommDevice
TRUE if the share is a communication device
IsIPC
TRUE if the share is a interprocess communication
SetComment
Set the comment of the share
PROTECTED:
I_GetInfo
Actual function to get the information about the
share. Called by GetInfo defined in NEW_LM_OBJ.
I_WriteInfo
Actual function to write the information about the
share. Called by WriteInfo defined in NEW_LM_OBJ.
SetResourceType
Set the resource type of the share
PARENT: SHARE
USES: NLS_STR
CAVEATS: (internal) The fields with appear as both data members
and in the API buffer should be accessed only through
the access methods. The API buffer is not updated until
WriteInfo/WriteNew. This allows subclasses to use the
same accessors.
NOTES: SetResourceType() is protected since only SHARE_2 object
can be used in creating a new share.
HISTORY:
t-yis 8/9/91 Created
**************************************************************************/
DLL_CLASS SHARE_1 : public SHARE
{
private:
UINT _uResourceType;
BOOL _fAdminOnly;
NLS_STR _nlsComment;
protected:
APIERR W_CloneFrom( const SHARE_1 & share1 );
APIERR W_CreateNew( VOID );
virtual APIERR I_GetInfo( VOID );
virtual APIERR I_WriteInfo( VOID );
APIERR SetResourceType( UINT uResourceType );
VOID SetAdminOnly( BOOL fAdminOnly )
{ _fAdminOnly = fAdminOnly; }
public:
SHARE_1( const TCHAR *pszShareName,
const TCHAR *pszServerName = NULL,
BOOL fValidate = TRUE );
~SHARE_1();
APIERR CloneFrom( const SHARE_1 & share1 );
// Need to add macro to check if the share object is in valid state
// before querying the data members
UINT QueryResourceType( VOID ) const
{ return _uResourceType; }
const TCHAR *QueryComment( VOID ) const
{ return _nlsComment.QueryPch(); }
BOOL IsAdminOnly( VOID ) const
{ return _fAdminOnly; }
BOOL IsDiskDirectory( VOID ) const
{ return (QueryResourceType() == STYPE_DISKTREE); }
BOOL IsPrinterQueue( VOID ) const
{ return (QueryResourceType() == STYPE_PRINTQ); }
BOOL IsCommDevice( VOID ) const
{ return (QueryResourceType() == STYPE_DEVICE); }
BOOL IsIPC( VOID ) const
{ return (QueryResourceType() == STYPE_IPC); }
APIERR SetComment( const TCHAR *pszComment );
};
/*************************************************************************
NAME: SHARE_2
SYNOPSIS: SHARE_2 must be used whenever the user wants to use
WriteNew.
INTERFACE: In addition to the interface of SHARE_1, SHARE_2 also
supports the following:
GetInfo
Retrieves info about the share, returns a standard
error code.
WriteInfo
Writes the current state of the object to the
API.
CreateNew
Sets up the SHARE_2 object with default values in
preparation for a call to WriteNew
WriteNew
Adds a new share
CloneFrom
Makes this SHARE_2 instance an exact copy of the
parameter SHARE_2 instance. All fields including
name and state will be copied. If this operation
fails, the object will be invalid. The parameter
must be a SHARE_2 and not a subclass of SHARE_2.
QueryPermissions
Returns the permissions to the share. This value
is ignored when the server has user-level security.
QueryMaxUses
Returns the maximum number of concurrent connections
that the share can accommodate.
QueryCurrentUses
Returns the number of connections to the share.
QueryPath
Returns the local pathname for the share.
QueryPassword
Returns the share's password. This value is ignored
when the server has user-level security.
IsPermReadOnly
Returns true if the share has RX permissions
IsPermModify
Returns true if the share has RWXCDA permissions
SetPermissions
Set the permissions of the share. This value is ignored
when the server is running user-level security.
SetMaxUses
Set the maximum number of concurrent connections allowed
for the share.
SetPath
Set the actual local path for the share.
SetPassword
Set the password for the share. This value is ignored
when the server is running share-level security.
SetResourceType ( inherited from SHARE_1 )
Set the type of the share, disk dir, printer queue...
SetName ( inherited from SHARE )
Set the share name for use in creating a new share
PROTECTED:
I_GetInfo
Actual function for getting the information about
the share. Called by GetInfo.
I_WriteInfo
Actual function for writing the information about
the share. Called by WriteInfo.
I_CreateNew
Actual function for defining a new share object.
Called by CreateNew.
I_WriteNew
Actual function for actually creating a new share.
Called by WriteNew.
SetCurrentUses
Set the current number of connections. Defined because
of parallelism with QueryCurrentUses. It is protected
so only member functions can use it. This value is
ignored when WriteNew/WriteInfo.
PARENT: SHARE_1
USES: NLS_STR
HISTORY:
t-yis 8/9/91 Created
**************************************************************************/
DLL_CLASS SHARE_2: public SHARE_1
{
private:
UINT _fs2lPermissions;
UINT _uMaxUses;
UINT _uCurrentUses;
NLS_STR _nlsPath;
NLS_STR _nlsPassword;
protected:
APIERR W_CloneFrom( const SHARE_2 & share2 );
APIERR W_CreateNew( VOID );
virtual APIERR I_GetInfo( VOID );
virtual APIERR I_WriteInfo( VOID );
virtual APIERR I_CreateNew( VOID );
virtual APIERR I_WriteNew( VOID );
APIERR SetWriteBuffer( BOOL fNew ); // helper for I_WriteInfo and I_WriteNew
APIERR SetCurrentUses( UINT uCurrentUses );
public:
SHARE_2( const TCHAR *pszShareName,
const TCHAR *pszServerName = NULL,
BOOL fValidate = TRUE );
~SHARE_2();
APIERR CloneFrom( const SHARE_2 & share2 );
UINT QueryPermissions( VOID ) const
{ return _fs2lPermissions; }
UINT QueryMaxUses( VOID ) const
{ return _uMaxUses; }
UINT QueryCurrentUses( VOID ) const
{ return _uCurrentUses; }
const TCHAR *QueryPath( VOID ) const
{ return ( (_nlsPath.QueryTextLength() == 0 )
? NULL : _nlsPath.QueryPch());
}
const TCHAR *QueryPassword( VOID ) const
{ return _nlsPassword.QueryPch(); }
BOOL IsPermReadOnly( VOID ) const
{ return ( (QueryPermissions() & ACCESS_ALL) ==
(ACCESS_READ | ACCESS_EXEC)); }
BOOL IsPermModify( VOID ) const
{ return ( (QueryPermissions() & ACCESS_ALL) ==
(ACCESS_ALL | ~ACCESS_PERM)); }
inline APIERR SetName( const TCHAR *pszShareName )
{ return SHARE::SetName( pszShareName ); }
inline APIERR SetResourceType( UINT uResourceType )
{ return SHARE_1::SetResourceType( uResourceType ); }
APIERR SetPermissions( UINT fs2lPermissions );
APIERR SetMaxUses( UINT uMaxUses );
APIERR SetPath( const TCHAR *pszPath );
APIERR SetPassword( const TCHAR *pszPassword );
};
#endif