/* * PROJECT: ReactOS Named Pipe FileSystem * LICENSE: BSD - See COPYING.ARM in the top level directory * FILE: drivers/filesystems/npfs/fileobsup.c * PURPOSE: Pipes File Object Support * PROGRAMMERS: ReactOS Portable Systems Group */ /* INCLUDES *******************************************************************/ #include "npfs.h" // File ID number for NPFS bugchecking support #define NPFS_BUGCHECK_FILE_ID (NPFS_BUGCHECK_FILEOBSUP) /* FUNCTIONS ******************************************************************/ NODE_TYPE_CODE NTAPI NpDecodeFileObject(IN PFILE_OBJECT FileObject, OUT PVOID* PrimaryContext OPTIONAL, OUT PNP_CCB* Ccb, OUT PULONG NamedPipeEnd OPTIONAL) { ULONG_PTR Context; PNP_CCB Node; PAGED_CODE(); Context = (ULONG_PTR)FileObject->FsContext; if ((Context) && (Context != 1)) { if (NamedPipeEnd) *NamedPipeEnd = Context & 1; Node = (PVOID)(Context & ~1); switch (Node->NodeType) { case NPFS_NTC_VCB: return NPFS_NTC_VCB; case NPFS_NTC_ROOT_DCB: *Ccb = FileObject->FsContext2; if (PrimaryContext) *PrimaryContext = Node; return NPFS_NTC_ROOT_DCB; case NPFS_NTC_CCB: *Ccb = Node; if (PrimaryContext) *PrimaryContext = Node->Fcb; return NPFS_NTC_CCB; default: NpBugCheck(Node->NodeType, 0, 0); break; } } return 0; } VOID NTAPI NpSetFileObject(IN PFILE_OBJECT FileObject, IN PVOID PrimaryContext, IN PVOID Ccb, IN ULONG NamedPipeEnd) { BOOLEAN FileIsPipe; PAGED_CODE(); if (!FileObject) return; if ((PrimaryContext) && (((PNP_CCB)PrimaryContext)->NodeType == NPFS_NTC_CCB)) { FileIsPipe = TRUE; if (NamedPipeEnd == FILE_PIPE_SERVER_END) { PrimaryContext = (PVOID) ((ULONG_PTR) PrimaryContext | 1); } } else { FileIsPipe = FALSE; } FileObject->FsContext = PrimaryContext; FileObject->FsContext2 = Ccb; FileObject->PrivateCacheMap = (PVOID)1; if (FileIsPipe) FileObject->Flags |= FO_NAMED_PIPE; } /* EOF */