257 lines
6.5 KiB
C
257 lines
6.5 KiB
C
/*
|
||
|
||
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_
|
||
|
||
|