#include <debug.h>
#include <pseh/pseh2.h>
+#include "fullfat.h"
+
#include <fat.h>
#include <fatstruc.h>
#define TAG_FCB 'BCFV'
#define TAG_IRP 'PRIV'
#define TAG_VFAT 'TAFV'
+
+
+/* Global resource acquire/release */
+#define FatAcquireExclusiveGlobal(IrpContext) \
+( \
+ ExAcquireResourceExclusiveLite(&FatGlobalData.Resource, \
+ (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
+)
+
+#define FatAcquireSharedGlobal(IrpContext) \
+( \
+ ExAcquireResourceSharedLite(&FatGlobalData.Resource, \
+ (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
+)
+
+#define FatReleaseGlobal(IrpContext) \
+{ \
+ ExReleaseResourceLite(&(FatGlobalData.Resource)); \
+}
+
+
/* ------------------------------------------------------ shutdown.c */
DRIVER_DISPATCH FatShutdown;
IN PLARGE_INTEGER Offset,
IN SIZE_T Length);
-PVOID
-FatMapUserBuffer(
- IN OUT PIRP Irp);
-
/* ----------------------------------------------------------- dir.c */
NTSTATUS NTAPI
FatDirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
+VOID NTAPI
+FatCreateRootDcb(IN PFAT_IRP_CONTEXT IrpContext,
+ IN PVCB Vcb);
+
/* -------------------------------------------------------- create.c */
NTSTATUS NTAPI
PIRP Irp OPTIONAL,
NTSTATUS Status);
+BOOLEAN NTAPI
+FatAcquireExclusiveVcb(IN PFAT_IRP_CONTEXT IrpContext,
+ IN PVCB Vcb);
+
+VOID NTAPI
+FatReleaseVcb(IN PFAT_IRP_CONTEXT IrpContext,
+ IN PVCB Vcb);
+
+TYPE_OF_OPEN
+NTAPI
+FatDecodeFileObject(IN PFILE_OBJECT FileObject,
+ OUT PVCB *Vcb,
+ OUT PFCB *FcbOrDcb,
+ OUT PCCB *Ccb);
+
+VOID NTAPI
+FatSetFileObject(PFILE_OBJECT FileObject,
+ TYPE_OF_OPEN TypeOfOpen,
+ PVOID Fcb,
+ PCCB Ccb);
+
+PVOID FASTCALL
+FatMapUserBuffer(PIRP Irp);
+
+/* --------------------------------------------------------- fullfat.c */
+
+FF_T_SINT32
+FatWriteBlocks(FF_T_UINT8 *pBuffer, FF_T_UINT32 SectorAddress, FF_T_UINT32 Count, void *pParam);
+
+FF_T_SINT32
+FatReadBlocks(FF_T_UINT8 *pBuffer, FF_T_UINT32 SectorAddress, FF_T_UINT32 Count, void *pParam);
/* --------------------------------------------------------- lock.c */
NTSTATUS
FatInitializeVcb(
+ IN PFAT_IRP_CONTEXT IrpContext,
IN PVCB Vcb,
IN PDEVICE_OBJECT TargetDeviceObject,
IN PVPB Vpb);
IN PFCB ParentFcb,
IN PFCB Fcb);
-NTSTATUS
+PFCB NTAPI
FatCreateFcb(
- OUT PFCB* CreatedFcb,
IN PFAT_IRP_CONTEXT IrpContext,
- IN PFCB ParentFcb,
- IN PDIR_ENTRY Dirent,
- IN PUNICODE_STRING FileName,
- IN PUNICODE_STRING LongFileName OPTIONAL);
+ IN PVCB Vcb,
+ IN PFCB ParentDcb);
NTSTATUS
FatOpenFcb(
IN PFCB ParentFcb,
IN PUNICODE_STRING FileName);
+PFCB NTAPI
+FatFindFcb(PFAT_IRP_CONTEXT IrpContext,
+ PRTL_SPLAY_LINKS *RootNode,
+ PSTRING AnsiName,
+ PBOOLEAN IsDosName);
+
+PCCB NTAPI
+FatCreateCcb();
+
/* ------------------------------------------------------------ rw.c */
NTSTATUS NTAPI