/**********************************************************************/ /** Microsoft Windows NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/ /* * sharebas.hxx * This file contains the Base Classes of the Share Dialogs in * File Manager Extensions. * * The hierarchy of Share Dialogs is as follows: * * SHARE_DIALOG_BASE // in this file * ADD_SHARE_DIALOG_BASE // in sharecrt.hxx * FILEMGR_NEW_SHARE_DIALOG // in sharecrt.hxx * SVRMGR_NEW_SHARE_DIALOG // in sharecrt.hxx * SVRMGR_SHARE_PROP_DIALOG // in sharecrt.hxx * FILEMGR_SHARE_PROP_DIALOG // in sharecrt.hxx * * VIEW_SHARE_DIALOG_BASE // in sharestp.hxx * STOP_SHARING_DIALOG // in sharestp.hxx * SHARE_MANAGEMENT_DIALOG // in sharemgt.hxx * * SHARE_LEVEL_PERMISSIONS_DIALOG // in this file * CURRENT_USERS_WARNING_DIALOG // in sharestp.hxx * * PERMISSION_GROUP // in this file * * The following are some miscellaneous classes used. * SHARE_NAME_WITH_PATH_ENUM_ITER // in this file * * The following class are used to manipulate path names. * SHARE_NET_NAME // in this file * * FILE HISTORY: * Yi-HsinS 8/15/91 Created * Yi-HsinS 11/15/91 Changed all USHORT to UINT * Yi-HsinS 12/5/91 Separated FULL_SHARE_NAME, UNC_NAME, * RELATIVE_PATH_NAME into netname.hxx * and combine them into NET_NAME * Yi-HsinS 12/15/91 Added SHARE_NET_NAME * Yi-HsinS 12/18/91 Make destructor of SHARE_PROPERTIES_BASE * virtual * Yi-HsinS 12/31/91 Unicode work - move ADMIN_SHARE to * strchlit.hxx * Yi-HsinS 1/8/92 Moved SHARE_PROPERTIES_BASE to * sharewnp.hxx * Terryk 4/17/92 Changed User limit from long to ulong * Yi-HsinS 8/3/92 Rearrange the hierarchy again to match * Winball dialogs * Yi-HsinS 10/9/92 Add ulHelpContextBase to * SHARE_DIALOG_BASE * Yi-HsinS 11/20/92 Remove _sltAdminInfo * ChuckC 31/1/93 Moved SERVER_WITH_PASSWORD_PROMPT to * aprompt.hxx */ #ifndef _SHAREBAS_HXX_ #define _SHAREBAS_HXX_ #include // for SHARE2_ENUM_ITER #include // for SERVER_2 #include // for NET_NAME #include // for OS_SECURITY_DESCRIPTOR #include // for SLE_STRIP #include // SERVER_WITH_PASSWORD_PROMPT #define SHARE_NAME_LENGTH LM20_NNLEN // vs. NNLEN #define SHARE_COMMENT_LENGTH LM20_MAXCOMMENTSZ // vs. MAXCOMMENTSZ #define LANMAN_USERS_MAX 0xFFFE // Down-level Servers // NOTE : There are some problems on what structure to send from // WIN16 to NT servers or OS2 servers. For now, just assume that the // maximum user limit that can be set on WIN16 to NT servers // are the same as to OS2 servers. #ifndef WIN32 #define NT_USERS_MAX LANMAN_USERS_MAX #else #define NT_USERS_MAX 0xFFFFFFFE // NT Servers #endif /************************************************************************* NAME: SHARE_DIALOG_BASE SYNOPSIS: The base class for new share dialogs and share properties dialog contained in the file manager or server manager. It contains the magic group for User Limit, SLE for Comment field, SLE for the path, the OK, Cancel, Permissions button and an SLT for showing admin information. INTERFACE: SHARE_DIALOG_BASE() - Constructor ~SHARE_DIALOG_BASE() - Destructor QueryPBOK() - Return a pointer to the OK button QueryPBCancel() - Return a pointer to the Cancel button QueryPBPermissions() - Return a pointer to the Permission button QueryServer2() - Return the SERVER_WITH_PASSWORD_PROMPT object. Pure virtual method to be defined in the derived classes. QueryShare() - Query the name of the share in the dialog This is a pure virtual method to be defined in the derived classes. PARENT: DIALOG_WINDOW USES: SLE, SLT, MAGIC_GROUP, SPIN_SLE_NUM, SPIN_GROUP, PUSH_BUTTON CAVEATS: NOTES: HISTORY: Yi-HsinS 8/25/91 Created Yi-HsinS 4/20/92 Got rid of uiSpecialUserLimit **************************************************************************/ class SHARE_DIALOG_BASE : public DIALOG_WINDOW { private: SLE _slePath; SLE _sleComment; MAGIC_GROUP _mgrpUserLimit; SPIN_SLE_NUM _spsleUsers; SPIN_GROUP _spgrpUsers; PUSH_BUTTON _buttonOK; PUSH_BUTTON _buttonCancel; PUSH_BUTTON _buttonPermissions; // Below are stored information for share permissions on NT OS_SECURITY_DESCRIPTOR *_pStoredSecDesc; BOOL _fSecDescModified; // Below are stored information for share permissions on // LM share-level server NLS_STR _nlsStoredPassword; UINT _uiStoredPermissions; // Below are stored information about whether the share is admin only or not BOOL _fStoredAdminOnly; // // Place to store the help context base // ULONG _ulHelpContextBase; protected: virtual BOOL OnCommand( const CONTROL_EVENT & event ); // // Helper method called when the permissions button is pressed // VOID OnPermissions( VOID ); // // Helper method for changing share properties of a share // APIERR OnChangeShareProperty( SERVER_WITH_PASSWORD_PROMPT *psvr, const TCHAR *pszShare ); // // Display the properties of the share on the server in the dialog // APIERR UpdateInfo( SERVER_WITH_PASSWORD_PROMPT *psvr, const TCHAR *pszShare ); // // Update the permissions information which will be displayed if // the user hits the permissions button. Also called when a share // will be "renamed" i.e. deleted and recreated. // APIERR UpdatePermissionsInfo( SERVER_WITH_PASSWORD_PROMPT *psvr, SHARE_2 * psh2, const TCHAR *pszShare ); // // Used when the share is on NT servers - Write the share permissions out // APIERR ApplySharePermissions( const TCHAR *pszServer, const TCHAR *pszShare, const OS_SECURITY_DESCRIPTOR * posSecDesc) ; // // Used when the share is on NT servers - Query the permissions of the // share. // APIERR QuerySharePermissions( const TCHAR *pszServer, const TCHAR *pszShare, OS_SECURITY_DESCRIPTOR ** pposSecDesc) ; // // Used by subclasses which want to force permissions to be written, // in particular, by SVRMGR_SHARE_PROP_DIALOG when the user changes // the path to a share. // VOID SetSecDescModified() { _fSecDescModified = TRUE; } // // Used only when the share is on LM 2.x share-level servers - query // the permissions of the share // UINT QueryStoredPermissions( VOID ) const { return _uiStoredPermissions; } // // Used only when the share is on LM 2.x share-level servers - query // the password of the share // const TCHAR *QueryStoredPassword( VOID ) const { return _nlsStoredPassword.QueryPch(); } // // Used only when the share is on NT servers - query the // the security descriptor of the share // OS_SECURITY_DESCRIPTOR *QueryStoredSecDesc( VOID ) const { return _pStoredSecDesc; } // // Reset all the stored information - permission, password, // security descriptors // APIERR ClearStoredInfo( VOID ); // // Set the maximum number that will appear on the spin button // APIERR SetMaxUserLimit( ULONG ulMaxUserLimit ); // // Query or set the contents of Path // APIERR QueryPath( NLS_STR *pnlsPath ) const { return _slePath.QueryText( pnlsPath ); } VOID SetPath( const TCHAR *pszPath ) { _slePath.SetText( pszPath ); } // // Query or set the contents of the SLE comment // APIERR QueryComment( NLS_STR *pnlsComment ) const { return _sleComment.QueryText( pnlsComment ); } VOID SetComment( const TCHAR *pszComment ) { _sleComment.SetText( pszComment ); } // // Query or set the contents of User Limit // ULONG QueryUserLimit( VOID ) const; APIERR SetUserLimit( ULONG ulUserLimit ); // // Set Focus on the controls - SLE comment or User Limit magic group // This will be used by derived classes when error occurs. // VOID SetFocusOnPath( VOID ) { _slePath.ClaimFocus(); _slePath.SelectString(); } VOID SetFocusOnComment( VOID ) { _sleComment.ClaimFocus(); _sleComment.SelectString(); } VOID SetFocusOnUserLimit( VOID ) { _mgrpUserLimit.SetControlValueFocus(); } // // Query pointers to the controls // SLE *QuerySLEPath( VOID ) { return &_slePath; } SLE *QuerySLEComment( VOID ) { return &_sleComment; } SPIN_SLE_NUM *QuerySpinSLEUsers( VOID ) { return &_spsleUsers; } public: SHARE_DIALOG_BASE( const TCHAR *pszDlgResource, HWND hwndParent, ULONG ulHelpContextBase, ULONG ulMaxUserLimit = NT_USERS_MAX ); virtual ~SHARE_DIALOG_BASE(); PUSH_BUTTON *QueryPBOK( VOID ) { return &_buttonOK; } PUSH_BUTTON *QueryPBCancel( VOID ) { return &_buttonCancel; } PUSH_BUTTON *QueryPBPermissions( VOID ) { return &_buttonPermissions; } virtual APIERR QueryServer2( SERVER_WITH_PASSWORD_PROMPT **ppsvr ) = 0; virtual APIERR QueryShare( NLS_STR *pnlsShare ) const = 0; ULONG QueryHelpContextBase( VOID ) const { return _ulHelpContextBase; } }; /************************************************************************* NAME: PERMISSION_GROUP SYNOPSIS: The class contains a group to access permissions on a LM 2.1 share level server. This class is used in SHARE_LEVEL_PERMISSIONS_DIALOG. INTERFACE: PERMISSION_GROUP()- Constructor QueryPermission() - Query the permission in a bitmask SetPermission() - Set the permission given a bitmask ClaimFocus() - Set the focus to this group SetFocusOnOther() - Set focus on Other Edit Field of the magic group PARENT: BASE USES: SLE_STRIP, MAGIC_GROUP CAVEATS: NOTES: HISTORY: Yi-HsinS 8/25/91 Created **************************************************************************/ class PERMISSION_GROUP: public BASE { private: MAGIC_GROUP _mgrpPermission; SLE_STRIP _sleOther; // // Check if the permission entered into the Other edit field is valid // If valid, stored it in *pusPermission. Otherwise, return an error. // APIERR GetAndCheckOtherField( UINT *pusPermission ) const; public: PERMISSION_GROUP( OWNER_WINDOW *powin, CID cidBase, CID cidOtherEditField, CID cidInitialSelection = RG_NO_SEL, CONTROL_GROUP *pgroupOwner = NULL ); APIERR QueryPermission( UINT *pusPermission ) const; APIERR SetPermission( UINT usPermission ); VOID ClaimFocus( VOID ) { _mgrpPermission.SetControlValueFocus(); } VOID SetFocusOnOther( VOID ) { _sleOther.SelectString(); _sleOther.ClaimFocus(); } }; /************************************************************************* NAME: SHARE_LEVEL_PERMISSIONS_DIALOG SYNOPSIS: This is the dialog for displaying the password and permissions of the share if it's on a LM 2.x share-level server INTERFACE: SHARE_LEVEL_PERMISSIONS_DIALOG() - Constructor PARENT: DIALOG_WINDOW USES: NLS_STR, SLE, PERMISSION_GROUP CAVEATS: NOTES: OnCancel is not redefined here. The default in the DIALOG_WINDOW class serves the purpose - Dismiss( FALSE ) HISTORY: Yi-HsinS 8/25/91 Created **************************************************************************/ class SHARE_LEVEL_PERMISSIONS_DIALOG : public DIALOG_WINDOW { private: // // Place to store the password typed by the user // NLS_STR *_pnlsPassword; // // Place to store the permissions entered by the user // UINT *_puiPermissions; PERMISSION_GROUP _permgrp; SLE _slePassword; // // Place to store the help context base // ULONG _ulHelpContextBase; protected: virtual BOOL OnOK( VOID ); virtual ULONG QueryHelpContext( VOID ); public: SHARE_LEVEL_PERMISSIONS_DIALOG( HWND hwndParent, NLS_STR *pnlsPassword, UINT *puiPermissions, ULONG ulHelpContextBase ); }; /************************************************************************* NAME: SHARE_NAME_WITH_PATH_ENUM_ITER SYNOPSIS: The class for iterating the share names on the server with the selected path. It is similar to SHARE2_ENUM_ITER except that a pointer to share name is returned instead of the whole share_info_2 and only the share names with the same path as the selected path is returned. INTERFACE: SHARE_NAME_WITH_PATH_ENUM_ITER() - Constructor operator()() - Iterator PARENT: BASE USES: SHARE2_ENUM_ITER, NLS_STR CAVEATS: NOTES: HISTORY: Yi-HsinS 8/25/91 Created **************************************************************************/ class SHARE_NAME_WITH_PATH_ENUM_ITER : public BASE { private: SHARE2_ENUM_ITER _sh2EnumIter; // // The path that we want to match with the path of the shares returned. // NLS_STR _nlsActPath; public: SHARE_NAME_WITH_PATH_ENUM_ITER( SHARE2_ENUM &shPathEnum, const NLS_STR &nlsActPath ); const TCHAR *operator()( VOID ); }; /************************************************************************* NAME: SHARE_NET_NAME SYNOPSIS: This class is actually the same as the NET_NAME class except that its constructor checks for the errors of local computer. If it's not sharable, find out whether the local machine is not an NT machine or the Server service on NT has not been started. INTERFACE: SHARE_NET_NAME() - Constructor PARENT: NET_NAME USES: CAVEATS: NOTES: HISTORY: Yi-HsinS 12/15/91 Created **************************************************************************/ class SHARE_NET_NAME : public NET_NAME { public: SHARE_NET_NAME( const TCHAR *pszSharePath, NETNAME_TYPE netNameType = TYPE_UNKNOWN ); }; #endif