ASSERT(ExIsResourceAcquiredExclusive(&pVCB->DirResource));
ASSERT(pFCB != pVCB->VolumeFcb);
+ ASSERT(pFCB->RefCount > 0);
++pFCB->RefCount;
}
while (pFCB)
{
ASSERT(pFCB != pVCB->VolumeFcb);
+ ASSERT(pFCB->RefCount > 0);
pFCB->RefCount--;
if (pFCB->RefCount == 0)
{
fileObject->FsContext = fcb;
fileObject->FsContext2 = newCCB;
fcb->FileObject = fileObject;
- vfatGrabFCB(vcb, fcb);
_SEH2_TRY
{
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
status = _SEH2_GetExceptionCode();
- fcb->RefCount--;
fcb->FileObject = NULL;
ExFreeToNPagedLookasideList(&VfatGlobalData->CcbLookasideList, newCCB);
ObDereferenceObject(fileObject);
}
_SEH2_END;
+ vfatGrabFCB(vcb, fcb);
fcb->Flags |= FCB_CACHE_INITIALIZED;
return STATUS_SUCCESS;
}
rcFCB->RFCB.FileSize.QuadPart = Size;
rcFCB->RFCB.ValidDataLength.QuadPart = Size;
rcFCB->RFCB.AllocationSize.QuadPart = ROUND_UP(Size, vcb->FatInfo.BytesPerCluster);
- vfatGrabFCB(vcb, rcFCB);
+ rcFCB->RefCount = 1;
if (vfatFCBIsDirectory(rcFCB))
{
vfatFCBInitializeCacheFromVolume(vcb, rcFCB);