PVFAT_IRP_CONTEXT IrpContext)
{
PVFATFCB pFcb;
+ PVFATCCB pCcb;
PDEVICE_EXTENSION DeviceExt = IrpContext->DeviceExt;
PFILE_OBJECT FileObject = IrpContext->FileObject;
return STATUS_PENDING;
}
+ pCcb = FileObject->FsContext2;
+ if (BooleanFlagOn(pCcb->Flags, CCB_DELETE_ON_CLOSE))
+ {
+ pFcb->Flags |= FCB_DELETE_PENDING;
+ }
+
/* Notify about the cleanup */
FsRtlNotifyCleanup(IrpContext->DeviceExt->NotifySync,
&(IrpContext->DeviceExt->NotifyList),
ULONG RequestedDisposition, RequestedOptions;
PVFATFCB pFcb = NULL;
PVFATFCB ParentFcb = NULL;
+ PVFATCCB pCcb = NULL;
PWCHAR c, last;
BOOLEAN PagingFileCreate;
BOOLEAN Dots;
}
}
+ pCcb = FileObject->FsContext2;
+ if (BooleanFlagOn(RequestedOptions, FILE_DELETE_ON_CLOSE))
+ {
+ pCcb->Flags |= CCB_DELETE_ON_CLOSE;
+ }
+
pFcb->OpenHandleCount++;
DeviceExt->OpenHandleCount++;
}
&pFcb->FCBShareAccess);
}
+ pCcb = FileObject->FsContext2;
+ if (BooleanFlagOn(RequestedOptions, FILE_DELETE_ON_CLOSE))
+ {
+ pCcb->Flags |= CCB_DELETE_ON_CLOSE;
+ }
+
if (Irp->IoStatus.Information == FILE_CREATED)
{
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
ULONG LastOffset;
} VFATFCB, *PVFATFCB;
+#define CCB_DELETE_ON_CLOSE 0x0001
+
typedef struct _VFATCCB
{
LARGE_INTEGER CurrentByteOffset;
+ ULONG Flags;
/* for DirectoryControl */
ULONG Entry;
/* for DirectoryControl */