1 /* $Id: mount.c,v 1.2 1999/12/04 20:58:42 ea Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: services/fs/np/mount.c
6 * PURPOSE: Named pipe filesystem
7 * PROGRAMMER: David Welch <welch@cwcom.net>
10 /* INCLUDES ******************************************************************/
12 #include <ddk/ntddk.h>
15 #include <internal/debug.h>
19 /* GLOBALS *******************************************************************/
21 static PDRIVER_OBJECT DriverObject
;
23 /* FUNCTIONS *****************************************************************/
25 NTSTATUS
NpfsMount(PDEVICE_OBJECT DeviceToMount
)
28 PDEVICE_OBJECT DeviceObject
;
29 PNPFS_DEVICE_EXTENSION DeviceExt
;
31 Status
= IoCreateDevice(DriverObject
,
32 sizeof(NPFS_DEVICE_EXTENSION
),
34 FILE_DEVICE_FILE_SYSTEM
,
38 if (!NT_SUCCESS(Status
))
43 DeviceObject
->Flags
= DeviceObject
->Flags
| DO_DIRECT_IO
;
44 DeviceExt
= (PNPFS_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
;
46 DeviceExt
->StorageDevice
= IoAttachDeviceToDeviceStack(DeviceObject
,
49 return(STATUS_SUCCESS
);
52 NTSTATUS
NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject
,
55 PIO_STACK_LOCATION IoStack
= IoGetCurrentIrpStackLocation(Irp
);
56 PVPB Vpb
= IoStack
->Parameters
.Mount
.Vpb
;
57 PDEVICE_OBJECT DeviceToMount
= IoStack
->Parameters
.Mount
.DeviceObject
;
60 Status
= NpfsMount(DeviceToMount
);
62 Irp
->IoStatus
.Status
= Status
;
63 Irp
->IoStatus
.Information
= 0;
65 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
71 NTSTATUS
DriverEntry(PDRIVER_OBJECT _DriverObject
,
72 PUNICODE_STRING RegistryPath
)
74 PDEVICE_OBJECT DeviceObject
;
76 UNICODE_STRING DeviceName
;
78 DbgPrint("Named Pipe Filesystem\n");
80 DriverObject
= _DriverObject
;
82 RtlInitUnicodeString(&DeviceName
, L
"\\Device\\Npfs");
83 Status
= IoCreateDevice(DriverObject
,
86 FILE_DEVICE_FILE_SYSTEM
,
90 if (!NT_SUCCESS(Status
))
95 DeviceObject
->Flags
= 0;
96 DeviceObject
->MajorFunction
[IRP_MJ_CLOSE
] = NpfsClose
;
97 DeviceObject
->MajorFunction
[IRP_MJ_CREATE
] = NpfsCreate
;
98 DeviceObject
->MajorFunction
[IRP_MJ_READ
] = NpfsRead
;
99 DeviceObject
->MajorFunction
[IRP_MJ_WRITE
] = NpfsWrite
;
100 DeviceObject
->MajorFunction
[IRP_MJ_FILE_SYSTEM_CONTROL
] =
101 NpfsFileSystemControl
;
102 DeviceObject
->MajorFunction
[IRP_MJ_DIRECTORY_CONTROL
] =
103 NpfsDirectoryControl
;
104 DeviceObject
->MajorFunction
[IRP_MJ_QUERY_INFORMATION
] =
105 NpfsQueryInformation
;
106 DeviceObject
->MajorFunction
[IRP_MJ_SET_INFORMATION
] =
108 DeviceObject
->MajorFunction
[IRP_MJ_FLUSH_BUFFERS
] = NpfsFlushBuffers
;
109 DeviceObject
->MajorFunction
[IRP_MJ_SHUTDOWN
] = NpfsShutdown
;
110 DeviceObject
->MajorFunction
[IRP_MJ_CLEANUP
] = NpfsCleanup
;
111 DeviceObject
->MajorFunction
[IRP_MJ_QUERY_SECURITY
] =
113 DeviceObject
->MajorFunction
[IRP_MJ_SET_SECURITY
] =
115 DeviceObject
->MajorFunction
[IRP_MJ_QUERY_QUOTA
] =
117 DeviceObject
->MajorFunction
[IRP_MJ_SET_QUOTA
] =
120 DriverObject
->DriverUnload
= NULL
;
122 IoRegisterFileSystem(DeviceObject
);
124 return(STATUS_SUCCESS
);