/**********************************************************************/
/**                       Microsoft Windows NT                       **/
/**                Copyright(c) Microsoft Corp., 1992                **/
/**********************************************************************/

/*
    NTFSAcl.hxx

    This file contains the manifests for the NTFS front to the Generic
    ACL Editor.


    FILE HISTORY:
        Johnl   03-Jan-1992     Created
        beng    06-Apr-1992     Unicode fix

*/

#ifndef _NTFSACL_HXX_
#define _NTFSACL_HXX_

#ifndef RC_INVOKED
#include <cncltask.hxx>


APIERR EditNTFSAcl( HWND		hwndParent,
                    const TCHAR *       pszServer,
                    const TCHAR *       pszResource,
		    enum SED_PERM_TYPE	sedpermtype,
		    BOOL		fIsFile ) ;

/* This function determines if the drive pointed at by pszResource is an
 * NTFS drive
 */
APIERR IsNTFS( const TCHAR * pszResource, BOOL * pfIsNTFS ) ;

APIERR CheckFileSecurity( const TCHAR * pszFileName,
                          ACCESS_MASK   DesiredAccess,
                          BOOL        * pfAccessGranted ) ;

//
//  These are the different states the time sliced tree apply code maybe
//  in.
//
enum TREE_APPLY_STATE
{
    APPLY_SEC_FMX_SELECTION,	// Apply to the next FMX selection, start enum
				//  if necessary
    APPLY_SEC_IN_FS_ENUM,	// Haven't finished enumeration yet
    APPLY_SEC_FMX_POST_FS_ENUM	// We've finished the enum and we may need
				// to put the perms. on the container
} ;

/*************************************************************************

    NAME:	TREE_APPLY_CONTEXT

    SYNOPSIS:	The TREE_APPLY_CONTEXT class is simply a container class
		that stores the current context for the task slicing used
		in the CANCEL_TASK_DIALOG.

    CAVEATS:	Note that nlsSelItem is a reference.
		Nothing should be added to this class which can fail
		construction (this is really just an open structure).

    NOTES:      pfsenum will be deleted if it isn't NULL.

    HISTORY:
	Johnl	21-Oct-1992	Created

**************************************************************************/

class TREE_APPLY_CONTEXT
{
public:
    enum TREE_APPLY_STATE State ;      // In FS enum or fmx selection

    HWND      hwndFMXWindow ;	       // FMX Hwnd
    UINT      iCurrent ;	       // Currently selected item
    UINT      uiCount ; 	       // Total number of selected items in Winfile
    BOOL      fDepthFirstTraversal ;   // Do a depth first tree apply
    BOOL      fApplyToDirContents ;    // Apply to contents w/o doing the tree
    NLS_STR & nlsSelItem ;	       // Currently selected FMX item
    BOOL      fIsSelFile ;	       // Is the selected item a file?
    enum SED_PERM_TYPE	sedpermtype ;  // SED_AUDITS, SED_OWNER, SED_ACCESSES

    LPDWORD		 StatusReturn ; 	// Status passed by ACL editor
    BOOL		 fApplyToSubContainers ;//  "
    BOOLEAN		 fApplyToSubObjects ;	//  "
    W32_FS_ENUM *	 pfsenum ;

    TREE_APPLY_CONTEXT( NLS_STR & nlsSel )
    : nlsSelItem( nlsSel ),
      pfsenum	( NULL	)
	{ /* nothing to do */ }

    ~TREE_APPLY_CONTEXT()
        { delete pfsenum ; }
} ;

/*************************************************************************

    NAME:	NTFS_TREE_APPLY_CONTEXT

    SYNOPSIS:	Supplies NTFS specific data for the NTFS_CANCEL_TREE_APPLY
		class

    PARENT:	TREE_APPLY_CONTEXT

    HISTORY:
	Johnl	22-Oct-1992	Created

**************************************************************************/

class NTFS_TREE_APPLY_CONTEXT : public TREE_APPLY_CONTEXT
{
public:
    OS_SECURITY_INFORMATION & osSecInfo ;	// What's being set
    PSECURITY_DESCRIPTOR psecdesc ;		// Container permissions
    PSECURITY_DESCRIPTOR psecdescNewObjects ;   // Object permissions
    BOOL                 fBlowAwayDACLOnCont ;  // Replace DACL granting the
                                                // current user full access on
                                                // containers

    NTFS_TREE_APPLY_CONTEXT( NLS_STR & nlsSel,
			     OS_SECURITY_INFORMATION & osSec )
    : TREE_APPLY_CONTEXT( nlsSel ),
      osSecInfo ( osSec )
	{ /* nothing to do */ }
} ;

/*************************************************************************

    NAME:	LM_TREE_APPLY_CONTEXT

    SYNOPSIS:	Simple derivation for Lanman

    PARENT:	TREE_APPLY_CONTEXT

    NOTES:

    HISTORY:
	Johnl	23-Oct-1992	Created

**************************************************************************/

