Index: close.c =================================================================== --- drivers/filesystems/fastfat/close.c (revision 65165) +++ drivers/filesystems/fastfat/close.c (working copy) @@ -42,7 +42,7 @@ if (pFcb->Flags & FCB_IS_VOLUME) { DPRINT1("Volume\n"); - pFcb->RefCount--; + vfatReleaseFCB(DeviceExt, pFcb); FileObject->FsContext2 = NULL; } else Index: fcb.c =================================================================== --- drivers/filesystems/fastfat/fcb.c (revision 65165) +++ drivers/filesystems/fastfat/fcb.c (working copy) @@ -294,6 +294,7 @@ { ASSERT(ExIsResourceAcquiredExclusive(&pVCB->DirResource)); + ASSERT(pFCB->RefCount > 0); ++pFCB->RefCount; } @@ -311,6 +312,7 @@ while (pFCB) { + ASSERT(pFCB->RefCount > 0); pFCB->RefCount--; if (pFCB->RefCount == 0) { @@ -508,7 +510,7 @@ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { status = _SEH2_GetExceptionCode(); - fcb->RefCount--; + vfatReleaseFCB(vcb, fcb); fcb->FileObject = NULL; ExFreeToNPagedLookasideList(&VfatGlobalData->CcbLookasideList, newCCB); ObDereferenceObject(fileObject); @@ -661,7 +663,9 @@ rcFCB->RFCB.FileSize.QuadPart = Size; rcFCB->RFCB.ValidDataLength.QuadPart = Size; rcFCB->RFCB.AllocationSize.QuadPart = ROUND_UP(Size, vcb->FatInfo.BytesPerCluster); - vfatGrabFCB(vcb, rcFCB); + ASSERT(ExIsResourceAcquiredExclusiveLite(&vcb->DirResource)); + ASSERT(rcFCB->RefCount == 0); + rcFCB->RefCount = 1; if (vfatFCBIsDirectory(rcFCB)) { vfatFCBInitializeCacheFromVolume(vcb, rcFCB);