399 lines
12 KiB
C++
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
|