1 #ifndef __DRIVERS_FS_NP_NPFS_H
2 #define __DRIVERS_FS_NP_NPFS_H
5 #include <ndk/iotypes.h>
14 typedef enum _CCB_TYPE
21 /* Volume Control Block (VCB) aka Device Extension */
22 typedef struct _NPFS_VCB
24 LIST_ENTRY PipeListHead
;
25 LIST_ENTRY ThreadListHead
;
27 ULONG EmptyWaiterCount
;
31 struct _NPFS_FCB
*RootFcb
;
32 } NPFS_VCB
, *PNPFS_VCB
;
34 typedef struct _NPFS_FCB
38 UNICODE_STRING PipeName
;
39 LIST_ENTRY PipeListEntry
;
41 LIST_ENTRY ServerCcbListHead
;
42 LIST_ENTRY ClientCcbListHead
;
43 LIST_ENTRY WaiterListHead
;
44 LIST_ENTRY EmptyBufferListHead
;
49 ULONG PipeConfiguration
;
50 ULONG MaximumInstances
;
51 ULONG CurrentInstances
;
54 LARGE_INTEGER TimeOut
;
55 } NPFS_FCB
, *PNPFS_FCB
;
57 typedef struct _NPFS_CCB
59 LIST_ENTRY CcbListEntry
;
63 struct _NPFS_CCB
* OtherSide
;
64 struct ETHREAD
*Thread
;
70 ULONG ReadDataAvailable
;
71 ULONG WriteQuotaAvailable
;
73 LIST_ENTRY ReadRequestListHead
;
80 FAST_MUTEX DataListLock
; /* Data queue lock */
81 } NPFS_CCB
, *PNPFS_CCB
;
83 typedef struct _NPFS_CONTEXT
87 } NPFS_CONTEXT
, *PNPFS_CONTEXT
;
89 typedef struct _NPFS_THREAD_CONTEXT
95 PVOID WaitObjectArray
[MAXIMUM_WAIT_OBJECTS
];
96 KWAIT_BLOCK WaitBlockArray
[MAXIMUM_WAIT_OBJECTS
];
97 PIRP WaitIrpArray
[MAXIMUM_WAIT_OBJECTS
];
98 } NPFS_THREAD_CONTEXT
, *PNPFS_THREAD_CONTEXT
;
100 typedef struct _NPFS_WAITER_ENTRY
104 } NPFS_WAITER_ENTRY
, *PNPFS_WAITER_ENTRY
;
107 extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList
;
110 #define KeLockMutex(x) KeWaitForSingleObject(x, \
116 #define KeUnlockMutex(x) KeReleaseMutex(x, FALSE);
118 #define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
120 DRIVER_DISPATCH NpfsCreate
;
121 NTSTATUS NTAPI
NpfsCreate(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
123 DRIVER_DISPATCH NpfsCreateNamedPipe
;
124 NTSTATUS NTAPI
NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
126 DRIVER_DISPATCH NpfsCleanup
;
127 NTSTATUS NTAPI
NpfsCleanup(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
129 DRIVER_DISPATCH NpfsClose
;
130 NTSTATUS NTAPI
NpfsClose(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
132 DRIVER_DISPATCH NpfsRead
;
133 NTSTATUS NTAPI
NpfsRead(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
135 DRIVER_DISPATCH NpfsWrite
;
136 NTSTATUS NTAPI
NpfsWrite(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
138 DRIVER_DISPATCH NpfsFlushBuffers
;
139 NTSTATUS NTAPI
NpfsFlushBuffers(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
141 DRIVER_DISPATCH NpfsFileSystemControl
;
142 NTSTATUS NTAPI
NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
144 DRIVER_DISPATCH NpfsQueryInformation
;
145 NTSTATUS NTAPI
NpfsQueryInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
147 DRIVER_DISPATCH NpfsSetInformation
;
148 NTSTATUS NTAPI
NpfsSetInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
150 DRIVER_DISPATCH NpfsQueryVolumeInformation
;
151 NTSTATUS NTAPI
NpfsQueryVolumeInformation (PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
154 DriverEntry(PDRIVER_OBJECT DriverObject
,
155 PUNICODE_STRING RegistryPath
);
158 NpfsFindPipe(PNPFS_VCB Vcb
,
159 PUNICODE_STRING PipeName
);
162 #endif /* __DRIVERS_FS_NP_NPFS_H */