ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

npfs.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.