- Use given allocation size, if we overwrite or supersede an existing file.
svn path=/trunk/; revision=19689
PVFATFCB ParentFcb;
PWCHAR c, last;
BOOLEAN PagingFileCreate = FALSE;
PVFATFCB ParentFcb;
PWCHAR c, last;
BOOLEAN PagingFileCreate = FALSE;
- LARGE_INTEGER AllocationSize;
BOOLEAN Dots;
UNICODE_STRING FileNameU;
UNICODE_STRING PathNameU;
BOOLEAN Dots;
UNICODE_STRING FileNameU;
UNICODE_STRING PathNameU;
if (!NT_SUCCESS (Status))
{
if (RequestedDisposition == FILE_CREATE ||
if (!NT_SUCCESS (Status))
{
if (RequestedDisposition == FILE_CREATE ||
- RequestedDisposition == FILE_OPEN_IF ||
- RequestedDisposition == FILE_OVERWRITE_IF ||
- RequestedDisposition == FILE_SUPERSEDE)
+ RequestedDisposition == FILE_OPEN_IF ||
+ RequestedDisposition == FILE_OVERWRITE_IF ||
+ RequestedDisposition == FILE_SUPERSEDE)
{
ULONG Attributes;
Attributes = Stack->Parameters.Create.FileAttributes;
{
ULONG Attributes;
Attributes = Stack->Parameters.Create.FileAttributes;
}
Irp->IoStatus.Information = FILE_CREATED;
}
Irp->IoStatus.Information = FILE_CREATED;
VfatSetAllocationSizeInformation(FileObject,
pFcb,
DeviceExt,
VfatSetAllocationSizeInformation(FileObject,
pFcb,
DeviceExt,
if (RequestedDisposition == FILE_OVERWRITE ||
if (RequestedDisposition == FILE_OVERWRITE ||
- RequestedDisposition == FILE_OVERWRITE_IF)
+ RequestedDisposition == FILE_OVERWRITE_IF ||
+ RequestedDisposition == FILE_SUPERSEDE)
- AllocationSize.QuadPart = 0;
+ ExAcquireResourceExclusiveLite(&(pFcb->MainResource), TRUE);
Status = VfatSetAllocationSizeInformation (FileObject,
Status = VfatSetAllocationSizeInformation (FileObject,
- pFcb,
- DeviceExt,
- &AllocationSize);
+ pFcb,
+ DeviceExt,
+ &Irp->Overlay.AllocationSize);
+ ExReleaseResourceLite(&(pFcb->MainResource));
if (!NT_SUCCESS (Status))
{
VfatCloseFile (DeviceExt, FileObject);
if (!NT_SUCCESS (Status))
{
VfatCloseFile (DeviceExt, FileObject);
-
- /* Supersede the file */
if (RequestedDisposition == FILE_SUPERSEDE)
{
if (RequestedDisposition == FILE_SUPERSEDE)
{
- AllocationSize.QuadPart = 0;
- VfatSetAllocationSizeInformation(FileObject, pFcb, DeviceExt, &AllocationSize);
Irp->IoStatus.Information = FILE_SUPERSEDED;
}
Irp->IoStatus.Information = FILE_SUPERSEDED;
}
- else if (RequestedDisposition == FILE_OVERWRITE || RequestedDisposition == FILE_OVERWRITE_IF)
+ else if (RequestedDisposition == FILE_OVERWRITE ||
+ RequestedDisposition == FILE_OVERWRITE_IF)
{
Irp->IoStatus.Information = FILE_OVERWRITTEN;
}
{
Irp->IoStatus.Information = FILE_OVERWRITTEN;
}