:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / drivers / fs / np / npfs.h
1 /* $Id$ */
2
3 #ifndef __SERVICES_FS_NP_NPFS_H
4 #define __SERVICES_FS_NP_NPFS_H
5
6
7 typedef struct
8 {
9   LIST_ENTRY PipeListHead;
10   KMUTEX PipeListLock;
11 } NPFS_DEVICE_EXTENSION, *PNPFS_DEVICE_EXTENSION;
12
13 typedef struct
14 {
15   LIST_ENTRY ListEntry;
16   ULONG Size;
17   PVOID Data;
18   ULONG Offset;
19 } NPFS_PIPE_DATA, *PNPFS_PIPE_DATA;
20
21 typedef struct
22 {
23   UNICODE_STRING PipeName;
24   LIST_ENTRY PipeListEntry;
25   KSPIN_LOCK FcbListLock;
26   LIST_ENTRY ServerFcbListHead;
27   LIST_ENTRY ClientFcbListHead;
28   ULONG ReferenceCount;
29   ULONG PipeType;
30   ULONG PipeReadMode;
31   ULONG PipeWriteMode;
32   ULONG PipeBlockMode;
33   ULONG PipeConfiguration;
34   ULONG MaximumInstances;
35   ULONG CurrentInstances;
36   ULONG InboundQuota;
37   ULONG OutboundQuota;
38   LARGE_INTEGER TimeOut;
39 } NPFS_PIPE, *PNPFS_PIPE;
40
41 typedef struct _NPFS_FCB
42 {
43   LIST_ENTRY FcbListEntry;
44   struct _NPFS_FCB* OtherSide;
45   PNPFS_PIPE Pipe;
46   KEVENT ConnectEvent;
47   KEVENT ReadEvent;
48   ULONG PipeEnd;
49   ULONG PipeState;
50   ULONG ReadDataAvailable;
51   ULONG WriteQuotaAvailable;
52
53   LIST_ENTRY DataListHead;      /* Data queue */
54   KSPIN_LOCK DataListLock;      /* Data queue lock */
55 } NPFS_FCB, *PNPFS_FCB;
56
57
58 extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList;
59
60
61 #define KeLockMutex(x) KeWaitForSingleObject(x, \
62                                              UserRequest, \
63                                              KernelMode, \
64                                              FALSE, \
65                                              NULL);
66
67 #define KeUnlockMutex(x) KeReleaseMutex(x, FALSE);
68
69 #define CP DPRINT("\n");
70
71 static inline VOID
72 NpfsFreePipeData(PNPFS_PIPE_DATA PipeData)
73 {
74   if (PipeData->Data)
75     {
76       ExFreePool(PipeData->Data);
77     }
78   ExFreeToNPagedLookasideList(&NpfsPipeDataLookasideList, PipeData);
79 }
80
81
82 NTSTATUS STDCALL NpfsCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
83 NTSTATUS STDCALL NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject, PIRP Irp);
84 NTSTATUS STDCALL NpfsClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
85
86 NTSTATUS STDCALL NpfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
87 NTSTATUS STDCALL NpfsWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
88
89 NTSTATUS STDCALL NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
90
91 NTSTATUS STDCALL NpfsQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
92 NTSTATUS STDCALL NpfsSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
93
94 NTSTATUS STDCALL NpfsQueryVolumeInformation (PDEVICE_OBJECT DeviceObject, PIRP Irp);
95
96 #endif /* __SERVICES_FS_NP_NPFS_H */