Sync with trunk r47129
[reactos.git] / drivers / filesystems / npfs / npfs.h
1 #ifndef __DRIVERS_FS_NP_NPFS_H
2 #define __DRIVERS_FS_NP_NPFS_H
3
4 #include <ntifs.h>
5 #include <ndk/iotypes.h>
6
7 typedef struct _NPFS_DEVICE_EXTENSION
8 {
9 LIST_ENTRY PipeListHead;
10 LIST_ENTRY ThreadListHead;
11 KMUTEX PipeListLock;
12 ULONG EmptyWaiterCount;
13 ULONG MinQuota;
14 ULONG DefaultQuota;
15 ULONG MaxQuota;
16 } NPFS_DEVICE_EXTENSION, *PNPFS_DEVICE_EXTENSION;
17
18 typedef struct _NPFS_FCB
19 {
20 FSRTL_COMMON_FCB_HEADER RFCB;
21 UNICODE_STRING PipeName;
22 LIST_ENTRY PipeListEntry;
23 KMUTEX CcbListLock;
24 LIST_ENTRY ServerCcbListHead;
25 LIST_ENTRY ClientCcbListHead;
26 LIST_ENTRY WaiterListHead;
27 LIST_ENTRY EmptyBufferListHead;
28 ULONG PipeType;
29 ULONG ClientReadMode;
30 ULONG ServerReadMode;
31 ULONG CompletionMode;
32 ULONG PipeConfiguration;
33 ULONG MaximumInstances;
34 ULONG CurrentInstances;
35 ULONG InboundQuota;
36 ULONG OutboundQuota;
37 LARGE_INTEGER TimeOut;
38 } NPFS_FCB, *PNPFS_FCB;
39
40 typedef struct _NPFS_CCB
41 {
42 LIST_ENTRY CcbListEntry;
43 struct _NPFS_CCB* OtherSide;
44 struct ETHREAD *Thread;
45 PNPFS_FCB Fcb;
46 KEVENT ConnectEvent;
47 KEVENT ReadEvent;
48 KEVENT WriteEvent;
49 ULONG PipeEnd;
50 ULONG PipeState;
51 ULONG ReadDataAvailable;
52 ULONG WriteQuotaAvailable;
53
54 LIST_ENTRY ReadRequestListHead;
55
56 PVOID Data;
57 PVOID ReadPtr;
58 PVOID WritePtr;
59 ULONG MaxDataLength;
60
61 FAST_MUTEX DataListLock; /* Data queue lock */
62 } NPFS_CCB, *PNPFS_CCB;
63
64 typedef struct _NPFS_CONTEXT
65 {
66 LIST_ENTRY ListEntry;
67 PKEVENT WaitEvent;
68 } NPFS_CONTEXT, *PNPFS_CONTEXT;
69
70 typedef struct _NPFS_THREAD_CONTEXT
71 {
72 ULONG Count;
73 KEVENT Event;
74 PNPFS_DEVICE_EXTENSION DeviceExt;
75 LIST_ENTRY ListEntry;
76 PVOID WaitObjectArray[MAXIMUM_WAIT_OBJECTS];
77 KWAIT_BLOCK WaitBlockArray[MAXIMUM_WAIT_OBJECTS];
78 PIRP WaitIrpArray[MAXIMUM_WAIT_OBJECTS];
79 } NPFS_THREAD_CONTEXT, *PNPFS_THREAD_CONTEXT;
80
81 typedef struct _NPFS_WAITER_ENTRY
82 {
83 LIST_ENTRY Entry;
84 PNPFS_CCB Ccb;
85 } NPFS_WAITER_ENTRY, *PNPFS_WAITER_ENTRY;
86
87
88 extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList;
89
90
91 #define KeLockMutex(x) KeWaitForSingleObject(x, \
92 UserRequest, \
93 KernelMode, \
94 FALSE, \
95 NULL);
96
97 #define KeUnlockMutex(x) KeReleaseMutex(x, FALSE);
98
99 #define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
100
101 DRIVER_DISPATCH NpfsCreate;
102 NTSTATUS NTAPI NpfsCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
103
104 DRIVER_DISPATCH NpfsCreateNamedPipe;
105 NTSTATUS NTAPI NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject, PIRP Irp);
106
107 DRIVER_DISPATCH NpfsCleanup;
108 NTSTATUS NTAPI NpfsCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp);
109
110 DRIVER_DISPATCH NpfsClose;
111 NTSTATUS NTAPI NpfsClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
112
113 DRIVER_DISPATCH NpfsRead;
114 NTSTATUS NTAPI NpfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
115
116 DRIVER_DISPATCH NpfsWrite;
117 NTSTATUS NTAPI NpfsWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
118
119 DRIVER_DISPATCH NpfsFlushBuffers;
120 NTSTATUS NTAPI NpfsFlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp);
121
122 DRIVER_DISPATCH NpfsFileSystemControl;
123 NTSTATUS NTAPI NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
124
125 DRIVER_DISPATCH NpfsQueryInformation;
126 NTSTATUS NTAPI NpfsQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
127
128 DRIVER_DISPATCH NpfsSetInformation;
129 NTSTATUS NTAPI NpfsSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
130
131 DRIVER_DISPATCH NpfsQueryVolumeInformation;
132 NTSTATUS NTAPI NpfsQueryVolumeInformation (PDEVICE_OBJECT DeviceObject, PIRP Irp);
133
134 NTSTATUS NTAPI
135 DriverEntry(PDRIVER_OBJECT DriverObject,
136 PUNICODE_STRING RegistryPath);
137
138 #endif /* __DRIVERS_FS_NP_NPFS_H */