DPRINT("'%wZ'\n", &FileObject->RelatedFileObject->FileName);
*ParentFcb = FileObject->RelatedFileObject->FsContext;
- (*ParentFcb)->RefCount++;
+ vfatGrabFCB(DeviceExt, *ParentFcb);
}
else
{
if (*ParentFcb)
{
- (*ParentFcb)->RefCount++;
+ vfatGrabFCB(DeviceExt, *ParentFcb);
}
/* try first to find an existing FCB in memory */
pFcb = DeviceExt->VolumeFcb;
vfatAttachFCBToFileObject(DeviceExt, pFcb, FileObject);
- pFcb->RefCount++;
+ vfatGrabFCB(DeviceExt, pFcb);
Irp->IoStatus.Information = FILE_OPENED;
return STATUS_SUCCESS;
if (Status == STATUS_SUCCESS)
{
- ParentFcb->RefCount++;
+ vfatGrabFCB(DeviceExt, ParentFcb);
vfatReleaseFCB(DeviceExt, TargetFcb);
Irp->IoStatus.Information = FILE_EXISTS;
}
return FCB->PathNameU.Length == sizeof(WCHAR) && FCB->PathNameU.Buffer[0] == L'\\' ? TRUE : FALSE;
}
+VOID
+vfatGrabFCB(
+ PDEVICE_EXTENSION pVCB,
+ PVFATFCB pFCB)
+{
+ ++pFCB->RefCount;
+}
+
VOID
vfatReleaseFCB(
PDEVICE_EXTENSION pVCB,
}
if (pFCB->parentFcb)
{
- pFCB->parentFcb->RefCount++;
+ vfatGrabFCB(pVCB, pFCB->parentFcb);
}
}
*/
vfatReleaseFCB(pVCB, OldParent);
- /* In case we were moving accross directories, reset caching on old parent */
- //if (OldParent != ParentFcb)
- //{
- // CcUninitializeCacheMap(OldParent->FileObject, NULL, NULL);
- //}
-
return STATUS_SUCCESS;
}
DPRINT("'%wZ' '%wZ'\n", &FileNameU, FcbNameU);
if (RtlEqualUnicodeString(&FileNameU, FcbNameU, TRUE))
{
- rcFCB->RefCount++;
+ vfatGrabFCB(pVCB, rcFCB);
return rcFCB;
}
}
fileObject->FsContext = fcb;
fileObject->FsContext2 = newCCB;
fcb->FileObject = fileObject;
- fcb->RefCount++;
+ vfatGrabFCB(vcb, fcb);
_SEH2_TRY
{
rcFCB->RFCB.FileSize.QuadPart = Size;
rcFCB->RFCB.ValidDataLength.QuadPart = Size;
rcFCB->RFCB.AllocationSize.QuadPart = ROUND_UP(Size, vcb->FatInfo.BytesPerCluster);
- rcFCB->RefCount++;
+ vfatGrabFCB(vcb, rcFCB);
if (vfatFCBIsDirectory(rcFCB))
{
vfatFCBInitializeCacheFromVolume(vcb, rcFCB);
{
*pFCB = FCB;
*pParentFCB = FCB->parentFcb;
- (*pParentFCB)->RefCount++;
+ vfatGrabFCB(pVCB, *pParentFCB);
return STATUS_SUCCESS;
}
/* Effectively delete old file to allow renaming */
VfatDelEntry(DeviceExt, TargetFcb, NULL);
- (*ParentFCB)->RefCount++;
+ vfatGrabFCB(DeviceExt, *ParentFCB);
vfatReleaseFCB(DeviceExt, TargetFcb);
*Deleted = TRUE;
}
{
/* Try to find target */
ParentFCB = FCB->parentFcb;
- ParentFCB->RefCount++;
+ vfatGrabFCB(DeviceObject, ParentFCB);
Status = vfatPrepareTargetForRename(DeviceObject,
&ParentFCB,
&NewFile,