+#define FatIsFastIoPossible(FCB) ((BOOLEAN) \
+ (((FCB)->Condition != FcbGood || !FsRtlOplockIsFastIoPossible(&(FCB)->Fcb.Oplock)) ? \
+ FastIoIsNotPossible \
+ : \
+ (!FsRtlAreThereCurrentFileLocks(&(FCB)->Fcb.Lock) && \
+ ((FCB)->OutstandingAsyncWrites == 0) && \
+ !FlagOn((FCB)->Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED) ? \
+ FastIoIsPossible \
+ : \
+ FastIoIsQuestionable \
+ ) \
+ ) \
+)
+
+#define IsFileObjectReadOnly(FO) (!((FO)->WriteAccess | (FO)->DeleteAccess))
+#define IsFileDeleted(FCB) (FlagOn((FCB)->State, FCB_STATE_DELETE_ON_CLOSE) && ((FCB)->UncleanCount == 0))
+
+BOOLEAN
+FORCEINLINE
+FatIsIoRangeValid(IN LARGE_INTEGER Start, IN ULONG Length)
+{
+ /* Check if it's more than 32bits, or if the length causes 32bit overflow.
+ FAT-specific! */
+
+ return !(Start.HighPart || Start.LowPart + Length < Start.LowPart);
+}
+
+