2005-01-01 14:54:25 +00:00
|
|
|
/* $Id$ */
|
2002-05-07 22:41:22 +00:00
|
|
|
|
2005-02-27 12:43:37 +00:00
|
|
|
#ifndef __DRIVERS_FS_NP_NPFS_H
|
|
|
|
#define __DRIVERS_FS_NP_NPFS_H
|
2001-07-29 16:41:25 +00:00
|
|
|
|
2005-01-01 14:54:25 +00:00
|
|
|
typedef struct _NPFS_DEVICE_EXTENSION
|
1999-11-24 11:51:55 +00:00
|
|
|
{
|
2001-11-20 20:35:10 +00:00
|
|
|
LIST_ENTRY PipeListHead;
|
2005-03-23 22:11:20 +00:00
|
|
|
LIST_ENTRY ThreadListHead;
|
2001-11-20 20:35:10 +00:00
|
|
|
KMUTEX PipeListLock;
|
2005-03-23 22:11:20 +00:00
|
|
|
ULONG EmptyWaiterCount;
|
2003-06-21 19:55:55 +00:00
|
|
|
ULONG MinQuota;
|
|
|
|
ULONG DefaultQuota;
|
|
|
|
ULONG MaxQuota;
|
1999-11-24 11:51:55 +00:00
|
|
|
} NPFS_DEVICE_EXTENSION, *PNPFS_DEVICE_EXTENSION;
|
|
|
|
|
2005-01-01 14:54:25 +00:00
|
|
|
typedef struct _NPFS_PIPE
|
1999-11-24 11:51:55 +00:00
|
|
|
{
|
2001-11-20 20:35:10 +00:00
|
|
|
UNICODE_STRING PipeName;
|
|
|
|
LIST_ENTRY PipeListEntry;
|
2004-05-05 18:30:16 +00:00
|
|
|
KMUTEX FcbListLock;
|
2001-11-20 20:35:10 +00:00
|
|
|
LIST_ENTRY ServerFcbListHead;
|
|
|
|
LIST_ENTRY ClientFcbListHead;
|
2005-03-05 12:08:50 +00:00
|
|
|
LIST_ENTRY WaiterListHead;
|
2005-03-23 22:11:20 +00:00
|
|
|
LIST_ENTRY EmptyBufferListHead;
|
2001-11-20 20:35:10 +00:00
|
|
|
ULONG PipeType;
|
2005-01-03 13:50:04 +00:00
|
|
|
ULONG ReadMode;
|
|
|
|
ULONG WriteMode;
|
|
|
|
ULONG CompletionMode;
|
2001-11-20 20:35:10 +00:00
|
|
|
ULONG PipeConfiguration;
|
|
|
|
ULONG MaximumInstances;
|
|
|
|
ULONG CurrentInstances;
|
|
|
|
ULONG InboundQuota;
|
|
|
|
ULONG OutboundQuota;
|
|
|
|
LARGE_INTEGER TimeOut;
|
2000-05-13 13:51:08 +00:00
|
|
|
} NPFS_PIPE, *PNPFS_PIPE;
|
1999-11-24 11:51:55 +00:00
|
|
|
|
2000-05-13 13:51:08 +00:00
|
|
|
typedef struct _NPFS_FCB
|
1999-11-24 11:51:55 +00:00
|
|
|
{
|
2001-11-20 20:35:10 +00:00
|
|
|
LIST_ENTRY FcbListEntry;
|
|
|
|
struct _NPFS_FCB* OtherSide;
|
2005-01-01 14:54:25 +00:00
|
|
|
struct ETHREAD *Thread;
|
2001-11-20 20:35:10 +00:00
|
|
|
PNPFS_PIPE Pipe;
|
|
|
|
KEVENT ConnectEvent;
|
2005-03-28 18:42:53 +00:00
|
|
|
KEVENT ReadEvent;
|
|
|
|
KEVENT WriteEvent;
|
2001-11-20 20:35:10 +00:00
|
|
|
ULONG PipeEnd;
|
|
|
|
ULONG PipeState;
|
|
|
|
ULONG ReadDataAvailable;
|
|
|
|
ULONG WriteQuotaAvailable;
|
|
|
|
|
2005-03-28 18:42:53 +00:00
|
|
|
LIST_ENTRY ReadRequestListHead;
|
|
|
|
|
2003-06-21 19:55:55 +00:00
|
|
|
PVOID Data;
|
|
|
|
PVOID ReadPtr;
|
|
|
|
PVOID WritePtr;
|
|
|
|
ULONG MaxDataLength;
|
|
|
|
|
2005-03-23 22:11:20 +00:00
|
|
|
FAST_MUTEX DataListLock; /* Data queue lock */
|
2000-05-13 13:51:08 +00:00
|
|
|
} NPFS_FCB, *PNPFS_FCB;
|
|
|
|
|
2005-03-23 22:11:20 +00:00
|
|
|
typedef struct _NPFS_CONTEXT
|
|
|
|
{
|
2005-03-28 18:42:53 +00:00
|
|
|
LIST_ENTRY ListEntry;
|
|
|
|
PKEVENT WaitEvent;
|
2005-03-23 22:11:20 +00:00
|
|
|
} NPFS_CONTEXT, *PNPFS_CONTEXT;
|
|
|
|
|
|
|
|
typedef struct _NPFS_THREAD_CONTEXT
|
|
|
|
{
|
|
|
|
ULONG Count;
|
|
|
|
KEVENT Event;
|
|
|
|
PNPFS_DEVICE_EXTENSION DeviceExt;
|
|
|
|
LIST_ENTRY ListEntry;
|
|
|
|
PVOID WaitObjectArray[MAXIMUM_WAIT_OBJECTS];
|
|
|
|
KWAIT_BLOCK WaitBlockArray[MAXIMUM_WAIT_OBJECTS];
|
2005-03-28 18:42:53 +00:00
|
|
|
PIRP WaitIrpArray[MAXIMUM_WAIT_OBJECTS];
|
2005-03-23 22:11:20 +00:00
|
|
|
} NPFS_THREAD_CONTEXT, *PNPFS_THREAD_CONTEXT;
|
|
|
|
|
2005-03-05 12:08:50 +00:00
|
|
|
typedef struct _NPFS_WAITER_ENTRY
|
|
|
|
{
|
|
|
|
LIST_ENTRY Entry;
|
|
|
|
PNPFS_FCB Fcb;
|
|
|
|
} NPFS_WAITER_ENTRY, *PNPFS_WAITER_ENTRY;
|
|
|
|
|
2000-05-13 13:51:08 +00:00
|
|
|
|
2001-10-21 18:58:32 +00:00
|
|
|
extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList;
|
|
|
|
|
|
|
|
|
2000-05-13 13:51:08 +00:00
|
|
|
#define KeLockMutex(x) KeWaitForSingleObject(x, \
|
|
|
|
UserRequest, \
|
|
|
|
KernelMode, \
|
|
|
|
FALSE, \
|
|
|
|
NULL);
|
1999-11-24 11:51:55 +00:00
|
|
|
|
2000-05-13 13:51:08 +00:00
|
|
|
#define KeUnlockMutex(x) KeReleaseMutex(x, FALSE);
|
2000-03-26 22:00:10 +00:00
|
|
|
|
2005-06-17 12:29:33 +00:00
|
|
|
#define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
|
2002-05-07 22:41:22 +00:00
|
|
|
|
2001-05-01 11:09:01 +00:00
|
|
|
NTSTATUS STDCALL NpfsCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
NTSTATUS STDCALL NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
2005-03-25 13:40:33 +00:00
|
|
|
NTSTATUS STDCALL NpfsCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
2001-05-01 11:09:01 +00:00
|
|
|
NTSTATUS STDCALL NpfsClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
|
|
|
|
NTSTATUS STDCALL NpfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
NTSTATUS STDCALL NpfsWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
|
2004-04-12 13:03:29 +00:00
|
|
|
NTSTATUS STDCALL NpfsFlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
|
2001-05-01 11:09:01 +00:00
|
|
|
NTSTATUS STDCALL NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
|
2001-06-12 12:35:42 +00:00
|
|
|
NTSTATUS STDCALL NpfsQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
NTSTATUS STDCALL NpfsSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
|
|
|
|
NTSTATUS STDCALL NpfsQueryVolumeInformation (PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
|
2005-02-27 12:43:37 +00:00
|
|
|
#endif /* __DRIVERS_FS_NP_NPFS_H */
|