--- /dev/null
+/*
+ * 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 */