+typedef struct _VFAT_MOVE_CONTEXT
+{
+ ULONG FirstCluster;
+ ULONG FileSize;
+ USHORT CreationDate;
+ USHORT CreationTime;
+ BOOLEAN InPlace;
+} VFAT_MOVE_CONTEXT, *PVFAT_MOVE_CONTEXT;
+
+FORCEINLINE
+NTSTATUS
+VfatMarkIrpContextForQueue(PVFAT_IRP_CONTEXT IrpContext)
+{
+ PULONG Flags = &IrpContext->Flags;
+
+ *Flags &= ~IRPCONTEXT_COMPLETE;
+ *Flags |= IRPCONTEXT_QUEUE;
+
+ return STATUS_PENDING;
+}
+
+FORCEINLINE
+BOOLEAN
+vfatFCBIsDirectory(PVFATFCB FCB)
+{
+ return BooleanFlagOn(*FCB->Attributes, FILE_ATTRIBUTE_DIRECTORY);
+}
+
+FORCEINLINE
+BOOLEAN
+vfatFCBIsReadOnly(PVFATFCB FCB)
+{
+ return BooleanFlagOn(*FCB->Attributes, FILE_ATTRIBUTE_READONLY);
+}
+
+FORCEINLINE
+BOOLEAN
+vfatVolumeIsFatX(PDEVICE_EXTENSION DeviceExt)
+{
+ return BooleanFlagOn(DeviceExt->Flags, VCB_IS_FATX);
+}
+
+FORCEINLINE
+VOID
+vfatReportChange(
+ IN PDEVICE_EXTENSION DeviceExt,
+ IN PVFATFCB Fcb,
+ IN ULONG FilterMatch,
+ IN ULONG Action)
+{
+ FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
+ &(DeviceExt->NotifyList),
+ (PSTRING)&Fcb->PathNameU,
+ Fcb->PathNameU.Length - Fcb->LongNameU.Length,
+ NULL, NULL, FilterMatch, Action, NULL);
+}
+
+#define vfatAddToStat(Vcb, Stat, Inc) \
+{ \
+ PSTATISTICS Stats = &(Vcb)->Statistics[KeGetCurrentProcessorNumber() % VfatGlobalData->NumberProcessors]; \
+ Stats->Stat += Inc; \
+}