/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: drivers/filesystems/msfs/msfs.h * PURPOSE: Mailslot filesystem * PROGRAMMER: Eric Kohl * Nikita Pechenkin (n.pechenkin@mail.ru) */ #ifndef __DRIVERS_FS_MS_MSFS_H #define __DRIVERS_FS_MS_MSFS_H #include #define DEFAULTAPI NTAPI typedef struct _MSFS_DEVICE_EXTENSION { LIST_ENTRY FcbListHead; KMUTEX FcbListLock; } MSFS_DEVICE_EXTENSION, *PMSFS_DEVICE_EXTENSION; typedef struct _MSFS_FCB { FSRTL_COMMON_FCB_HEADER RFCB; UNICODE_STRING Name; LIST_ENTRY FcbListEntry; KSPIN_LOCK CcbListLock; LIST_ENTRY CcbListHead; struct _MSFS_CCB *ServerCcb; ULONG ReferenceCount; LARGE_INTEGER TimeOut; ULONG MaxMessageSize; ULONG MessageCount; KSPIN_LOCK MessageListLock; LIST_ENTRY MessageListHead; IO_CSQ CancelSafeQueue; KSPIN_LOCK QueueLock; LIST_ENTRY PendingIrpQueue; } MSFS_FCB, *PMSFS_FCB; typedef struct _MSFS_DPC_CTX { KTIMER Timer; KDPC Dpc; PIO_CSQ Csq; KEVENT Event; IO_CSQ_IRP_CONTEXT CsqContext; } MSFS_DPC_CTX, *PMSFS_DPC_CTX; typedef struct _MSFS_CCB { LIST_ENTRY CcbListEntry; PMSFS_FCB Fcb; } MSFS_CCB, *PMSFS_CCB; typedef struct _MSFS_MESSAGE { LIST_ENTRY MessageListEntry; ULONG Size; UCHAR Buffer[1]; } MSFS_MESSAGE, *PMSFS_MESSAGE; #define KeLockMutex(x) KeWaitForSingleObject(x, \ Executive, \ KernelMode, \ FALSE, \ NULL); #define KeUnlockMutex(x) KeReleaseMutex(x, FALSE); DRIVER_DISPATCH MsfsCreate; NTSTATUS DEFAULTAPI MsfsCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp); DRIVER_DISPATCH MsfsCreateMailslot; NTSTATUS DEFAULTAPI MsfsCreateMailslot(PDEVICE_OBJECT DeviceObject, PIRP Irp); DRIVER_DISPATCH MsfsClose; NTSTATUS DEFAULTAPI MsfsClose(PDEVICE_OBJECT DeviceObject, PIRP Irp); DRIVER_DISPATCH MsfsQueryInformation; NTSTATUS DEFAULTAPI MsfsQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp); DRIVER_DISPATCH MsfsSetInformation; NTSTATUS DEFAULTAPI MsfsSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp); DRIVER_DISPATCH MsfsRead; NTSTATUS DEFAULTAPI MsfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp); DRIVER_DISPATCH MsfsWrite; NTSTATUS DEFAULTAPI MsfsWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp); DRIVER_DISPATCH MsfsFileSystemControl; NTSTATUS DEFAULTAPI MsfsFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp); NTSTATUS NTAPI DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath); IO_CSQ_INSERT_IRP MsfsInsertIrp; VOID NTAPI MsfsInsertIrp(PIO_CSQ Csq, PIRP Irp); IO_CSQ_REMOVE_IRP MsfsRemoveIrp; VOID NTAPI MsfsRemoveIrp(PIO_CSQ Csq, PIRP Irp); IO_CSQ_PEEK_NEXT_IRP MsfsPeekNextIrp; PIRP NTAPI MsfsPeekNextIrp(PIO_CSQ Csq, PIRP Irp, PVOID PeekContext); IO_CSQ_ACQUIRE_LOCK MsfsAcquireLock; VOID NTAPI MsfsAcquireLock(PIO_CSQ Csq, PKIRQL Irql); IO_CSQ_RELEASE_LOCK MsfsReleaseLock; VOID NTAPI MsfsReleaseLock(PIO_CSQ Csq, KIRQL Irql); IO_CSQ_COMPLETE_CANCELED_IRP MsfsCompleteCanceledIrp; VOID NTAPI MsfsCompleteCanceledIrp(PIO_CSQ pCsq, PIRP Irp); KDEFERRED_ROUTINE MsfsTimeout; VOID NTAPI MsfsTimeout(PKDPC Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVOID SystemArgument2); #endif /* __DRIVERS_FS_MS_MSFS_H */