1 #ifndef __DRIVERS_FS_NP_NPFS_H
2 #define __DRIVERS_FS_NP_NPFS_H
5 #include <ndk/iotypes.h>
6 #include <pseh/pseh2.h>
8 #define TAG_NPFS_CCB 'cFpN'
9 #define TAG_NPFS_CCB_DATA 'iFpN' /* correct? */
10 #define TAG_NPFS_FCB 'FFpN'
11 #define TAG_NPFS_NAMEBLOCK 'nFpN'
12 #define TAG_NPFS_THREAD_CONTEXT 'tFpN'
14 #define ROUND_DOWN(n, align) \
15 (((ULONG)n) & ~((align) - 1l))
17 #define ROUND_UP(n, align) \
18 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
20 typedef enum _FCB_TYPE
28 typedef enum _CCB_TYPE
36 /* Volume Control Block (VCB) aka Device Extension */
37 typedef struct _NPFS_VCB
39 LIST_ENTRY PipeListHead
;
40 LIST_ENTRY ThreadListHead
;
42 ULONG EmptyWaiterCount
;
46 struct _NPFS_FCB
*DeviceFcb
;
47 struct _NPFS_FCB
*RootFcb
;
48 } NPFS_VCB
, *PNPFS_VCB
;
50 typedef struct _NPFS_FCB
54 UNICODE_STRING PipeName
;
55 LIST_ENTRY PipeListEntry
;
57 LIST_ENTRY ServerCcbListHead
;
58 LIST_ENTRY ClientCcbListHead
;
59 LIST_ENTRY WaiterListHead
;
60 LIST_ENTRY EmptyBufferListHead
;
65 ULONG PipeConfiguration
;
66 ULONG MaximumInstances
;
67 ULONG CurrentInstances
;
70 LARGE_INTEGER TimeOut
;
71 } NPFS_FCB
, *PNPFS_FCB
;
74 typedef struct _NPFS_CCB_DIRECTORY_DATA
76 UNICODE_STRING SearchPattern
;
78 } NPFS_CCB_DIRECTORY_DATA
, *PNPFS_CCB_DIRECTORY_DATA
;
81 typedef struct _NPFS_CCB
83 LIST_ENTRY CcbListEntry
;
87 struct _NPFS_CCB
* OtherSide
;
88 struct ETHREAD
*Thread
;
94 ULONG ReadDataAvailable
;
95 ULONG WriteQuotaAvailable
;
98 LIST_ENTRY ReadRequestListHead
;
105 FAST_MUTEX DataListLock
; /* Data queue lock */
109 NPFS_CCB_DIRECTORY_DATA Directory
;
112 } NPFS_CCB
, *PNPFS_CCB
;
114 typedef struct _NPFS_CONTEXT
116 LIST_ENTRY ListEntry
;
118 } NPFS_CONTEXT
, *PNPFS_CONTEXT
;
120 typedef struct _NPFS_THREAD_CONTEXT
125 LIST_ENTRY ListEntry
;
126 PVOID WaitObjectArray
[MAXIMUM_WAIT_OBJECTS
];
127 KWAIT_BLOCK WaitBlockArray
[MAXIMUM_WAIT_OBJECTS
];
128 PIRP WaitIrpArray
[MAXIMUM_WAIT_OBJECTS
];
129 } NPFS_THREAD_CONTEXT
, *PNPFS_THREAD_CONTEXT
;
131 typedef struct _NPFS_WAITER_ENTRY
135 } NPFS_WAITER_ENTRY
, *PNPFS_WAITER_ENTRY
;
138 extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList
;
141 #define KeLockMutex(x) KeWaitForSingleObject(x, \
147 #define KeUnlockMutex(x) KeReleaseMutex(x, FALSE);
149 #define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
151 DRIVER_DISPATCH NpfsCreate
;
152 NTSTATUS NTAPI
NpfsCreate(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
154 DRIVER_DISPATCH NpfsCreateNamedPipe
;
155 NTSTATUS NTAPI
NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
157 DRIVER_DISPATCH NpfsCleanup
;
158 NTSTATUS NTAPI
NpfsCleanup(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
160 DRIVER_DISPATCH NpfsClose
;
161 NTSTATUS NTAPI
NpfsClose(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
163 DRIVER_DISPATCH NpfsDirectoryControl
;
164 NTSTATUS NTAPI
NpfsDirectoryControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
166 DRIVER_DISPATCH NpfsRead
;
167 NTSTATUS NTAPI
NpfsRead(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
169 DRIVER_DISPATCH NpfsWrite
;
170 NTSTATUS NTAPI
NpfsWrite(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
172 DRIVER_DISPATCH NpfsFlushBuffers
;
173 NTSTATUS NTAPI
NpfsFlushBuffers(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
175 DRIVER_DISPATCH NpfsFileSystemControl
;
176 NTSTATUS NTAPI
NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
178 DRIVER_DISPATCH NpfsQueryInformation
;
179 NTSTATUS NTAPI
NpfsQueryInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
181 DRIVER_DISPATCH NpfsSetInformation
;
182 NTSTATUS NTAPI
NpfsSetInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
184 DRIVER_DISPATCH NpfsQueryVolumeInformation
;
185 NTSTATUS NTAPI
NpfsQueryVolumeInformation (PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
188 DriverEntry(PDRIVER_OBJECT DriverObject
,
189 PUNICODE_STRING RegistryPath
);
192 NpfsFindPipe(PNPFS_VCB Vcb
,
193 PUNICODE_STRING PipeName
);
196 NpfsGetFcb(PFILE_OBJECT FileObject
,
200 NpfsGetCcb(PFILE_OBJECT FileObject
,
203 #endif /* __DRIVERS_FS_NP_NPFS_H */