Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygennpfs.c
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS kernel 00004 * FILE: drivers/fs/np/mount.c 00005 * PURPOSE: Named pipe filesystem 00006 * PROGRAMMER: David Welch <welch@cwcom.net> 00007 */ 00008 00009 /* INCLUDES ******************************************************************/ 00010 00011 #include "npfs.h" 00012 00013 #define NDEBUG 00014 #include <debug.h> 00015 00016 /* FUNCTIONS *****************************************************************/ 00017 00018 NTSTATUS NTAPI 00019 DriverEntry(PDRIVER_OBJECT DriverObject, 00020 PUNICODE_STRING RegistryPath) 00021 { 00022 PDEVICE_OBJECT DeviceObject; 00023 UNICODE_STRING DeviceName; 00024 PNPFS_VCB Vcb; 00025 PNPFS_FCB Fcb; 00026 NTSTATUS Status; 00027 00028 DPRINT("Named Pipe FSD 0.0.2\n"); 00029 00030 ASSERT (sizeof(NPFS_CONTEXT) <= FIELD_OFFSET(IRP, Tail.Overlay.DriverContext)); 00031 ASSERT (sizeof(NPFS_WAITER_ENTRY) <= FIELD_OFFSET(IRP, Tail.Overlay.DriverContext)); 00032 00033 DriverObject->MajorFunction[IRP_MJ_CREATE] = NpfsCreate; 00034 DriverObject->MajorFunction[IRP_MJ_CREATE_NAMED_PIPE] = 00035 NpfsCreateNamedPipe; 00036 DriverObject->MajorFunction[IRP_MJ_CLOSE] = NpfsClose; 00037 DriverObject->MajorFunction[IRP_MJ_READ] = NpfsRead; 00038 DriverObject->MajorFunction[IRP_MJ_WRITE] = NpfsWrite; 00039 DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] = 00040 NpfsQueryInformation; 00041 DriverObject->MajorFunction[IRP_MJ_SET_INFORMATION] = 00042 NpfsSetInformation; 00043 DriverObject->MajorFunction[IRP_MJ_QUERY_VOLUME_INFORMATION] = 00044 NpfsQueryVolumeInformation; 00045 DriverObject->MajorFunction[IRP_MJ_CLEANUP] = NpfsCleanup; 00046 DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS] = NpfsFlushBuffers; 00047 DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = 00048 NpfsDirectoryControl; 00049 DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = 00050 NpfsFileSystemControl; 00051 // DriverObject->MajorFunction[IRP_MJ_QUERY_SECURITY] = 00052 // NpfsQuerySecurity; 00053 // DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] = 00054 // NpfsSetSecurity; 00055 00056 DriverObject->DriverUnload = NULL; 00057 00058 RtlInitUnicodeString(&DeviceName, L"\\Device\\NamedPipe"); 00059 Status = IoCreateDevice(DriverObject, 00060 sizeof(NPFS_VCB), 00061 &DeviceName, 00062 FILE_DEVICE_NAMED_PIPE, 00063 0, 00064 FALSE, 00065 &DeviceObject); 00066 if (!NT_SUCCESS(Status)) 00067 { 00068 DPRINT("Failed to create named pipe device! (Status %x)\n", Status); 00069 return Status; 00070 } 00071 00072 /* Initialize the device object */ 00073 DeviceObject->Flags |= DO_DIRECT_IO; 00074 DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; 00075 00076 /* Initialize the Volume Control Block (VCB) */ 00077 Vcb = (PNPFS_VCB)DeviceObject->DeviceExtension; 00078 InitializeListHead(&Vcb->PipeListHead); 00079 InitializeListHead(&Vcb->ThreadListHead); 00080 KeInitializeMutex(&Vcb->PipeListLock, 0); 00081 Vcb->EmptyWaiterCount = 0; 00082 00083 /* set the size quotas */ 00084 Vcb->MinQuota = PAGE_SIZE; 00085 Vcb->DefaultQuota = 8 * PAGE_SIZE; 00086 Vcb->MaxQuota = 64 * PAGE_SIZE; 00087 00088 /* Create the device FCB */ 00089 Fcb = ExAllocatePoolWithTag(NonPagedPool, sizeof(NPFS_FCB), TAG_NPFS_FCB); 00090 Fcb->Type = FCB_DEVICE; 00091 Fcb->Vcb = Vcb; 00092 Vcb->DeviceFcb = Fcb; 00093 00094 /* Create the root directory FCB */ 00095 Fcb = ExAllocatePoolWithTag(NonPagedPool, sizeof(NPFS_FCB), TAG_NPFS_FCB); 00096 Fcb->Type = FCB_DIRECTORY; 00097 Fcb->Vcb = Vcb; 00098 Vcb->RootFcb = Fcb; 00099 00100 return STATUS_SUCCESS; 00101 } 00102 00103 00104 FCB_TYPE 00105 NpfsGetFcb(PFILE_OBJECT FileObject, 00106 PNPFS_FCB *Fcb) 00107 { 00108 PNPFS_FCB LocalFcb = NULL; 00109 FCB_TYPE FcbType = FCB_INVALID; 00110 00111 _SEH2_TRY 00112 { 00113 LocalFcb = (PNPFS_FCB)FileObject->FsContext; 00114 FcbType = LocalFcb->Type; 00115 } 00116 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) 00117 { 00118 LocalFcb = NULL; 00119 FcbType = FCB_INVALID; 00120 } 00121 _SEH2_END; 00122 00123 *Fcb = LocalFcb; 00124 00125 return FcbType; 00126 } 00127 00128 00129 CCB_TYPE 00130 NpfsGetCcb(PFILE_OBJECT FileObject, 00131 PNPFS_CCB *Ccb) 00132 { 00133 PNPFS_CCB LocalCcb = NULL; 00134 CCB_TYPE CcbType = CCB_INVALID; 00135 00136 _SEH2_TRY 00137 { 00138 LocalCcb = (PNPFS_CCB)FileObject->FsContext2; 00139 CcbType = LocalCcb->Type; 00140 } 00141 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) 00142 { 00143 LocalCcb = NULL; 00144 CcbType = CCB_INVALID; 00145 } 00146 _SEH2_END; 00147 00148 *Ccb = LocalCcb; 00149 00150 return CcbType; 00151 } 00152 00153 /* EOF */ Generated on Sun May 27 2012 04:27:47 for ReactOS by
1.7.6.1
|