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_
|
|||
|
|
|||
|
|