|
|
/*
Copyright (c) 1992 Microsoft Corporation
Module Name:
fdparm.h
Abstract:
This file defines file-dir parameter handling data structure and prototypes.
Author:
Jameel Hyder (microsoft!jameelh)
Revision History: 25 Apr 1992 Initial Version
Notes: Tab stop: 4 --*/
#ifndef _FDPARM_
#define _FDPARM_
#define EVENALIGN(n) (((n) + 1) & ~1)
// Common File and Directory bitmap definitions
#define FD_BITMAP_ATTR 0x0001
#define FD_BITMAP_PARENT_DIRID 0x0002
#define FD_BITMAP_CREATETIME 0x0004
#define FD_BITMAP_MODIFIEDTIME 0x0008
#define FD_BITMAP_BACKUPTIME 0x0010
#define FD_BITMAP_FINDERINFO 0x0020
#define FD_BITMAP_LONGNAME 0x0040
#define FD_BITMAP_SHORTNAME 0x0080
#define FD_BITMAP_PRODOSINFO 0x2000
// File Specific bitmap definitions
#define FILE_BITMAP_FILENUM 0x0100
#define FILE_BITMAP_DATALEN 0x0200
#define FILE_BITMAP_RESCLEN 0x0400
#define FILE_BITMAP_MASK 0x27FF
// Directory bitmap definitions
#define DIR_BITMAP_DIRID FILE_BITMAP_FILENUM
#define DIR_BITMAP_OFFSPRINGS FILE_BITMAP_DATALEN
#define DIR_BITMAP_OWNERID FILE_BITMAP_RESCLEN
#define DIR_BITMAP_GROUPID 0x0800
#define DIR_BITMAP_ACCESSRIGHTS 0x1000
#define DIR_BITMAP_MASK 0x3FFF
#define FD_VALID_SET_PARMS (FD_BITMAP_ATTR | \
FD_BITMAP_FINDERINFO | \ FD_BITMAP_PRODOSINFO | \ FD_BITMAP_CREATETIME | \ FD_BITMAP_BACKUPTIME | \ FD_BITMAP_MODIFIEDTIME)
#define DIR_VALID_SET_PARMS (FD_VALID_SET_PARMS | \
DIR_BITMAP_OWNERID | \ DIR_BITMAP_GROUPID | \ DIR_BITMAP_ACCESSRIGHTS)
#define FILE_VALID_SET_PARMS (FD_VALID_SET_PARMS)
// We have no way of knowing what the ASP buffer size on the client end is,
// from trial and error it appears to be less than 578
#define MAX_CATSEARCH_REPLY 512
// Valid Request (search criteria) bitmaps for AfpCatSearch
#define FD_VALID_SEARCH_CRITERIA (FD_BITMAP_PARENT_DIRID | \
FD_BITMAP_CREATETIME | \ FD_BITMAP_MODIFIEDTIME | \ FD_BITMAP_BACKUPTIME | \ FD_BITMAP_FINDERINFO | \ FD_BITMAP_LONGNAME)
#define FILE_VALID_SEARCH_CRITERIA (FD_VALID_SEARCH_CRITERIA | \
FD_BITMAP_ATTR | \ FILE_BITMAP_DATALEN | \ FILE_BITMAP_RESCLEN)
#define DIR_VALID_SEARCH_CRITERIA (FD_VALID_SEARCH_CRITERIA | \
FD_BITMAP_ATTR | \ DIR_BITMAP_OFFSPRINGS)
// The only valid information that can be requested as a result of a
// AfpCatSearch is the parent dirid and the longname of the file/dir found.
#define FD_VALID_SEARCH_RESULT (FD_BITMAP_PARENT_DIRID | \
FD_BITMAP_LONGNAME)
// Common File and Directory attribute definitions
#define FD_BITMAP_ATTR_INVISIBLE 0x0001
#define FD_BITMAP_ATTR_SYSTEM 0x0004
#define FD_BITMAP_ATTR_BACKUPNEED 0x0040
#define FD_BITMAP_ATTR_RENAMEINH 0x0080
#define FD_BITMAP_ATTR_DELETEINH 0x0100
#define FD_BITMAP_ATTR_SET 0x8000
// File specific attribute definitions
#define FILE_BITMAP_ATTR_MULTIUSER 0x0002
#define FILE_BITMAP_ATTR_DATAOPEN 0x0008
#define FILE_BITMAP_ATTR_RESCOPEN 0x0010
#define FILE_BITMAP_ATTR_WRITEINH 0x0020
#define FILE_BITMAP_ATTR_COPYPROT 0x0400
#define FD_VALID_ATTR (FD_BITMAP_ATTR_SET | \
FD_BITMAP_ATTR_DELETEINH | \ FILE_BITMAP_ATTR_WRITEINH | \ FD_BITMAP_ATTR_RENAMEINH | \ FD_BITMAP_ATTR_BACKUPNEED | \ FD_BITMAP_ATTR_INVISIBLE | \ FD_BITMAP_ATTR_SYSTEM)
// File/Dir Attributes that map onto the NT ReadOnly attribute
#define FD_BITMAP_ATTR_NT_RO (FD_BITMAP_ATTR_RENAMEINH | \
FD_BITMAP_ATTR_DELETEINH | \ FILE_BITMAP_ATTR_WRITEINH)
// This is the set of attributes that are part DfeEntry
#define AFP_FORK_ATTRIBUTES (FILE_BITMAP_ATTR_DATAOPEN | \
FILE_BITMAP_ATTR_RESCOPEN)
// Dir Attributes that can only be changed *from their current settings*
// by the owner of the directory
#define DIR_BITMAP_ATTR_CHG_X_OWNER_ONLY (FD_BITMAP_ATTR_RENAMEINH | \
FD_BITMAP_ATTR_DELETEINH | \ FD_BITMAP_ATTR_INVISIBLE | \ FILE_BITMAP_ATTR_WRITEINH)
// These are the OpenAccess bits that encode the FILEIO_ACCESS_XXX values
// into the Bitmap parameter so that the pathmap code can open the file/dir
// (under impersonation) with the appropriate access for each AFP API.
// We also encode the access needed by the AdminDirectory Get/Set apis for
// when admin calls into pathmap.
#define FD_INTERNAL_BITMAP_SKIP_IMPERSONATION 0x00200000
#define FD_INTERNAL_BITMAP_OPENFORK_RESC 0x00400000
// Tells pathmap code whether it should return the paths in the
// PATHMAPENTITY structure for APIs which will cause disk changes that will
// cause a change notify to complete.
#define FD_INTERNAL_BITMAP_RETURN_PMEPATHS 0x00800000
// AdminDirectoryGetInfo: FILE_READ_ATTRIBUTES | READ_CONTROL | SYNCHRONIZE
#define FD_INTERNAL_BITMAP_OPENACCESS_ADMINGET 0x01000000
// AdminDirectorySetInfo: same as ADMINGET plus the following:
// FILE_WRITE_ATTRIBUTES | WRITE_DAC | WRITE_OWNER
#define FD_INTERNAL_BITMAP_OPENACCESS_ADMINSET 0x02000000
#define FD_INTERNAL_BITMAP_OPENACCESS_READCTRL 0x04000000 //READ_CONTROL+FILEIO_ACCESS_NONE
#define FD_INTERNAL_BITMAP_OPENACCESS_RWCTRL 0x08000000 //READ_CONTROL+WRITE_CONTROL+FILEIO_ACCESS_NONE
#define FD_INTERNAL_BITMAP_OPENACCESS_READ 0x10000000 //FILEIO_ACCESS_READ
#define FD_INTERNAL_BITMAP_OPENACCESS_WRITE 0x20000000 //FILEIO_ACCESS_WRITE
#define FD_INTERNAL_BITMAP_OPENACCESS_RW_ATTR 0x40000000 //FILE_WRITE_ATTRIBUTES+FILEIO_ACCESS_NONE
#define FD_INTERNAL_BITMAP_OPENACCESS_DELETE 0x80000000 //FILEIO_ACCESS_DELETE
#define FD_INTERNAL_BITMAP_OPENACCESS_READWRITE ( \
FD_INTERNAL_BITMAP_OPENACCESS_READ | \ FD_INTERNAL_BITMAP_OPENACCESS_WRITE)
#define FD_INTERNAL_BITMAP_OPENACCESS_ALL ( \
FD_INTERNAL_BITMAP_OPENACCESS_ADMINGET | \ FD_INTERNAL_BITMAP_OPENACCESS_ADMINSET | \ FD_INTERNAL_BITMAP_OPENACCESS_READCTRL | \ FD_INTERNAL_BITMAP_OPENACCESS_RWCTRL | \ FD_INTERNAL_BITMAP_OPENACCESS_READ | \ FD_INTERNAL_BITMAP_OPENACCESS_WRITE | \ FD_INTERNAL_BITMAP_OPENACCESS_RW_ATTR | \ FD_INTERNAL_BITMAP_OPENACCESS_DELETE)
// These are the DenyMode bits that encode the FILEIO_DENY_XXX values
// into the Bitmap parameter so that the pathmap code can open the fork
// with the appropriate deny modes when mac is calling FpOpenFork. Pathmap
// will shift these bits right by FD_INTERNAL_BITMAP_DENYMODE_SHIFT and use
// the value as an index into the AfpDenyModes array to come up with the
// correct deny mode to open the fork with. Note how these bit values
// correspond to the FORK_DENY_xxx bits in forks.h
#define FD_INTERNAL_BITMAP_DENYMODE_READ 0x00010000 //FILEIO_DENY_READ
#define FD_INTERNAL_BITMAP_DENYMODE_WRITE 0x00020000 //FILEIO_DENY_WRITE
#define FD_INTERNAL_BITMAP_DENYMODE_ALL ( \
FD_INTERNAL_BITMAP_DENYMODE_READ | \ FD_INTERNAL_BITMAP_DENYMODE_WRITE)
// Number of bits to shift right in order to get the correct index into the
// AfpDenyModes array
#define FD_INTERNAL_BITMAP_DENYMODE_SHIFT 16
// This gets returned as part of GetFileDirParms
#define FILEDIR_FLAG_DIR 0x80
#define FILEDIR_FLAG_FILE 0x00
// Directory Access Permissions
#define DIR_ACCESS_SEARCH 0x01 // See Folders
#define DIR_ACCESS_READ 0x02 // See Files
#define DIR_ACCESS_WRITE 0x04 // Make Changes
#define DIR_ACCESS_OWNER 0x80 // Only for user
// if he has owner rights
#define OWNER_BITS_ALL 0x00808080
// Mask used to clear owner bit for
// Owner/Group/World. We are only
// required to report this bit for
// 'ThisUser'
#define DIR_ACCESS_ALL (DIR_ACCESS_READ | \
DIR_ACCESS_SEARCH | \ DIR_ACCESS_WRITE)
#define OWNER_RIGHTS_SHIFT 0
#define GROUP_RIGHTS_SHIFT 8
#define WORLD_RIGHTS_SHIFT 16
#define USER_RIGHTS_SHIFT 24
typedef struct _FileDirParms { DWORD _fdp_AfpId; DWORD _fdp_ParentId; DWORD _fdp_Flags; // one of DFE_FLAGS_DFBITS
USHORT _fdp_Attr; USHORT _fdp_EffectiveAttr; // After any additions/subtractions
AFPTIME _fdp_CreateTime; AFPTIME _fdp_ModifiedTime; AFPTIME _fdp_BackupTime;
union { struct { DWORD _fdp_DataForkLen; DWORD _fdp_RescForkLen; }; struct { DWORD _fdp_FileCount; DWORD _fdp_DirCount; DWORD _fdp_OwnerId; DWORD _fdp_GroupId; }; };
FINDERINFO _fdp_FinderInfo; ANSI_STRING _fdp_LongName; // Name of the entity (Not fully qualified)
ANSI_STRING _fdp_ShortName; PRODOSINFO _fdp_ProDosInfo;
BOOLEAN _fdp_UserIsMemberOfDirGroup; BOOLEAN _fdp_UserIsOwner;
union { struct { BYTE _fdp_OwnerRights; // The Rights bytes must be in the order
BYTE _fdp_GroupRights; // of Owner,Group,World,User
BYTE _fdp_WorldRights; BYTE _fdp_UserRights; }; DWORD _fdp_Rights; // All rights accessed as a single entity
};
BOOLEAN _fdp_fPartialName; // For FpCatSearch partial name flag
BYTE _fdp_LongNameBuf [AFP_LONGNAME_LEN+1]; BYTE _fdp_ShortNameBuf[AFP_SHORTNAME_LEN+1]; } FILEDIRPARM, *PFILEDIRPARM;
#define IsDir(pFDParm) (BOOLEAN)(((pFDParm)->_fdp_Flags & DFE_FLAGS_DIR) == DFE_FLAGS_DIR)
#define AfpInitializeFDParms(pFDParms) \
(pFDParms)->_fdp_LongName.MaximumLength = AFP_LONGNAME_LEN+1; \ (pFDParms)->_fdp_LongName.Length = 0; \ (pFDParms)->_fdp_LongName.Buffer = (pFDParms)->_fdp_LongNameBuf;\ (pFDParms)->_fdp_ShortName.MaximumLength = AFP_SHORTNAME_LEN+1; \ (pFDParms)->_fdp_ShortName.Length = 0; \ (pFDParms)->_fdp_ShortName.Buffer = (pFDParms)->_fdp_ShortNameBuf;
extern USHORT AfpGetFileDirParmsReplyLength( IN PFILEDIRPARM pFDParm, IN DWORD Bitmap );
extern VOID AfpPackFileDirParms( IN PFILEDIRPARM pFileDirParm, IN DWORD Bitmap, OUT PBYTE pBuffer );
extern AFPSTATUS AfpUnpackFileDirParms( IN PBYTE pBuffer, IN LONG Length, IN PDWORD pBitmap, OUT PFILEDIRPARM pFileDirParm );
extern AFPSTATUS AfpSetFileDirParms( IN PVOLDESC pVolDesc, IN struct _PathMapEntity * pPME, IN DWORD Bitmap, IN PFILEDIRPARM pFDParm );
extern USHORT AfpConvertNTAttrToAfpAttr( IN DWORD Attr );
extern DWORD AfpConvertAfpAttrToNTAttr( IN USHORT Attr );
extern VOID AfpNormalizeAfpAttr( IN OUT PFILEDIRPARM pFDParm, IN DWORD NtAttr );
extern DWORD AfpMapFDBitmapOpenAccess( IN DWORD Bitmap, IN BOOLEAN IsDir );
extern AFPSTATUS AfpQuerySecurityIdsAndRights( IN PSDA pSda, IN PFILESYSHANDLE FSHandle, IN DWORD Bitmap, IN OUT PFILEDIRPARM pFDParm );
extern AFPSTATUS AfpCheckForInhibit( IN PFILESYSHANDLE hData, IN DWORD InhibitBit, IN DWORD AfpAttr, OUT PDWORD pNTAttr );
extern AFPSTATUS AfpUnpackCatSearchSpecs( IN PBYTE pBuffer, // Pointer to beginning of Spec data
IN USHORT BufLength, // Length of Spec1 + Spec2 data
IN DWORD Bitmap, OUT PFILEDIRPARM pFDParm1, OUT PFILEDIRPARM pFDParm2, OUT PUNICODE_STRING pMatchString );
extern SHORT AfpIsCatSearchMatch( IN PDFENTRY pDFE, IN DWORD Bitmap, // Search criteria
IN DWORD ReplyBitmap, // Info to return
IN PFILEDIRPARM pFDParm1, IN PFILEDIRPARM pFDParm2, IN PUNICODE_STRING pMatchName OPTIONAL );
#endif // _FDPARM
|