class LM_TREE_APPLY_CONTEXT : public TREE_APPLY_CONTEXT
{
public:
    NET_ACCESS_1 *	  plmobjNetAccess1 ;

    LM_TREE_APPLY_CONTEXT( NLS_STR & nlsSel )
    : TREE_APPLY_CONTEXT( nlsSel )
	{ /* nothing to do */ }
} ;

/*************************************************************************

    NAME:	CANCEL_TREE_APPLY

    SYNOPSIS:	Simply derivation of the CANCEL_TASK_DIALOG

    PARENT:	CANCEL_TASK_DIALOG

    NOTES:

    HISTORY:
	Johnl	21-Oct-1992	Created

**************************************************************************/

class CANCEL_TREE_APPLY : public CANCEL_TASK_DIALOG
{
public:
    CANCEL_TREE_APPLY( HWND hwndParent,
		       TREE_APPLY_CONTEXT *	 pContext,
		       const TCHAR *		 pszDlgTitle )
	: CANCEL_TASK_DIALOG( (UINT) PtrToUlong(CANCEL_TASK_DIALOG_NAME),
			      hwndParent,
			      pszDlgTitle,
			      (ULONG_PTR) pContext,
			      (MSGID) IDS_CANCEL_TASK_ON_ERROR_MSG )
	{
	    /* Nothing to do
	     */
	}

protected:
    virtual APIERR DoOneItem( ULONG_PTR ulContext,
			      BOOL  *pfContinue,
                              BOOL  *pfDisplayErrors,
                              MSGID *msgidAlternateMessage ) ;

    virtual APIERR WriteSecurity( ULONG_PTR 	ulContext,
				  const TCHAR * pszFileName,
                                  BOOL          fIsFile,
                                  BOOL        * pfContinue ) = 0 ;

} ;

/*************************************************************************

    NAME:	NTFS_CANCEL_TREE_APPLY

    SYNOPSIS:	Simple derivation that redefines WriteSecurity for NTFS

    PARENT:	CANCEL_TREE_APPLY

    NOTES:	Parameters for WriteSecurity are contained in the context
		structure

    HISTORY:
	Johnl	23-Oct-1992	Created

**************************************************************************/

class NTFS_CANCEL_TREE_APPLY : public CANCEL_TREE_APPLY
{
public:
    NTFS_CANCEL_TREE_APPLY( HWND hwndParent,
			    NTFS_TREE_APPLY_CONTEXT * pContext,
			    const TCHAR *	      pszDlgTitle )
	: CANCEL_TREE_APPLY( hwndParent,
			     pContext,
			     pszDlgTitle )
	{
	    /* Nothing to do
	     */
	}

protected:
    virtual APIERR WriteSecurity( ULONG_PTR 	ulContext,
				  const TCHAR * pszFileName,
                                  BOOL          fIsFile,
                                  BOOL        * pfContinue  ) ;
} ;

/*************************************************************************

    NAME:	LM_CANCEL_TREE_APPLY

    SYNOPSIS:	Simple derivation that redefines WriteSecurity for Lanman

    PARENT:	CANCEL_TREE_APPLY

    NOTES:	Parameters for WriteSecurity are contained in the context
		structure

    HISTORY:
	Johnl	23-Oct-1992	Created

**************************************************************************/

class LM_CANCEL_TREE_APPLY : public CANCEL_TREE_APPLY
{
public:
    LM_CANCEL_TREE_APPLY( HWND hwndParent,
			    LM_TREE_APPLY_CONTEXT * pContext,
			    const TCHAR *	    pszDlgTitle )
	: CANCEL_TREE_APPLY( hwndParent,
			     pContext,
			     pszDlgTitle )
	{
	    /* Nothing to do
	     */
	}

protected:
    virtual APIERR WriteSecurity( ULONG_PTR 	ulContext,
				  const TCHAR * pszFileName,
                                  BOOL          fIsFile,
                                  BOOL        * pfContinue  ) ;
} ;

#endif // RC_INVOKED

#define IDS_NT_PERM_NAMES_BASE	  (IDS_UI_ACLEDIT_BASE+200)

/* The following manifests are the resource IDs for the permission name
 * strings.
 */
#define IDS_FILE_PERM_SPEC_READ                 (IDS_NT_PERM_NAMES_BASE+1)
#define IDS_FILE_PERM_SPEC_WRITE                (IDS_NT_PERM_NAMES_BASE+2)
#define IDS_FILE_PERM_SPEC_EXECUTE              (IDS_NT_PERM_NAMES_BASE+3)
#define IDS_FILE_PERM_SPEC_ALL                  (IDS_NT_PERM_NAMES_BASE+4)
#define IDS_FILE_PERM_SPEC_DELETE               (IDS_NT_PERM_NAMES_BASE+5)
#define IDS_FILE_PERM_SPEC_READ_PERM            (IDS_NT_PERM_NAMES_BASE+6)
#define IDS_FILE_PERM_SPEC_CHANGE_PERM          (IDS_NT_PERM_NAMES_BASE+7)
#define IDS_FILE_PERM_SPEC_CHANGE_OWNER         (IDS_NT_PERM_NAMES_BASE+8)
#define IDS_FILE_PERM_GEN_NO_ACCESS             (IDS_NT_PERM_NAMES_BASE+10)
#define IDS_FILE_PERM_GEN_READ                  (IDS_NT_PERM_NAMES_BASE+11)
#define IDS_FILE_PERM_GEN_MODIFY                (IDS_NT_PERM_NAMES_BASE+12)
#define IDS_FILE_PERM_GEN_ALL                   (IDS_NT_PERM_NAMES_BASE+13)

