|
|
/*
Copyright (c) 1992 Microsoft Corporation
Module Name:
afpinfo.h
Abstract:
This module contains the AfpInfo stream definitions.
Author:
Jameel Hyder (microsoft!jameelh)
Revision History: 25 Apr 1992 Initial Version
Notes: Tab stop: 4 --*/
#ifndef _AFPINFO_
#define _AFPINFO_
typedef struct _AfpInfo { DWORD afpi_Signature; // Signature
LONG afpi_Version; // Version
DWORD afpi_Id; // AFP File or directory Id
DWORD afpi_BackupTime; // Backup time for the file/dir
// (Volume backup time is stored
// in the AFP_IdIndex stream)
FINDERINFO afpi_FinderInfo; // Finder Info (32 bytes)
PRODOSINFO afpi_ProDosInfo; // ProDos Info (6 bytes)
USHORT afpi_Attributes; // Attributes mask (maps ReadOnly)
BYTE afpi_AccessOwner; // Access mask (SFI vs. SFO)
BYTE afpi_AccessGroup; // Directories only
BYTE afpi_AccessWorld; } AFPINFO, *PAFPINFO;
//
// Initialize a AFPINFO structure with default values
//
// VOID
// AfpInitAfpInfo(
// IN PAFPINFO pAfpInfo,
// IN DWORD AfpId OPTIONAL, // 0 if we don't yet know the AFP Id
// IN BOOLEAN IsDir
// )
//
#define AfpInitAfpInfo(_pAfpInfo, _AfpId, _IsDir, _BackupTime) \
{ \ RtlZeroMemory(&(_pAfpInfo)->afpi_FinderInfo, \ sizeof(FINDERINFO)+sizeof(PRODOSINFO)+sizeof(USHORT)); \ (_pAfpInfo)->afpi_Signature = AFP_SERVER_SIGNATURE; \ (_pAfpInfo)->afpi_Version = AFP_SERVER_VERSION; \ (_pAfpInfo)->afpi_BackupTime = (_BackupTime); \ (_pAfpInfo)->afpi_Id = (_AfpId); \ if (_IsDir) \ { \ (_pAfpInfo)->afpi_AccessOwner = \ (_pAfpInfo)->afpi_AccessGroup = \ (_pAfpInfo)->afpi_AccessWorld = DIR_ACCESS_READ | DIR_ACCESS_SEARCH; \ (_pAfpInfo)->afpi_ProDosInfo.pd_FileType[0] = PRODOS_TYPE_DIR;\ (_pAfpInfo)->afpi_ProDosInfo.pd_AuxType[1] = PRODOS_AUX_DIR;\ } \ else \ { \ (_pAfpInfo)->afpi_ProDosInfo.pd_FileType[0] = PRODOS_TYPE_FILE; \ } \ }
//
// Open or Create the AFP_AfpInfo stream on a file or directory using a
// relative handle to the DataStream of the file/dir.
// If the stream does not yet exist, create an empty one, else open the
// existing one.
//
// NTSTATUS
// AfpCreateAfpInfo(
// IN PFILESYSHANDLE phDataStream, // handle to data stream of file/dir
// OUT PFILESYSHANDLE phAfpInfo, // handle to AFP_AfpInfo stream
// OUT PDWORD pInformation OPTIONAL // stream was opened/created
// );
//
#define AfpCreateAfpInfo(phDataStream, phAfpInfo,pInformation) \
AfpIoCreate(phDataStream, \ AFP_STREAM_INFO, \ &UNullString, \ FILEIO_ACCESS_READWRITE, \ FILEIO_DENY_NONE, \ FILEIO_OPEN_FILE, \ FILEIO_CREATE_INTERNAL, \ FILE_ATTRIBUTE_NORMAL, \ False, \ NULL, \ phAfpInfo, \ pInformation, \ NULL, \ NULL, \ NULL)
//
// Open or Create the AFP_AfpInfo stream on a file or directory using a
// relative handle to the parent directory, and the name of the file/dir.
// If the stream does not yet exist, create an empty one, else open the
// existing one.
//
// NTSTATUS
// AfpCreateAfpInfoWithNodeName(
// IN PFILESYSHANDLE phRelative, // handle to parent of file/dir
// IN PUNICODE_STRING pUEntityName, // file/dir name of entity
// IN PVOLDESC pVolDesc, // Volume in question
// OUT PFILESYSHANDLE phAfpInfo, // handle to AFP_AfpInfo stream
// OUT PDWORD pInformation OPTIONAL // stream was opened/created
// );
//
#define AfpCreateAfpInfoWithNodeName(phDataStream, pUEntityName, pNotifyPath, pVolDesc, phAfpInfo, pInformation) \
AfpIoCreate(phDataStream, \ AFP_STREAM_INFO, \ pUEntityName, \ FILEIO_ACCESS_READWRITE,\ FILEIO_DENY_NONE, \ FILEIO_OPEN_FILE, \ FILEIO_CREATE_INTERNAL, \ FILE_ATTRIBUTE_NORMAL, \ False, \ NULL, \ phAfpInfo, \ pInformation, \ pVolDesc, \ pNotifyPath, \ NULL) //
// If we temporarily removed the ReadOnly attribute from a file or directory
// in order to write to the AFP_AfpInfo stream, set the attribute back on.
// (see AfpExamineAndClearROAttr)
//
// VOID
// AfpPutBackROAttr(
// IN PFILESYSHANDLE pfshData, // Handle to data stream of file/dir
// IN BOOLEAN WriteBack // Did we clear the RO bit to begin with?
// );
//
#define AfpPutBackROAttr(pfshData, WriteBack) \
if (WriteBack == True) \ { \ AfpIoSetTimesnAttr(pfshData, NULL, NULL, FILE_ATTRIBUTE_READONLY, 0, NULL, NULL); \ }
extern NTSTATUS FASTCALL AfpReadAfpInfo( IN PFILESYSHANDLE pfshAfpInfo, OUT PAFPINFO pAfpInfo );
//
//extern
//NTSTATUS
//AfpWriteAfpInfo(
// IN PFILESYSHANDLE pfshAfpInfo,
// IN PAFPINFO pAfpInfo
//);
//
#define AfpWriteAfpInfo(pfshAfpInfo,pAfpInfo) \
AfpIoWrite(pfshAfpInfo, &LIZero, sizeof(AFPINFO), (PBYTE)pAfpInfo)
extern VOID FASTCALL AfpSetFinderInfoByExtension( IN PUNICODE_STRING pFileName, OUT PFINDERINFO pFinderInfo );
extern VOID FASTCALL AfpProDosInfoFromFinderInfo( IN PFINDERINFO pFinderInfo, OUT PPRODOSINFO pProDosInfo );
extern VOID FASTCALL AfpFinderInfoFromProDosInfo( IN PPRODOSINFO pProDosInfo, OUT PFINDERINFO pFinderInfo );
extern NTSTATUS AfpSlapOnAfpInfoStream( IN struct _VolDesc * pVolDesc OPTIONAL, IN PUNICODE_STRING pNotifyPath OPTIONAL, IN PFILESYSHANDLE phDataStream, IN PFILESYSHANDLE pfshAfpInfoStream OPTIONAL, IN DWORD AfpId, IN BOOLEAN IsDirectory, IN PUNICODE_STRING pName OPTIONAL, // only needed for files
OUT PAFPINFO pAfpInfo );
extern NTSTATUS AfpCreateAfpInfoStream( IN struct _VolDesc * pVolDesc OPTIONAL, IN PFILESYSHANDLE pfshData, IN DWORD AfpId, IN BOOLEAN IsDirectory, IN PUNICODE_STRING pName OPTIONAL, // only needed for files
IN PUNICODE_STRING pNotifyPath, OUT PAFPINFO pAfpInfo, OUT PFILESYSHANDLE pfshAfpInfo );
extern NTSTATUS FASTCALL AfpExamineAndClearROAttr( IN PFILESYSHANDLE pfshData, OUT PBOOLEAN pWriteBackROAttr, IN struct _VolDesc * pVolDesc OPTIONAL, IN PUNICODE_STRING pPath OPTIONAL );
extern AFPSTATUS AfpSetAfpInfo( IN PFILESYSHANDLE pfshData, // handle to data stream of object
IN DWORD Bitmap, IN struct _FileDirParms * pFDParm, IN struct _VolDesc * pVolDesc OPTIONAL, IN struct _DirFileEntry ** ppDFE OPTIONAL );
extern AFPSTATUS FASTCALL AfpQueryProDos( IN PFILESYSHANDLE pfshData, OUT PPRODOSINFO pProDosInfo );
extern AFPSTATUS FASTCALL AfpUpdateIdInAfpInfo( IN struct _VolDesc * pVolDesc, IN struct _DirFileEntry * pDfEntry );
#endif // _AFPINFO_
|