return STATUS_SUCCESS;
}
- if (pFcb->Flags & FCB_IS_VOLUME)
+ if (BooleanFlagOn(pFcb->Flags, FCB_IS_VOLUME))
{
DPRINT("Volume\n");
FileObject->FsContext2 = NULL;
FileObject->FsContext2 = NULL;
FileObject->FsContext = NULL;
FileObject->SectionObjectPointer = NULL;
- DeviceExt->OpenHandleCount--;
if (pCcb)
{
if (IrpContext->DeviceObject == VfatGlobalData->DeviceObject)
{
DPRINT("Closing file system\n");
- Status = STATUS_SUCCESS;
- goto ByeBye;
+ IrpContext->Irp->IoStatus.Information = 0;
+ return STATUS_SUCCESS;
}
-#if 0
- /* There occurs a dead look at the call to CcRosDeleteFileCache/ObDereferenceObject/VfatClose
- in CmLazyCloseThreadMain if VfatClose is execute asynchronous in a worker thread. */
- if (!ExAcquireResourceExclusiveLite(&IrpContext->DeviceExt->DirResource, IrpContext->Flags & IRPCONTEXT_CANWAIT))
-#else
- if (!ExAcquireResourceExclusiveLite(&IrpContext->DeviceExt->DirResource, TRUE))
-#endif
+ if (!ExAcquireResourceExclusiveLite(&IrpContext->DeviceExt->DirResource, BooleanFlagOn(IrpContext->Flags, IRPCONTEXT_CANWAIT)))
{
- return VfatQueueRequest(IrpContext);
+ return VfatMarkIrpContextForQueue(IrpContext);
}
Status = VfatCloseFile(IrpContext->DeviceExt, IrpContext->FileObject);
ExReleaseResourceLite(&IrpContext->DeviceExt->DirResource);
-ByeBye:
- IrpContext->Irp->IoStatus.Status = Status;
IrpContext->Irp->IoStatus.Information = 0;
- IoCompleteRequest(IrpContext->Irp, IO_NO_INCREMENT);
- VfatFreeIrpContext(IrpContext);
return Status;
}