#define IDS_DIR_PERM_SPEC_READ                  (IDS_NT_PERM_NAMES_BASE+16)
#define IDS_DIR_PERM_SPEC_WRITE                 (IDS_NT_PERM_NAMES_BASE+17)
#define IDS_DIR_PERM_SPEC_EXECUTE               (IDS_NT_PERM_NAMES_BASE+18)
#define IDS_DIR_PERM_SPEC_ALL                   (IDS_NT_PERM_NAMES_BASE+19)
#define IDS_DIR_PERM_SPEC_DELETE                (IDS_NT_PERM_NAMES_BASE+20)
#define IDS_DIR_PERM_SPEC_READ_PERM             (IDS_NT_PERM_NAMES_BASE+21)
#define IDS_DIR_PERM_SPEC_CHANGE_PERM           (IDS_NT_PERM_NAMES_BASE+22)
#define IDS_DIR_PERM_SPEC_CHANGE_OWNER          (IDS_NT_PERM_NAMES_BASE+23)

#define IDS_DIR_PERM_GEN_NO_ACCESS              (IDS_NT_PERM_NAMES_BASE+30)
#define IDS_DIR_PERM_GEN_LIST                   (IDS_NT_PERM_NAMES_BASE+31)
#define IDS_DIR_PERM_GEN_READ                   (IDS_NT_PERM_NAMES_BASE+32)
#define IDS_DIR_PERM_GEN_DEPOSIT                (IDS_NT_PERM_NAMES_BASE+33)
#define IDS_DIR_PERM_GEN_PUBLISH                (IDS_NT_PERM_NAMES_BASE+34)
#define IDS_DIR_PERM_GEN_MODIFY                 (IDS_NT_PERM_NAMES_BASE+35)
#define IDS_DIR_PERM_GEN_ALL                    (IDS_NT_PERM_NAMES_BASE+36)

#define IDS_NEWFILE_PERM_SPEC_READ              (IDS_NT_PERM_NAMES_BASE+41)
#define IDS_NEWFILE_PERM_SPEC_WRITE             (IDS_NT_PERM_NAMES_BASE+42)
#define IDS_NEWFILE_PERM_SPEC_EXECUTE           (IDS_NT_PERM_NAMES_BASE+43)
#define IDS_NEWFILE_PERM_SPEC_ALL               (IDS_NT_PERM_NAMES_BASE+44)
#define IDS_NEWFILE_PERM_SPEC_DELETE            (IDS_NT_PERM_NAMES_BASE+45)
#define IDS_NEWFILE_PERM_SPEC_READ_PERM         (IDS_NT_PERM_NAMES_BASE+46)
#define IDS_NEWFILE_PERM_SPEC_CHANGE_PERM       (IDS_NT_PERM_NAMES_BASE+47)
#define IDS_NEWFILE_PERM_SPEC_CHANGE_OWNER      (IDS_NT_PERM_NAMES_BASE+48)

#define IDS_FILE_AUDIT_READ                     (IDS_NT_PERM_NAMES_BASE+60)
#define IDS_FILE_AUDIT_WRITE                    (IDS_NT_PERM_NAMES_BASE+61)
#define IDS_FILE_AUDIT_EXECUTE                  (IDS_NT_PERM_NAMES_BASE+62)
#define IDS_FILE_AUDIT_DELETE                   (IDS_NT_PERM_NAMES_BASE+63)
#define IDS_FILE_AUDIT_CHANGE_PERM              (IDS_NT_PERM_NAMES_BASE+64)
#define IDS_FILE_AUDIT_CHANGE_OWNER             (IDS_NT_PERM_NAMES_BASE+65)

#define IDS_DIR_AUDIT_READ                      (IDS_NT_PERM_NAMES_BASE+66)
#define IDS_DIR_AUDIT_WRITE                     (IDS_NT_PERM_NAMES_BASE+67)
#define IDS_DIR_AUDIT_EXECUTE                   (IDS_NT_PERM_NAMES_BASE+68)
#define IDS_DIR_AUDIT_DELETE                    (IDS_NT_PERM_NAMES_BASE+69)
#define IDS_DIR_AUDIT_CHANGE_PERM               (IDS_NT_PERM_NAMES_BASE+70)
#define IDS_DIR_AUDIT_CHANGE_OWNER              (IDS_NT_PERM_NAMES_BASE+71)

#endif // _NTFSACL_HXX_