diff --git a/reactos/drivers/filesystems/npfs_new/npfs.c b/reactos/drivers/filesystems/npfs_new/npfs.c index 15583a48e4c..37248a1740d 100644 --- a/reactos/drivers/filesystems/npfs_new/npfs.c +++ b/reactos/drivers/filesystems/npfs_new/npfs.c @@ -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, ...) { diff --git a/reactos/drivers/filesystems/npfs_new/npfs.h b/reactos/drivers/filesystems/npfs_new/npfs.h index e5887afb36f..ca0295982bc 100644 --- a/reactos/drivers/filesystems/npfs_new/npfs.h +++ b/reactos/drivers/filesystems/npfs_new/npfs.h @@ -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;