f7e70f463ca9705117aa20e9865a39797bd73b60
[reactos.git] / reactos / 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 * Hacky support for delayed closing of pipes. We need this to support
8 * reading from pipe the was closed on one end.
9 */
10 #define FIN_WORKAROUND_READCLOSE
11
12 typedef struct _NPFS_DEVICE_EXTENSION
13 {
14 LIST_ENTRY PipeListHead;
15 KMUTEX PipeListLock;
16 ULONG MinQuota;
17 ULONG DefaultQuota;
18 ULONG MaxQuota;
19 } NPFS_DEVICE_EXTENSION, *PNPFS_DEVICE_EXTENSION;
20
21 typedef struct _NPFS_PIPE
22 {
23 UNICODE_STRING PipeName;
24 LIST_ENTRY PipeListEntry;
25 KMUTEX FcbListLock;
26 LIST_ENTRY ServerFcbListHead;
27 LIST_ENTRY ClientFcbListHead;
28 ULONG PipeType;
29 ULONG ReadMode;
30 ULONG WriteMode;
31 ULONG CompletionMode;
32 ULONG PipeConfiguration;
33 ULONG MaximumInstances;
34 ULONG CurrentInstances;
35 ULONG InboundQuota;
36 ULONG OutboundQuota;
37 LARGE_INTEGER TimeOut;
38 } NPFS_PIPE, *PNPFS_PIPE;
39
40 typedef struct _NPFS_FCB
41 {
42 LIST_ENTRY FcbListEntry;
43 struct _NPFS_FCB* OtherSide;
44 struct ETHREAD *Thread;
45 PNPFS_PIPE Pipe;
46 KEVENT ConnectEvent;
47 KEVENT Event;
48 ULONG PipeEnd;
49 ULONG PipeState;
50 ULONG ReadDataAvailable;
51 ULONG WriteQuotaAvailable;
52
53 PVOID Data;
54 PVOID ReadPtr;
55 PVOID WritePtr;
56 ULONG MaxDataLength;
57
58 KSPIN_LOCK DataListLock; /* Data queue lock */
59 } NPFS_FCB, *PNPFS_FCB;
60
61
62 extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList;
63
64
65 #define KeLockMutex(x) KeWaitForSingleObject(x, \
66 UserRequest, \
67 KernelMode, \
68 FALSE, \
69 NULL);
70
71 #define KeUnlockMutex(x) KeReleaseMutex(x, FALSE);
72
73 #define CP DPRINT("\n");
74
75
76 NTSTATUS STDCALL NpfsCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
77 NTSTATUS STDCALL NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject, PIRP Irp);
78 NTSTATUS STDCALL NpfsClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
79
80 NTSTATUS STDCALL NpfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
81 NTSTATUS STDCALL NpfsWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
82
83 NTSTATUS STDCALL NpfsFlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp);
84
85 NTSTATUS STDCALL NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
86
87 NTSTATUS STDCALL NpfsQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
88 NTSTATUS STDCALL NpfsSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
89
90 NTSTATUS STDCALL NpfsQueryVolumeInformation (PDEVICE_OBJECT DeviceObject, PIRP Irp);
91
92 #endif /* __SERVICES_FS_NP_NPFS_H */