2007-05-04 10:15:00 +00:00
|
|
|
#ifndef __DRIVERS_FS_NP_NPFS_H
|
|
|
|
#define __DRIVERS_FS_NP_NPFS_H
|
|
|
|
|
|
|
|
#include <ntifs.h>
|
|
|
|
#include <ndk/iotypes.h>
|
|
|
|
|
2007-05-04 11:50:41 +00:00
|
|
|
#include <stdarg.h>
|
|
|
|
#include <stdio.h>
|
2008-02-11 16:54:05 +00:00
|
|
|
#include <debug.h>
|
2007-05-04 11:50:41 +00:00
|
|
|
|
2008-02-11 16:54:05 +00:00
|
|
|
#define DPFLTR_NPFS_ID DPFLTR_FASTFAT_ID
|
2007-05-04 11:50:41 +00:00
|
|
|
|
2007-05-04 18:34:48 +00:00
|
|
|
/* Node type codes for NPFS */
|
|
|
|
#define NPFS_NODETYPE_VCB 0x401
|
|
|
|
#define NPFS_NODETYPE_DCB 0x402
|
|
|
|
#define NPFS_NODETYPE_FCB 0x404
|
|
|
|
#define NPFS_NODETYPE_CCB 0x406
|
|
|
|
|
|
|
|
typedef struct _NPFS_VCB
|
2007-05-04 10:15:00 +00:00
|
|
|
{
|
2007-05-04 18:34:48 +00:00
|
|
|
/* Common node header */
|
|
|
|
CSHORT NodeTypeCode;
|
|
|
|
CSHORT NodeByteSize;
|
|
|
|
|
|
|
|
} NPFS_VCB, *PNPFS_VCB;
|
2007-05-04 10:15:00 +00:00
|
|
|
|
|
|
|
typedef struct _NPFS_FCB
|
|
|
|
{
|
2007-05-04 18:34:48 +00:00
|
|
|
FSRTL_COMMON_FCB_HEADER RFCB; /* Includes common node header */
|
2007-05-04 10:15:00 +00:00
|
|
|
UNICODE_STRING PipeName;
|
|
|
|
LIST_ENTRY PipeListEntry;
|
|
|
|
KMUTEX CcbListLock;
|
|
|
|
LIST_ENTRY ServerCcbListHead;
|
|
|
|
LIST_ENTRY ClientCcbListHead;
|
|
|
|
LIST_ENTRY WaiterListHead;
|
|
|
|
LIST_ENTRY EmptyBufferListHead;
|
|
|
|
ULONG PipeType;
|
|
|
|
ULONG ReadMode;
|
|
|
|
ULONG WriteMode;
|
|
|
|
ULONG CompletionMode;
|
|
|
|
ULONG PipeConfiguration;
|
|
|
|
ULONG MaximumInstances;
|
|
|
|
ULONG CurrentInstances;
|
|
|
|
ULONG InboundQuota;
|
|
|
|
ULONG OutboundQuota;
|
|
|
|
LARGE_INTEGER TimeOut;
|
|
|
|
} NPFS_FCB, *PNPFS_FCB;
|
|
|
|
|
|
|
|
typedef struct _NPFS_CCB
|
|
|
|
{
|
2007-05-04 18:34:48 +00:00
|
|
|
/* Common node header */
|
|
|
|
CSHORT NodeTypeCode;
|
|
|
|
CSHORT NodeByteSize;
|
|
|
|
|
2007-05-04 10:15:00 +00:00
|
|
|
LIST_ENTRY CcbListEntry;
|
|
|
|
struct _NPFS_CCB* OtherSide;
|
|
|
|
struct ETHREAD *Thread;
|
|
|
|
PNPFS_FCB Fcb;
|
|
|
|
KEVENT ConnectEvent;
|
|
|
|
KEVENT ReadEvent;
|
|
|
|
KEVENT WriteEvent;
|
|
|
|
ULONG PipeEnd;
|
|
|
|
ULONG PipeState;
|
|
|
|
ULONG ReadDataAvailable;
|
|
|
|
ULONG WriteQuotaAvailable;
|
|
|
|
|
|
|
|
LIST_ENTRY ReadRequestListHead;
|
|
|
|
|
|
|
|
PVOID Data;
|
|
|
|
PVOID ReadPtr;
|
|
|
|
PVOID WritePtr;
|
|
|
|
ULONG MaxDataLength;
|
|
|
|
|
|
|
|
FAST_MUTEX DataListLock; /* Data queue lock */
|
|
|
|
} NPFS_CCB, *PNPFS_CCB;
|
|
|
|
|
2007-05-04 18:34:48 +00:00
|
|
|
typedef struct _NPFS_DEVICE_EXTENSION
|
|
|
|
{
|
|
|
|
LIST_ENTRY PipeListHead;
|
|
|
|
LIST_ENTRY ThreadListHead;
|
|
|
|
KMUTEX PipeListLock;
|
|
|
|
ULONG EmptyWaiterCount;
|
|
|
|
ULONG MinQuota;
|
|
|
|
ULONG DefaultQuota;
|
|
|
|
ULONG MaxQuota;
|
|
|
|
|
|
|
|
NPFS_VCB Vcb;
|
|
|
|
} NPFS_DEVICE_EXTENSION, *PNPFS_DEVICE_EXTENSION;
|
|
|
|
|
|
|
|
|
2007-05-04 10:15:00 +00:00
|
|
|
typedef struct _NPFS_CONTEXT
|
|
|
|
{
|
|
|
|
LIST_ENTRY ListEntry;
|
|
|
|
PKEVENT WaitEvent;
|
|
|
|
} 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];
|
|
|
|
PIRP WaitIrpArray[MAXIMUM_WAIT_OBJECTS];
|
|
|
|
} NPFS_THREAD_CONTEXT, *PNPFS_THREAD_CONTEXT;
|
|
|
|
|
|
|
|
typedef struct _NPFS_WAITER_ENTRY
|
|
|
|
{
|
|
|
|
LIST_ENTRY Entry;
|
|
|
|
PNPFS_CCB Ccb;
|
|
|
|
} NPFS_WAITER_ENTRY, *PNPFS_WAITER_ENTRY;
|
|
|
|
|
|
|
|
extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList;
|
|
|
|
|
|
|
|
|
|
|
|
#define KeLockMutex(x) KeWaitForSingleObject(x, \
|
|
|
|
UserRequest, \
|
|
|
|
KernelMode, \
|
|
|
|
FALSE, \
|
|
|
|
NULL);
|
|
|
|
|
|
|
|
#define KeUnlockMutex(x) KeReleaseMutex(x, FALSE);
|
|
|
|
|
|
|
|
#define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
|
|
|
|
|
2008-02-11 16:54:05 +00:00
|
|
|
DRIVER_DISPATCH NpfsCreate;
|
|
|
|
DRIVER_DISPATCH NpfsCreateNamedPipe;
|
|
|
|
DRIVER_DISPATCH NpfsCleanup;
|
|
|
|
DRIVER_DISPATCH NpfsClose;
|
2007-05-04 10:15:00 +00:00
|
|
|
|
2008-02-11 16:54:05 +00:00
|
|
|
DRIVER_DISPATCH NpfsRead;
|
|
|
|
DRIVER_DISPATCH NpfsWrite;
|
2007-05-04 10:15:00 +00:00
|
|
|
|
2008-02-11 16:54:05 +00:00
|
|
|
DRIVER_DISPATCH NpfsFlushBuffers;
|
2007-05-04 10:15:00 +00:00
|
|
|
|
2008-02-11 16:54:05 +00:00
|
|
|
DRIVER_DISPATCH NpfsFileSystemControl;
|
|
|
|
DRIVER_DISPATCH NpfsDirectoryControl;
|
2007-05-04 10:15:00 +00:00
|
|
|
|
2008-02-11 16:54:05 +00:00
|
|
|
DRIVER_DISPATCH NpfsQueryInformation;
|
|
|
|
DRIVER_DISPATCH NpfsSetInformation;
|
2007-05-04 10:15:00 +00:00
|
|
|
|
2008-02-11 16:54:05 +00:00
|
|
|
DRIVER_DISPATCH NpfsQueryVolumeInformation;
|
2007-05-04 10:15:00 +00:00
|
|
|
|
2008-02-11 16:54:05 +00:00
|
|
|
DRIVER_INITIALIZE DriverEntry;
|
2007-05-04 11:50:41 +00:00
|
|
|
|
2007-05-04 10:15:00 +00:00
|
|
|
#endif /* __DRIVERS_FS_NP_NPFS_H */
|