1 #ifndef __DRIVERS_FS_NP_NPFS_H
2 #define __DRIVERS_FS_NP_NPFS_H
5 #include <ndk/iotypes.h>
6 #include <pseh/pseh2.h>
16 typedef enum _CCB_TYPE
24 /* Volume Control Block (VCB) aka Device Extension */
25 typedef struct _NPFS_VCB
27 LIST_ENTRY PipeListHead
;
28 LIST_ENTRY ThreadListHead
;
30 ULONG EmptyWaiterCount
;
34 struct _NPFS_FCB
*DeviceFcb
;
35 struct _NPFS_FCB
*RootFcb
;
36 } NPFS_VCB
, *PNPFS_VCB
;
38 typedef struct _NPFS_FCB
42 UNICODE_STRING PipeName
;
43 LIST_ENTRY PipeListEntry
;
45 LIST_ENTRY ServerCcbListHead
;
46 LIST_ENTRY ClientCcbListHead
;
47 LIST_ENTRY WaiterListHead
;
48 LIST_ENTRY EmptyBufferListHead
;
53 ULONG PipeConfiguration
;
54 ULONG MaximumInstances
;
55 ULONG CurrentInstances
;
58 LARGE_INTEGER TimeOut
;
59 } NPFS_FCB
, *PNPFS_FCB
;
62 typedef struct _NPFS_CCB_DIRECTORY_DATA
64 UNICODE_STRING SearchPattern
;
66 } NPFS_CCB_DIRECTORY_DATA
, *PNPFS_CCB_DIRECTORY_DATA
;
69 typedef struct _NPFS_CCB
71 LIST_ENTRY CcbListEntry
;
75 struct _NPFS_CCB
* OtherSide
;
76 struct ETHREAD
*Thread
;
82 ULONG ReadDataAvailable
;
83 ULONG WriteQuotaAvailable
;
85 LIST_ENTRY ReadRequestListHead
;
92 FAST_MUTEX DataListLock
; /* Data queue lock */
96 NPFS_CCB_DIRECTORY_DATA Directory
;
99 } NPFS_CCB
, *PNPFS_CCB
;
101 typedef struct _NPFS_CONTEXT
103 LIST_ENTRY ListEntry
;
105 } NPFS_CONTEXT
, *PNPFS_CONTEXT
;
107 typedef struct _NPFS_THREAD_CONTEXT
112 LIST_ENTRY ListEntry
;
113 PVOID WaitObjectArray
[MAXIMUM_WAIT_OBJECTS
];
114 KWAIT_BLOCK WaitBlockArray
[MAXIMUM_WAIT_OBJECTS
];
115 PIRP WaitIrpArray
[MAXIMUM_WAIT_OBJECTS
];
116 } NPFS_THREAD_CONTEXT
, *PNPFS_THREAD_CONTEXT
;
118 typedef struct _NPFS_WAITER_ENTRY
122 } NPFS_WAITER_ENTRY
, *PNPFS_WAITER_ENTRY
;
125 extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList
;
128 #define KeLockMutex(x) KeWaitForSingleObject(x, \
134 #define KeUnlockMutex(x) KeReleaseMutex(x, FALSE);
136 #define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
138 DRIVER_DISPATCH NpfsCreate
;
139 NTSTATUS NTAPI
NpfsCreate(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
141 DRIVER_DISPATCH NpfsCreateNamedPipe
;
142 NTSTATUS NTAPI
NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
144 DRIVER_DISPATCH NpfsCleanup
;
145 NTSTATUS NTAPI
NpfsCleanup(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
147 DRIVER_DISPATCH NpfsClose
;
148 NTSTATUS NTAPI
NpfsClose(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
150 DRIVER_DISPATCH NpfsDirectoryControl
;
151 NTSTATUS NTAPI
NpfsDirectoryControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
153 DRIVER_DISPATCH NpfsRead
;
154 NTSTATUS NTAPI
NpfsRead(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
156 DRIVER_DISPATCH NpfsWrite
;
157 NTSTATUS NTAPI
NpfsWrite(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
159 DRIVER_DISPATCH NpfsFlushBuffers
;
160 NTSTATUS NTAPI
NpfsFlushBuffers(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
162 DRIVER_DISPATCH NpfsFileSystemControl
;
163 NTSTATUS NTAPI
NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
165 DRIVER_DISPATCH NpfsQueryInformation
;
166 NTSTATUS NTAPI
NpfsQueryInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
168 DRIVER_DISPATCH NpfsSetInformation
;
169 NTSTATUS NTAPI
NpfsSetInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
171 DRIVER_DISPATCH NpfsQueryVolumeInformation
;
172 NTSTATUS NTAPI
NpfsQueryVolumeInformation (PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
175 DriverEntry(PDRIVER_OBJECT DriverObject
,
176 PUNICODE_STRING RegistryPath
);
179 NpfsFindPipe(PNPFS_VCB Vcb
,
180 PUNICODE_STRING PipeName
);
183 NpfsGetFcb(PFILE_OBJECT FileObject
,
187 NpfsGetCcb(PFILE_OBJECT FileObject
,
190 #endif /* __DRIVERS_FS_NP_NPFS_H */