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

751 lines
20 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corp., 1991 **/
/**********************************************************************/
/*
PermDlg.hxx
Permission Dialog class definitions
The hierarchy of dialogs looks like:
PERM_BASE_DLG
resource name/type placement
MAIN_PERM_BASE_DLG
get/write permissions
LM_AUDITTING_DLG
MULTI_SUBJ_PERM_BASE_DLG
MULTI_SUBJ_ACCESS_PERM_BASE_DLG
OBJECT_ACCESS_PERMISSION_DLG
NT_OBJECT_ACCESS_PERMISSION_DLG
MULTI_SUBJ_CONT_ACCESS_PERM_BASE
CONT_ACCESS_PERM_DLG
NT_CONT_NO_OBJ_ACCESS_PERM_DLG
NT_CONT_ACCESS_PERM_DLG
MULTI_SUBJ_AUDIT_BASE
OBJECT_AUDIT_DLG
CONT_AUDIT_DLG
SPECIAL_DIALOG
NEW_OBJ_SPECIAL_DIALOG
FILE HISTORY:
Johnl 06-Aug-1991 Created
beng 17-Oct-1991 Explicitly include sltplus
Johnl 11-Jan-1992 Removed SLT_PLUS
*/
#ifndef _PERMDLG_HXX_
#define _PERMDLG_HXX_
/* Control IDs used in the dialogs
*/
#define CID_PERM_BASE 256
#define SLT_RESOURCE_TYPE (CID_PERM_BASE+1)
#define SLE_RESOURCE_NAME (CID_PERM_BASE+2)
#define BUTTON_ADD (CID_PERM_BASE+3)
#define BUTTON_REMOVE (CID_PERM_BASE+4)
#define BUTTON_SPECIAL (CID_PERM_BASE+5)
#define CB_PERM_NAME (CID_PERM_BASE+6)
#define LB_SUBJECT_PERMISSIONS (CID_PERM_BASE+7)
#define CHECK_APPLY_TO_CONT (CID_PERM_BASE+8)
#define SLT_TREE_APPLY_HELP_TEXT (CID_PERM_BASE+9)
#define SLE_OWNER (CID_PERM_BASE+10)
#define SLT_PERM_NAME_TITLE (CID_PERM_BASE+11)
#define CHECK_APPLY_TO_OBJ (CID_PERM_BASE+12)
#define CID_PERM_LAST (CID_PERM_BASE+100)
#define RESID_PERM_BASE (10000)
#define IDD_SED_OBJECT_PERM 10002
#define IDD_SED_NT_OBJECT_PERM 10003
#define IDD_SED_LM_CONT_PERM 10004
#define IDD_SED_NT_CONT_PERM 10005
#define IDD_SPECIAL_PERM_DLG 10006
#define IDD_SED_LM_SPECIAL_PERM_DLG 10007
#define IDD_SED_NEW_OBJ_SPECIAL_PERM_DLG 10008
#define IDD_SED_LM_AUDITING_DLG 10009
#define IDD_SED_NT_CONT_AUDITING_DLG 10010
#define IDD_SED_LM_ADD_DLG 10011
#define IDD_SED_LM_ADD_PERM_DLG 10012
#define IDD_SED_TAKE_OWNER 10013
#define IDD_SED_NT_CONT_NEWOBJ_AUDITING_DLG 10014
#define IDD_SED_NT_CONT_NEWOBJ_PERM_DLG 10015
#ifndef RC_INVOKED
#include "subjlb.hxx"
/*************************************************************************
NAME: PERM_BASE_DLG
SYNOPSIS: This class is the base for the permission and auditting
dialogs that will be used for permission editting.
The Resource Type and Resource Name are positioned
correctly based on the size of the field.
INTERFACE: QueryResType - Returns the resource type ("File", "Directory")
QueryResName - Returns the name ("C:\foobar")
PARENT: DIALOG_WINDOW
USES: SLE, SLE
CAVEATS:
NOTES: The OK button is here so it can get the default focus
HISTORY:
Johnl 06-Aug-1991 Created
**************************************************************************/
class PERM_BASE_DLG : public DIALOG_WINDOW
{
private:
ULONG * _ahcDialogHelp ;
const TCHAR * _pszHelpFileName ;
NLS_STR _nlsResType ;
NLS_STR _nlsResName ;
protected:
SLT _sltResourceType ;
SLE _sleResourceName ;
PUSH_BUTTON _buttonOK ;
PUSH_BUTTON _buttonCancel ;
PERM_BASE_DLG( const TCHAR * pszDialogName,
HWND hwndParent,
const TCHAR * pszDialogTitle,
const TCHAR * pszResourceType,
const TCHAR * pszResourceName,
const TCHAR * pszHelpFileName,
ULONG * ahcMainDialog ) ;
virtual const TCHAR * QueryHelpFile( ULONG ulHelpContext ) ;
virtual ULONG QueryHelpContext( void ) ;
public:
virtual ~PERM_BASE_DLG() ;
APIERR QueryResType( NLS_STR * pnlsResType ) const
{ return pnlsResType->CopyFrom( _nlsResType ) ; }
APIERR QueryResName( NLS_STR * pnlsResName ) const
{ return pnlsResName->CopyFrom( _nlsResName ) ; }
const TCHAR * QueryResType( void ) const
{ return _nlsResType.QueryPch() ; }
const TCHAR * QueryResName( void ) const
{ return _nlsResName.QueryPch() ; }
const TCHAR * QueryHelpFileName( void ) const
{ return _pszHelpFileName ; }
ULONG * QueryHelpArray( void )
{ return _ahcDialogHelp ; }
}; // class PERM_BASE_DLG
/*************************************************************************
NAME: MAIN_PERM_BASE_DLG
SYNOPSIS: This dialog is the base for the main windows. It will read
and get the permissions and write them back out.
INTERFACE:
Initialize()
Gets everything setup before Process is called (should be called
before process). If Initialize returns an error, then Process
should not be called, or if the user quit, then process should
not be called.
pfUserQuit - Set to TRUE if the user pressed cancel
fAccessPerms - Should be set to TRUE if access permissions
should be retrieved, otherwise audit permissions
will be retrieved.
GetPermissions()
Attempts to read the permissions using the _accperm member.
Handles displaying errors etc. etc. If the return code
is NERR_Success, then the fUserQuit flag should be checked
in case the user decided to bail. If an error is returned,
then the client is responsible for displaying the error code.
WritePermissions()
Attempts to write the permissions using the _accperm member.
All error handling is contained in this method, including
displaying error codes to the user. If the return code
is TRUE, then the permissions were successfully written and
the dialog should be dismissed, otherwise an error occurred,
and the dialog should not be dismissed. The client does *not*
need to display an hour class before calling this method.
PARENT:
USES:
CAVEATS:
NOTES:
HISTORY:
Johnl 06-Aug-1991 Created
**************************************************************************/
class MAIN_PERM_BASE_DLG : public PERM_BASE_DLG
{
protected:
ACCPERM _accperm ;
virtual BOOL OnOK( void ) ;
MAIN_PERM_BASE_DLG( const TCHAR * pszDialogName,
HWND hwndParent,
const TCHAR * pszDialogTitle,
ACL_TO_PERM_CONVERTER * paclconv,
const TCHAR * pszResourceType,
const TCHAR * pszResourceName,
const TCHAR * pszHelpFileName,
ULONG * ahcMainDialog ) ;
virtual BOOL MayRun( void ) ;
public:
virtual ~MAIN_PERM_BASE_DLG() ;
APIERR GetPermissions( BOOL * pfUserQuit, BOOL fAccessPerms ) ;
BOOL WritePermissions( BOOL fApplyToExistingCont,
BOOL fApplyToNewObj,
enum TREE_APPLY_FLAGS applyflags = TREEAPPLY_ACCESS_PERMS ) ;
virtual APIERR Initialize( BOOL * pfUserQuit, BOOL fAccessPerms ) ;
ACL_TO_PERM_CONVERTER * QueryAclConverter( void ) const
{ return _accperm.QueryAclConverter() ; }
BOOL IsReadOnly( void ) const
{ return QueryAclConverter()->IsReadOnly() ; }
BOOL IsNT( void ) const
{ return QueryAclConverter()->IsNT() ; }
MASK_MAP * QueryAccessMap( void ) const
{ return QueryAclConverter()->QueryAccessMap() ; }
MASK_MAP * QueryAuditMap( void ) const
{ return QueryAclConverter()->QueryAuditMap() ; }
}; // class MAIN_PERM_BASE_DLG
/*************************************************************************
NAME: MULTI_SUBJ_PERM_BASE
SYNOPSIS: This dialog adds the ability to Add/Remove subjects from
the listbox displayed in this dialog
INTERFACE:
PARENT:
USES:
CAVEATS:
NOTES:
HISTORY:
Johnl 27-Sep-1991 Created
**************************************************************************/
class MULTI_SUBJ_PERM_BASE_DLG : public MAIN_PERM_BASE_DLG
{
private:
PUSH_BUTTON _buttonAdd ;
PUSH_BUTTON _buttonRemove ;
ULONG _hcAddDialog ;
protected:
virtual BOOL OnCommand( const CONTROL_EVENT & e );
/* Add/Delete User/group buttons
*/
virtual APIERR OnAddSubject( void ) ;
virtual void OnDeleteSubject( void ) ;
MULTI_SUBJ_PERM_BASE_DLG( const TCHAR * pszDialogName,
HWND hwndParent,
const TCHAR * pszDialogTitle,
ACL_TO_PERM_CONVERTER * paclconv,
const TCHAR * pszResourceType,
const TCHAR * pszResourceName,
const TCHAR * pszHelpFileName,
ULONG * ahcMainDialog ) ;
ULONG QueryAddDialogHelp( void )
{ return QueryHelpArray()[HC_SPECIAL_ACCESS_DLG] ; }
public:
virtual ~MULTI_SUBJ_PERM_BASE_DLG() ;
PUSH_BUTTON * QueryRemoveButton( void )
{ return &_buttonRemove ; }
PUSH_BUTTON * QueryAddButton( void )
{ return &_buttonAdd ; }
};
/*************************************************************************
NAME: MULTI_SUBJ_ACCESS_PERM_BASE_DLG
SYNOPSIS: Dialog where access permissions are set.
INTERFACE:
PARENT:
USES:
CAVEATS:
NOTES: We take pointers to the listbox and group since the children
may use their own specialized listbox or group.
We add the "Special Access..." string to the combobox (this
string must match the string passed to the SUBJECT_LISTBOX).
HISTORY:
Johnl 06-Aug-1991 Created
**************************************************************************/
class MULTI_SUBJ_ACCESS_PERM_BASE_DLG : public MULTI_SUBJ_PERM_BASE_DLG
{
private:
COMBOBOX _cbPermissionName ;
SLT _sltCBTitle ;
SUBJECT_PERM_LISTBOX *_plbPermissionList ;
SUBJ_LB_GROUP *_psubjlbGroup ;
const TCHAR * _pszDefaultPermName ;
protected:
/* These do real work
*/
virtual void OnDeleteSubject( void ) ;
virtual APIERR OnAddSubject( void ) ;
BOOL OnCommand( const CONTROL_EVENT & e ) ;
MULTI_SUBJ_ACCESS_PERM_BASE_DLG( const TCHAR * pszDialogName,
HWND hwndParent,
const TCHAR * pszDialogTitle,
ACL_TO_PERM_CONVERTER * paclconv,
const TCHAR * pszResourceType,
const TCHAR * pszResourceName,
const TCHAR * pszHelpFileName,
SUBJECT_PERM_LISTBOX * plbPermissionList,
SUBJ_LB_GROUP * psubjlbGroup,
const TCHAR * pszSpecialAccessName,
const TCHAR * pszDefaultPermName,
ULONG * ahcMainDialog ) ;
public:
virtual ~MULTI_SUBJ_ACCESS_PERM_BASE_DLG() ;
virtual APIERR Initialize( BOOL * pfUserQuit, BOOL fAccessPerms ) ;
/* Public so the group can call these when it needs to.
*/
virtual APIERR OnSpecial( SUBJ_PERM_LBI * pSubjPermLBI ) ;
/* Will only get redefined for children that support New Sub-Object stuff.
*/
virtual APIERR OnNewObjectSpecial( SUBJ_PERM_LBI * pSubjPermLBI ) ;
COMBOBOX * QueryPermNameCombo( void )
{ return &_cbPermissionName ; }
SLT * QueryComboBoxTitle( void )
{ return &_sltCBTitle ; }
SUBJECT_PERM_LISTBOX * QuerySubjectPermListbox( void ) const
{ return _plbPermissionList ; }
const TCHAR * QueryDefaultPermName( void ) const
{ return _pszDefaultPermName ; }
ULONG QuerySpecialHelpContext( void )
{ return QueryHelpArray()[HC_SPECIAL_ACCESS_DLG] ; }
ULONG QueryNewObjHelpContext( void )
{ return QueryHelpArray()[HC_NEW_ITEM_SPECIAL_ACCESS_DLG] ; }
} ;
/*************************************************************************
NAME: OBJECT_ACCESS_PERMISSION_DLG
SYNOPSIS: Single object access permission dialog
INTERFACE:
PARENT: MULTI_SUBJ_ACCESS_PERM_BASE_DLG
USES:
CAVEATS:
NOTES:
HISTORY:
Johnl 27-Sep-1991 Created
**************************************************************************/
class OBJECT_ACCESS_PERMISSION_DLG : public MULTI_SUBJ_ACCESS_PERM_BASE_DLG
{
private:
SUBJECT_PERM_LISTBOX _lbPermissionList ;
SUBJ_LB_GROUP _subjlbGroup ;
public:
OBJECT_ACCESS_PERMISSION_DLG( const TCHAR * pszDialogName,
HWND hwndParent,
const TCHAR * pszDialogTitle,
ACL_TO_PERM_CONVERTER * paclconv,
const TCHAR * pszResourceType,
const TCHAR * pszResourceName,
const TCHAR * pszHelpFileName,
const TCHAR * pszSpecialAccessName,
const TCHAR * pszDefaultPermName,
ULONG * ahcMainDialog ) ;
virtual ~OBJECT_ACCESS_PERMISSION_DLG() ;
} ;
/*************************************************************************
NAME: NT_OBJECT_ACCESS_PERMISSION_DLG
SYNOPSIS: NT variant of the object access permission dialog
PARENT: OBJECT_ACCESS_PERMISSION_DLG
CAVEATS:
NOTES: This only adds the owner field to the dialog
HISTORY:
Johnl 27-Sep-1991 Created
**************************************************************************/
class NT_OBJECT_ACCESS_PERMISSION_DLG : public OBJECT_ACCESS_PERMISSION_DLG
{
private:
SLE _sleOwner ;
public:
NT_OBJECT_ACCESS_PERMISSION_DLG(
const TCHAR * pszDialogName,
HWND hwndParent,
const TCHAR * pszDialogTitle,
ACL_TO_PERM_CONVERTER * paclconv,
const TCHAR * pszResourceType,
const TCHAR * pszResourceName,
const TCHAR * pszHelpFileName,
const TCHAR * pszSpecialAccessName,
const TCHAR * pszDefaultPermName,
ULONG * ahcMainDialog ) ;
virtual ~NT_OBJECT_ACCESS_PERMISSION_DLG() ;
//
// Fills in the owner field after the dialog has been initialized
//
virtual APIERR Initialize( BOOL * pfUserQuit, BOOL fAccessPerms ) ;
} ;
/*************************************************************************
NAME: MULTI_SUBJ_CONT_ACCESS_PERM_BASE
SYNOPSIS: This dialog forms the base class for the container objects.
This primarily means allowing the Apply to checkboxes and
the special groups etc. for the NT_CONT case (that supports
New Sub-Obj permissions).
INTERFACE:
PARENT: MULTI_SUBJ_ACCESS_PERM_BASE_DLG
USES:
CAVEATS:
NOTES:
HISTORY:
Johnl 27-Sep-1991 Created
**************************************************************************/
class MULTI_SUBJ_CONT_ACCESS_PERM_BASE : public MULTI_SUBJ_ACCESS_PERM_BASE_DLG
{
private:
CHECKBOX _checkAssignToExistingContainers ;
SLT_FONT _sltfontTreeApplyHelpText ;
/* Pointer to confirmation string that is displayed to the user if the
* Tree apply checkbox is checked.
*/
const TCHAR * _pszTreeApplyConfirmation ;
protected:
virtual BOOL OnOK( void ) ;
MULTI_SUBJ_CONT_ACCESS_PERM_BASE( const TCHAR * pszDialogName,
HWND hwndParent,
const TCHAR * pszDialogTitle,
ACL_TO_PERM_CONVERTER * paclconv,
const TCHAR * pszResourceType,
const TCHAR * pszResourceName,
const TCHAR * pszHelpFileName,
SUBJECT_PERM_LISTBOX * plbPermissionList,
SUBJ_LB_GROUP * psubjlbGroup,
const TCHAR * pszSpecialAccessName,
const TCHAR * pszDefaultPermName,
ULONG * ahcMainDialog,
const TCHAR * pszAssignToExistingContTitle,
const TCHAR * pszTreeApplyHelpText,
const TCHAR * pszTreeApplyConfirmation ) ;
public:
virtual ~MULTI_SUBJ_CONT_ACCESS_PERM_BASE() ;
/* Calls parent and disables the tree apply checkbox if readonly
*/
virtual APIERR Initialize( BOOL * pfUserQuit, BOOL fAccessPerms ) ;
//
// Returns TRUE if permissions should be applied to objects within this
// container.
//
virtual BOOL IsAssignToExistingObjChecked( void ) ;
/* Returns TRUE if the user checked the "Apply to existing"
*/
BOOL IsAssignToExistingContChecked( void )
{ return _checkAssignToExistingContainers.QueryCheck() ; }
} ;
/*************************************************************************
NAME: CONT_ACCESS_PERM_DLG
SYNOPSIS: This dialog is the container access permission dialog that
doesn't support New Sub-Object permissions (LM Directories
etc.). This is a real dialog.
INTERFACE:
PARENT: MULTI_SUBJ_CONT_ACCESS_PERM_BASE
USES:
CAVEATS:
NOTES:
HISTORY:
Johnl 27-Sep-1991 Created
**************************************************************************/
class CONT_ACCESS_PERM_DLG : public MULTI_SUBJ_CONT_ACCESS_PERM_BASE
{
private:
SUBJECT_PERM_LISTBOX _lbPermissionList ;
SUBJ_LB_GROUP _subjlbGroup ;
protected:
virtual BOOL OnOK( void ) ;
public:
CONT_ACCESS_PERM_DLG( const TCHAR * pszDialogName,
HWND hwndParent,
const TCHAR * pszDialogTitle,
ACL_TO_PERM_CONVERTER * paclconv,
const TCHAR * pszResourceType,
const TCHAR * pszResourceName,
const TCHAR * pszHelpFileName,
const TCHAR * pszSpecialAccessName,
const TCHAR * pszDefaultPermName,
ULONG * ahcMainDialog,
const TCHAR * pszAssignToExistingContTitle,
const TCHAR * pszTreeApplyHelpText,
const TCHAR * pszTreeApplyConfirmation ) ;
virtual ~CONT_ACCESS_PERM_DLG() ;
} ;
/*************************************************************************
NAME: NT_CONT_NO_OBJ_ACCESS_PERM_DLG
SYNOPSIS: This dialog is the NT container access permission dialog that
doesn't support Sub-Object permissions.
PARENT: CONT_ACCESS_PERM_DLG
NOTES: This is exactly the same as the parent except the owner field
is added
HISTORY:
Johnl 20-Nov-1992 Created
**************************************************************************/
class NT_CONT_NO_OBJ_ACCESS_PERM_DLG : public CONT_ACCESS_PERM_DLG
{
private:
SLE _sleOwner ;
public:
NT_CONT_NO_OBJ_ACCESS_PERM_DLG(
const TCHAR * pszDialogName,
HWND hwndParent,
const TCHAR * pszDialogTitle,
ACL_TO_PERM_CONVERTER * paclconv,
const TCHAR * pszResourceType,
const TCHAR * pszResourceName,
const TCHAR * pszHelpFileName,
const TCHAR * pszSpecialAccessName,
const TCHAR * pszDefaultPermName,
ULONG * ahcMainDialog,
const TCHAR * pszAssignToExistingContTitle,
const TCHAR * pszTreeApplyHelpText,
const TCHAR * pszTreeApplyConfirmation ) ;
virtual ~NT_CONT_NO_OBJ_ACCESS_PERM_DLG() ;
//
// Fills in the owner field after the dialog has been initialized
//
virtual APIERR Initialize( BOOL * pfUserQuit, BOOL fAccessPerms ) ;
} ;
/*************************************************************************
NAME: NT_CONT_ACCESS_PERM_DLG
SYNOPSIS: This dialog is the container access permission dialog that
supports New Sub-Object permissions (it's this dialog that
is responsible for this whole hierarchy mess).
This is a real dialog.
INTERFACE:
PARENT: MULTI_SUBJ_CONT_ACCESS_PERM_BASE
USES:
CAVEATS:
NOTES:
HISTORY:
Johnl 27-Sep-1991 Created
**************************************************************************/
class NT_CONT_ACCESS_PERM_DLG : public MULTI_SUBJ_CONT_ACCESS_PERM_BASE
{
private:
NT_CONT_SUBJECT_PERM_LISTBOX _lbPermissionList ;
NT_CONT_SUBJ_LB_GROUP _subjlbGroup ;
SLE _sleOwner ;
CHECKBOX _checkApplyToExistingObjects ;
protected:
virtual BOOL OnOK( void ) ;
public:
/* pszAssignNewObjToExistingObjTitle is used to set the checkbox text. If
* it is NULL, the checkbox is hidden and disabled.
*/
NT_CONT_ACCESS_PERM_DLG( const TCHAR * pszDialogName,
HWND hwndParent,
const TCHAR * pszDialogTitle,
ACL_TO_PERM_CONVERTER * paclconv,
const TCHAR * pszResourceType,
const TCHAR * pszResourceName,
const TCHAR * pszHelpFileName,
const TCHAR * pszSpecialAccessName,
const TCHAR * pszDefaultPermName,
ULONG * ahcMainDialog,
const TCHAR * pszNewObjectSpecialAccessName,
const TCHAR * pszAssignToExistingContTitle,
const TCHAR * pszAssignToExistingObjTitle,
const TCHAR * pszTreeApplyHelpText,
const TCHAR * pszTreeApplyConfirmation ) ;
virtual ~NT_CONT_ACCESS_PERM_DLG() ;
virtual APIERR OnNewObjectSpecial( SUBJ_PERM_LBI * pSubjPermLBI ) ;
virtual BOOL IsAssignToExistingObjChecked( void ) ;
//
// Fills in the owner field after the dialog has been initialized
//
virtual APIERR Initialize( BOOL * pfUserQuit, BOOL fAccessPerms ) ;
} ;
#endif //RC_INVOKED
#endif // _PERMDLG_HXX_