1 #ifndef __DRIVERS_FS_NP_NPFS_H
2 #define __DRIVERS_FS_NP_NPFS_H
5 #include <ndk/iotypes.h>
7 typedef struct _NPFS_DEVICE_EXTENSION
9 LIST_ENTRY PipeListHead
;
10 LIST_ENTRY ThreadListHead
;
12 ULONG EmptyWaiterCount
;
16 } NPFS_DEVICE_EXTENSION
, *PNPFS_DEVICE_EXTENSION
;
18 typedef struct _NPFS_FCB
20 FSRTL_COMMON_FCB_HEADER RFCB
;
21 UNICODE_STRING PipeName
;
22 LIST_ENTRY PipeListEntry
;
24 LIST_ENTRY ServerCcbListHead
;
25 LIST_ENTRY ClientCcbListHead
;
26 LIST_ENTRY WaiterListHead
;
27 LIST_ENTRY EmptyBufferListHead
;
32 ULONG PipeConfiguration
;
33 ULONG MaximumInstances
;
34 ULONG CurrentInstances
;
37 LARGE_INTEGER TimeOut
;
38 } NPFS_FCB
, *PNPFS_FCB
;
40 typedef struct _NPFS_CCB
42 LIST_ENTRY CcbListEntry
;
43 struct _NPFS_CCB
* OtherSide
;
44 struct ETHREAD
*Thread
;
51 ULONG ReadDataAvailable
;
52 ULONG WriteQuotaAvailable
;
54 LIST_ENTRY ReadRequestListHead
;
61 FAST_MUTEX DataListLock
; /* Data queue lock */
62 } NPFS_CCB
, *PNPFS_CCB
;
64 typedef struct _NPFS_CONTEXT
68 } NPFS_CONTEXT
, *PNPFS_CONTEXT
;
70 typedef struct _NPFS_THREAD_CONTEXT
74 PNPFS_DEVICE_EXTENSION DeviceExt
;
76 PVOID WaitObjectArray
[MAXIMUM_WAIT_OBJECTS
];
77 KWAIT_BLOCK WaitBlockArray
[MAXIMUM_WAIT_OBJECTS
];
78 PIRP WaitIrpArray
[MAXIMUM_WAIT_OBJECTS
];
79 } NPFS_THREAD_CONTEXT
, *PNPFS_THREAD_CONTEXT
;
81 typedef struct _NPFS_WAITER_ENTRY
85 } NPFS_WAITER_ENTRY
, *PNPFS_WAITER_ENTRY
;
88 extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList
;
91 #define KeLockMutex(x) KeWaitForSingleObject(x, \
97 #define KeUnlockMutex(x) KeReleaseMutex(x, FALSE);
99 #define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
101 DRIVER_DISPATCH NpfsCreate
;
102 NTSTATUS NTAPI
NpfsCreate(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
104 DRIVER_DISPATCH NpfsCreateNamedPipe
;
105 NTSTATUS NTAPI
NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
107 DRIVER_DISPATCH NpfsCleanup
;
108 NTSTATUS NTAPI
NpfsCleanup(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
110 DRIVER_DISPATCH NpfsClose
;
111 NTSTATUS NTAPI
NpfsClose(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
113 DRIVER_DISPATCH NpfsRead
;
114 NTSTATUS NTAPI
NpfsRead(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
116 DRIVER_DISPATCH NpfsWrite
;
117 NTSTATUS NTAPI
NpfsWrite(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
119 DRIVER_DISPATCH NpfsFlushBuffers
;
120 NTSTATUS NTAPI
NpfsFlushBuffers(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
122 DRIVER_DISPATCH NpfsFileSystemControl
;
123 NTSTATUS NTAPI
NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
125 DRIVER_DISPATCH NpfsQueryInformation
;
126 NTSTATUS NTAPI
NpfsQueryInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
128 DRIVER_DISPATCH NpfsSetInformation
;
129 NTSTATUS NTAPI
NpfsSetInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
131 DRIVER_DISPATCH NpfsQueryVolumeInformation
;
132 NTSTATUS NTAPI
NpfsQueryVolumeInformation (PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
135 DriverEntry(PDRIVER_OBJECT DriverObject
,
136 PUNICODE_STRING RegistryPath
);
138 #endif /* __DRIVERS_FS_NP_NPFS_H */