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.h
Go to the documentation of this file.
00001 #ifndef __DRIVERS_FS_NP_NPFS_H
00002 #define __DRIVERS_FS_NP_NPFS_H
00003 
00004 #include <ntifs.h>
00005 #include <ndk/iotypes.h>
00006 #include <pseh/pseh2.h>
00007 
00008 #define TAG_NPFS_CCB 'cFpN'
00009 #define TAG_NPFS_CCB_DATA 'iFpN' /* correct? */
00010 #define TAG_NPFS_FCB 'FFpN'
00011 #define TAG_NPFS_NAMEBLOCK 'nFpN'
00012 #define TAG_NPFS_THREAD_CONTEXT 'tFpN'
00013 
00014 #define ROUND_DOWN(n, align) \
00015     (((ULONG)n) & ~((align) - 1l))
00016 
00017 #define ROUND_UP(n, align) \
00018     ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
00019 
00020 typedef enum _FCB_TYPE
00021 {
00022     FCB_INVALID,
00023     FCB_DEVICE,
00024     FCB_DIRECTORY,
00025     FCB_PIPE
00026 } FCB_TYPE;
00027 
00028 typedef enum _CCB_TYPE
00029 {
00030     CCB_INVALID,
00031     CCB_DEVICE,
00032     CCB_DIRECTORY,
00033     CCB_PIPE
00034 } CCB_TYPE;
00035 
00036 /* Volume Control Block (VCB) aka Device Extension */
00037 typedef struct _NPFS_VCB
00038 {
00039     LIST_ENTRY PipeListHead;
00040     LIST_ENTRY ThreadListHead;
00041     KMUTEX PipeListLock;
00042     ULONG EmptyWaiterCount;
00043     ULONG MinQuota;
00044     ULONG DefaultQuota;
00045     ULONG MaxQuota;
00046     struct _NPFS_FCB *DeviceFcb;
00047     struct _NPFS_FCB *RootFcb;
00048 } NPFS_VCB, *PNPFS_VCB;
00049 
00050 typedef struct _NPFS_FCB
00051 {
00052     FCB_TYPE Type;
00053     PNPFS_VCB Vcb;
00054     UNICODE_STRING PipeName;
00055     LIST_ENTRY PipeListEntry;
00056     KMUTEX CcbListLock;
00057     LIST_ENTRY ServerCcbListHead;
00058     LIST_ENTRY ClientCcbListHead;
00059     LIST_ENTRY WaiterListHead;
00060     LIST_ENTRY EmptyBufferListHead;
00061     ULONG PipeType;
00062     ULONG ClientReadMode;
00063     ULONG ServerReadMode;
00064     ULONG CompletionMode;
00065     ULONG PipeConfiguration;
00066     ULONG MaximumInstances;
00067     ULONG CurrentInstances;
00068     ULONG InboundQuota;
00069     ULONG OutboundQuota;
00070     LARGE_INTEGER TimeOut;
00071 } NPFS_FCB, *PNPFS_FCB;
00072 
00073 
00074 typedef struct _NPFS_CCB_DIRECTORY_DATA
00075 {
00076     UNICODE_STRING SearchPattern;
00077     ULONG FileIndex;
00078 } NPFS_CCB_DIRECTORY_DATA, *PNPFS_CCB_DIRECTORY_DATA;
00079 
00080 
00081 typedef struct _NPFS_CCB
00082 {
00083     LIST_ENTRY CcbListEntry;
00084     CCB_TYPE Type;
00085     PNPFS_FCB Fcb;
00086     
00087     PFILE_OBJECT FileObject;
00088 
00089     struct _NPFS_CCB* OtherSide;
00090     struct ETHREAD *Thread;
00091     KEVENT ConnectEvent;
00092     KEVENT ReadEvent;
00093     KEVENT WriteEvent;
00094     ULONG PipeEnd;
00095     ULONG PipeState;
00096     ULONG ReadDataAvailable;
00097     ULONG WriteQuotaAvailable;
00098     ULONG RefCount;
00099 
00100     LIST_ENTRY ReadRequestListHead;
00101 
00102     PVOID Data;
00103     PVOID ReadPtr;
00104     PVOID WritePtr;
00105     ULONG MaxDataLength;
00106 
00107     FAST_MUTEX DataListLock;    /* Data queue lock */
00108 
00109     union
00110     {
00111         NPFS_CCB_DIRECTORY_DATA Directory;
00112     } u;
00113 
00114 } NPFS_CCB, *PNPFS_CCB;
00115 
00116 typedef struct _NPFS_CONTEXT
00117 {
00118     LIST_ENTRY ListEntry;
00119     PKEVENT WaitEvent;
00120 } NPFS_CONTEXT, *PNPFS_CONTEXT;
00121 
00122 typedef struct _NPFS_THREAD_CONTEXT
00123 {
00124     ULONG Count;
00125     KEVENT Event;
00126     PNPFS_VCB Vcb;
00127     LIST_ENTRY ListEntry;
00128     PVOID WaitObjectArray[MAXIMUM_WAIT_OBJECTS];
00129     KWAIT_BLOCK WaitBlockArray[MAXIMUM_WAIT_OBJECTS];
00130     PIRP WaitIrpArray[MAXIMUM_WAIT_OBJECTS];
00131 } NPFS_THREAD_CONTEXT, *PNPFS_THREAD_CONTEXT;
00132 
00133 typedef struct _NPFS_WAITER_ENTRY
00134 {
00135     LIST_ENTRY Entry;
00136     PNPFS_CCB Ccb;
00137 } NPFS_WAITER_ENTRY, *PNPFS_WAITER_ENTRY;
00138 
00139 
00140 extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList;
00141 
00142 
00143 #define KeLockMutex(x) KeWaitForSingleObject(x, \
00144     UserRequest, \
00145     KernelMode, \
00146     FALSE, \
00147     NULL);
00148 
00149 #define KeUnlockMutex(x) KeReleaseMutex(x, FALSE);
00150 
00151 #define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
00152 
00153 DRIVER_DISPATCH NpfsCreate;
00154 NTSTATUS NTAPI NpfsCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
00155 
00156 DRIVER_DISPATCH NpfsCreateNamedPipe;
00157 NTSTATUS NTAPI NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject, PIRP Irp);
00158 
00159 DRIVER_DISPATCH NpfsCleanup;
00160 NTSTATUS NTAPI NpfsCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp);
00161 
00162 DRIVER_DISPATCH NpfsClose;
00163 NTSTATUS NTAPI NpfsClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
00164 
00165 DRIVER_DISPATCH NpfsDirectoryControl;
00166 NTSTATUS NTAPI NpfsDirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
00167 
00168 DRIVER_DISPATCH NpfsRead;
00169 NTSTATUS NTAPI NpfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
00170 
00171 DRIVER_DISPATCH NpfsWrite;
00172 NTSTATUS NTAPI NpfsWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
00173 
00174 DRIVER_DISPATCH NpfsFlushBuffers;
00175 NTSTATUS NTAPI NpfsFlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp);
00176 
00177 DRIVER_DISPATCH NpfsFileSystemControl;
00178 NTSTATUS NTAPI NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
00179 
00180 DRIVER_DISPATCH NpfsQueryInformation;
00181 NTSTATUS NTAPI NpfsQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
00182 
00183 DRIVER_DISPATCH NpfsSetInformation;
00184 NTSTATUS NTAPI NpfsSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
00185 
00186 DRIVER_DISPATCH NpfsQueryVolumeInformation;
00187 NTSTATUS NTAPI NpfsQueryVolumeInformation (PDEVICE_OBJECT DeviceObject, PIRP Irp);
00188 
00189 NTSTATUS NTAPI
00190 DriverEntry(PDRIVER_OBJECT DriverObject,
00191             PUNICODE_STRING RegistryPath);
00192 
00193 PNPFS_FCB
00194 NpfsFindPipe(PNPFS_VCB Vcb,
00195              PUNICODE_STRING PipeName);
00196 
00197 FCB_TYPE
00198 NpfsGetFcb(PFILE_OBJECT FileObject,
00199            PNPFS_FCB *Fcb);
00200 
00201 CCB_TYPE
00202 NpfsGetCcb(PFILE_OBJECT FileObject,
00203            PNPFS_CCB *Ccb);
00204 
00205 #endif /* __DRIVERS_FS_NP_NPFS_H */

Generated on Mon May 28 2012 04:27:27 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.