merge ROS Shell without integrated explorer part into trunk
[reactos.git] / reactos / drivers / fs / np / npfs.h
1 /* $Id$ */
2
3 #ifndef __DRIVERS_FS_NP_NPFS_H
4 #define __DRIVERS_FS_NP_NPFS_H
5
6 typedef struct _NPFS_DEVICE_EXTENSION
7 {
8 LIST_ENTRY PipeListHead;
9 LIST_ENTRY ThreadListHead;
10 KMUTEX PipeListLock;
11 ULONG EmptyWaiterCount;
12 ULONG MinQuota;
13 ULONG DefaultQuota;
14 ULONG MaxQuota;
15 } NPFS_DEVICE_EXTENSION, *PNPFS_DEVICE_EXTENSION;
16
17 typedef struct _NPFS_PIPE
18 {
19 UNICODE_STRING PipeName;
20 LIST_ENTRY PipeListEntry;
21 KMUTEX FcbListLock;
22 LIST_ENTRY ServerFcbListHead;
23 LIST_ENTRY ClientFcbListHead;
24 LIST_ENTRY WaiterListHead;
25 LIST_ENTRY EmptyBufferListHead;
26 ULONG PipeType;
27 ULONG ReadMode;
28 ULONG WriteMode;
29 ULONG CompletionMode;
30 ULONG PipeConfiguration;
31 ULONG MaximumInstances;
32 ULONG CurrentInstances;
33 ULONG InboundQuota;
34 ULONG OutboundQuota;
35 LARGE_INTEGER TimeOut;
36 } NPFS_PIPE, *PNPFS_PIPE;
37
38 typedef struct _NPFS_FCB
39 {
40 LIST_ENTRY FcbListEntry;
41 struct _NPFS_FCB* OtherSide;
42 struct ETHREAD *Thread;
43 PNPFS_PIPE Pipe;
44 KEVENT ConnectEvent;
45 KEVENT ReadEvent;
46 KEVENT WriteEvent;
47 ULONG PipeEnd;
48 ULONG PipeState;
49 ULONG ReadDataAvailable;
50 ULONG WriteQuotaAvailable;
51
52 LIST_ENTRY ReadRequestListHead;
53
54 PVOID Data;
55 PVOID ReadPtr;
56 PVOID WritePtr;
57 ULONG MaxDataLength;
58
59 FAST_MUTEX DataListLock; /* Data queue lock */
60 } NPFS_FCB, *PNPFS_FCB;
61
62 typedef struct _NPFS_CONTEXT
63 {
64 LIST_ENTRY ListEntry;
65 PKEVENT WaitEvent;
66 } NPFS_CONTEXT, *PNPFS_CONTEXT;
67
68 typedef struct _NPFS_THREAD_CONTEXT
69 {
70 ULONG Count;
71 KEVENT Event;
72 PNPFS_DEVICE_EXTENSION DeviceExt;
73 LIST_ENTRY ListEntry;
74 PVOID WaitObjectArray[MAXIMUM_WAIT_OBJECTS];
75 KWAIT_BLOCK WaitBlockArray[MAXIMUM_WAIT_OBJECTS];
76 PIRP WaitIrpArray[MAXIMUM_WAIT_OBJECTS];
77 } NPFS_THREAD_CONTEXT, *PNPFS_THREAD_CONTEXT;
78
79 typedef struct _NPFS_WAITER_ENTRY
80 {
81 LIST_ENTRY Entry;
82 PNPFS_FCB Fcb;
83 } NPFS_WAITER_ENTRY, *PNPFS_WAITER_ENTRY;
84
85
86 extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList;
87
88
89 #define KeLockMutex(x) KeWaitForSingleObject(x, \
90 UserRequest, \
91 KernelMode, \
92 FALSE, \
93 NULL);
94
95 #define KeUnlockMutex(x) KeReleaseMutex(x, FALSE);
96
97
98 NTSTATUS STDCALL NpfsCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
99 NTSTATUS STDCALL NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject, PIRP Irp);
100 NTSTATUS STDCALL NpfsCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp);
101 NTSTATUS STDCALL NpfsClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
102
103 NTSTATUS STDCALL NpfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
104 NTSTATUS STDCALL NpfsWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
105
106 NTSTATUS STDCALL NpfsFlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp);
107
108 NTSTATUS STDCALL NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
109
110 NTSTATUS STDCALL NpfsQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
111 NTSTATUS STDCALL NpfsSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
112
113 NTSTATUS STDCALL NpfsQueryVolumeInformation (PDEVICE_OBJECT DeviceObject, PIRP Irp);
114
115 #endif /* __DRIVERS_FS_NP_NPFS_H */