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