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 PNPFS_DEVICE_EXTENSION DeviceExtension
;
23 PDEVICE_OBJECT DeviceObject
;
24 UNICODE_STRING DeviceName
;
27 DPRINT("Named Pipe FSD 0.0.2\n");
29 ASSERT (sizeof(NPFS_CONTEXT
) <= FIELD_OFFSET(IRP
, Tail
.Overlay
.DriverContext
));
30 ASSERT (sizeof(NPFS_WAITER_ENTRY
) <= FIELD_OFFSET(IRP
, Tail
.Overlay
.DriverContext
));
32 DriverObject
->MajorFunction
[IRP_MJ_CREATE
] = NpfsCreate
;
33 DriverObject
->MajorFunction
[IRP_MJ_CREATE_NAMED_PIPE
] =
35 DriverObject
->MajorFunction
[IRP_MJ_CLOSE
] = NpfsClose
;
36 DriverObject
->MajorFunction
[IRP_MJ_READ
] = NpfsRead
;
37 DriverObject
->MajorFunction
[IRP_MJ_WRITE
] = NpfsWrite
;
38 DriverObject
->MajorFunction
[IRP_MJ_QUERY_INFORMATION
] =
40 DriverObject
->MajorFunction
[IRP_MJ_SET_INFORMATION
] =
42 DriverObject
->MajorFunction
[IRP_MJ_QUERY_VOLUME_INFORMATION
] =
43 NpfsQueryVolumeInformation
;
44 DriverObject
->MajorFunction
[IRP_MJ_CLEANUP
] = NpfsCleanup
;
45 DriverObject
->MajorFunction
[IRP_MJ_FLUSH_BUFFERS
] = NpfsFlushBuffers
;
46 // DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] =
47 // NpfsDirectoryControl;
48 DriverObject
->MajorFunction
[IRP_MJ_FILE_SYSTEM_CONTROL
] =
49 NpfsFileSystemControl
;
50 // DriverObject->MajorFunction[IRP_MJ_QUERY_SECURITY] =
52 // DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] =
55 DriverObject
->DriverUnload
= NULL
;
57 RtlInitUnicodeString(&DeviceName
, L
"\\Device\\NamedPipe");
58 Status
= IoCreateDevice(DriverObject
,
59 sizeof(NPFS_DEVICE_EXTENSION
),
61 FILE_DEVICE_NAMED_PIPE
,
65 if (!NT_SUCCESS(Status
))
67 DPRINT("Failed to create named pipe device! (Status %x)\n", Status
);
71 /* initialize the device object */
72 DeviceObject
->Flags
|= DO_DIRECT_IO
;
74 /* initialize the device extension */
75 DeviceExtension
= DeviceObject
->DeviceExtension
;
76 InitializeListHead(&DeviceExtension
->PipeListHead
);
77 InitializeListHead(&DeviceExtension
->ThreadListHead
);
78 KeInitializeMutex(&DeviceExtension
->PipeListLock
, 0);
79 DeviceExtension
->EmptyWaiterCount
= 0;
81 /* set the size quotas */
82 DeviceExtension
->MinQuota
= PAGE_SIZE
;
83 DeviceExtension
->DefaultQuota
= 8 * PAGE_SIZE
;
84 DeviceExtension
->MaxQuota
= 64 * PAGE_SIZE
;
86 return STATUS_SUCCESS
;