- Add fundamental VCB structure, and function to initialize it.

- Add common headers to all xCB structures.
- All development is being done according to Rajeev Nagar's book and some parts are inspired by its accompanying FSD sample.

svn path=/trunk/; revision=26636
This commit is contained in:
Aleksey Bragin 2007-05-04 18:34:48 +00:00
parent e45d903111
commit 34aac7b904
2 changed files with 52 additions and 11 deletions

View file

@ -15,6 +15,8 @@
ULONG NpfsDebugLevel = NPFS_DL_API_TRACE;
static VOID NpfsInitializeVcb(PNPFS_VCB Vcb);
/* FUNCTIONS *****************************************************************/
NTSTATUS NTAPI
@ -67,6 +69,9 @@ DriverEntry(PDRIVER_OBJECT DriverObject,
/* initialize the device extension */
DeviceExtension = DeviceObject->DeviceExtension;
NpfsInitializeVcb(&DeviceExtension->Vcb);
InitializeListHead(&DeviceExtension->PipeListHead);
InitializeListHead(&DeviceExtension->ThreadListHead);
KeInitializeMutex(&DeviceExtension->PipeListLock, 0);
@ -80,6 +85,22 @@ DriverEntry(PDRIVER_OBJECT DriverObject,
return STATUS_SUCCESS;
}
static VOID
NpfsInitializeVcb(PNPFS_VCB Vcb)
{
/* Initialize Volume Control Block, it's one per whole named pipe
file system. */
NpfsDbgPrint(NPFS_DL_API_TRACE, "NpfsInitializeVcb(), Vcb = %p\n", Vcb);
/* Zero-init whole VCB */
RtlZeroMemory(Vcb, sizeof(NPFS_VCB));
/* Initialize the common header */
Vcb->NodeTypeCode = NPFS_NODETYPE_VCB;
Vcb->NodeByteSize = sizeof(NPFS_VCB);
}
VOID NTAPI
NpfsDbgPrint(ULONG Level, char *fmt, ...)
{

View file

@ -11,20 +11,23 @@
#define NPFS_DL_NONE 0x00000000
#define NPFS_DL_API_TRACE 0x00000001
typedef struct _NPFS_DEVICE_EXTENSION
/* 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
{
LIST_ENTRY PipeListHead;
LIST_ENTRY ThreadListHead;
KMUTEX PipeListLock;
ULONG EmptyWaiterCount;
ULONG MinQuota;
ULONG DefaultQuota;
ULONG MaxQuota;
} NPFS_DEVICE_EXTENSION, *PNPFS_DEVICE_EXTENSION;
/* Common node header */
CSHORT NodeTypeCode;
CSHORT NodeByteSize;
} NPFS_VCB, *PNPFS_VCB;
typedef struct _NPFS_FCB
{
FSRTL_COMMON_FCB_HEADER RFCB;
FSRTL_COMMON_FCB_HEADER RFCB; /* Includes common node header */
UNICODE_STRING PipeName;
LIST_ENTRY PipeListEntry;
KMUTEX CcbListLock;
@ -46,6 +49,10 @@ typedef struct _NPFS_FCB
typedef struct _NPFS_CCB
{
/* Common node header */
CSHORT NodeTypeCode;
CSHORT NodeByteSize;
LIST_ENTRY CcbListEntry;
struct _NPFS_CCB* OtherSide;
struct ETHREAD *Thread;
@ -68,6 +75,20 @@ typedef struct _NPFS_CCB
FAST_MUTEX DataListLock; /* Data queue lock */
} NPFS_CCB, *PNPFS_CCB;
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;
typedef struct _NPFS_CONTEXT
{
LIST_ENTRY ListEntry;
@ -91,7 +112,6 @@ typedef struct _NPFS_WAITER_ENTRY
PNPFS_CCB Ccb;
} NPFS_WAITER_ENTRY, *PNPFS_WAITER_ENTRY;
extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList;