2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: drivers/fs/np/mount.c
5 * PURPOSE: Named pipe filesystem
6 * PROGRAMMER: David Welch <welch@cwcom.net>
9 /* INCLUDES ******************************************************************/
16 /* FUNCTIONS *****************************************************************/
19 DriverEntry(PDRIVER_OBJECT DriverObject
,
20 PUNICODE_STRING RegistryPath
)
22 PDEVICE_OBJECT DeviceObject
;
23 UNICODE_STRING DeviceName
;
28 DPRINT("Named Pipe FSD 0.0.2\n");
30 ASSERT (sizeof(NPFS_CONTEXT
) <= FIELD_OFFSET(IRP
, Tail
.Overlay
.DriverContext
));
31 ASSERT (sizeof(NPFS_WAITER_ENTRY
) <= FIELD_OFFSET(IRP
, Tail
.Overlay
.DriverContext
));
33 DriverObject
->MajorFunction
[IRP_MJ_CREATE
] = NpfsCreate
;
34 DriverObject
->MajorFunction
[IRP_MJ_CREATE_NAMED_PIPE
] =
36 DriverObject
->MajorFunction
[IRP_MJ_CLOSE
] = NpfsClose
;
37 DriverObject
->MajorFunction
[IRP_MJ_READ
] = NpfsRead
;
38 DriverObject
->MajorFunction
[IRP_MJ_WRITE
] = NpfsWrite
;
39 DriverObject
->MajorFunction
[IRP_MJ_QUERY_INFORMATION
] =
41 DriverObject
->MajorFunction
[IRP_MJ_SET_INFORMATION
] =
43 DriverObject
->MajorFunction
[IRP_MJ_QUERY_VOLUME_INFORMATION
] =
44 NpfsQueryVolumeInformation
;
45 DriverObject
->MajorFunction
[IRP_MJ_CLEANUP
] = NpfsCleanup
;
46 DriverObject
->MajorFunction
[IRP_MJ_FLUSH_BUFFERS
] = NpfsFlushBuffers
;
47 DriverObject
->MajorFunction
[IRP_MJ_DIRECTORY_CONTROL
] =
49 DriverObject
->MajorFunction
[IRP_MJ_FILE_SYSTEM_CONTROL
] =
50 NpfsFileSystemControl
;
51 // DriverObject->MajorFunction[IRP_MJ_QUERY_SECURITY] =
53 // DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] =
56 DriverObject
->DriverUnload
= NULL
;
58 RtlInitUnicodeString(&DeviceName
, L
"\\Device\\NamedPipe");
59 Status
= IoCreateDevice(DriverObject
,
62 FILE_DEVICE_NAMED_PIPE
,
66 if (!NT_SUCCESS(Status
))
68 DPRINT("Failed to create named pipe device! (Status %x)\n", Status
);
72 /* Initialize the device object */
73 DeviceObject
->Flags
|= DO_DIRECT_IO
;
74 DeviceObject
->Flags
&= ~DO_DEVICE_INITIALIZING
;
76 /* Initialize the Volume Control Block (VCB) */
77 Vcb
= (PNPFS_VCB
)DeviceObject
->DeviceExtension
;
78 InitializeListHead(&Vcb
->PipeListHead
);
79 InitializeListHead(&Vcb
->ThreadListHead
);
80 KeInitializeMutex(&Vcb
->PipeListLock
, 0);
81 Vcb
->EmptyWaiterCount
= 0;
83 /* set the size quotas */
84 Vcb
->MinQuota
= PAGE_SIZE
;
85 Vcb
->DefaultQuota
= 8 * PAGE_SIZE
;
86 Vcb
->MaxQuota
= 64 * PAGE_SIZE
;
88 /* Create the device FCB */
89 Fcb
= ExAllocatePool(NonPagedPool
, sizeof(NPFS_FCB
));
90 Fcb
->Type
= FCB_DEVICE
;
94 /* Create the root directory FCB */
95 Fcb
= ExAllocatePool(NonPagedPool
, sizeof(NPFS_FCB
));
96 Fcb
->Type
= FCB_DIRECTORY
;
100 return STATUS_SUCCESS
;
105 NpfsGetFcb(PFILE_OBJECT FileObject
,
108 PNPFS_FCB LocalFcb
= NULL
;
109 FCB_TYPE FcbType
= FCB_INVALID
;
113 LocalFcb
= (PNPFS_FCB
)FileObject
->FsContext
;
114 FcbType
= LocalFcb
->Type
;
116 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
119 FcbType
= FCB_INVALID
;
130 NpfsGetCcb(PFILE_OBJECT FileObject
,
133 PNPFS_CCB LocalCcb
= NULL
;
134 CCB_TYPE CcbType
= CCB_INVALID
;
138 LocalCcb
= (PNPFS_CCB
)FileObject
->FsContext2
;
139 CcbType
= LocalCcb
->Type
;
141 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
144 CcbType
= CCB_INVALID
;