diff --git a/src/sys/cleanup.c b/src/sys/cleanup.c index fba11374..2e5b7e45 100644 --- a/src/sys/cleanup.c +++ b/src/sys/cleanup.c @@ -30,8 +30,7 @@ FSP_DRIVER_DISPATCH FspCleanup; enum { /* Cleanup */ - RequestDeviceObject = 0, - RequestIrp = 1, + RequestIrp = 0, }; typedef struct @@ -81,10 +80,7 @@ static NTSTATUS FspFsvolCleanup( FspFileNodeCleanup(FileNode, FileObject, &DeletePending); if (DeletePending) - { - FspFsvolDeviceFileRenameAcquireShared(FsvolDeviceObject); FspFileNodeAcquireExclusive(FileNode, Full); - } else FspFileNodeAcquireShared(FileNode, Full); @@ -96,11 +92,6 @@ static NTSTATUS FspFsvolCleanup( Request->Req.Cleanup.UserContext2 = FileDesc->UserContext2; Request->Req.Cleanup.Delete = DeletePending; - if (DeletePending) - { - FspFsvolDeviceFileRenameSetOwner(FsvolDeviceObject, Request); - FspIopRequestContext(Request, RequestDeviceObject) = FsvolDeviceObject; - } FspFileNodeSetOwner(FileNode, Full, Request); FspIopRequestContext(Request, RequestIrp) = Irp; @@ -134,7 +125,6 @@ static VOID FspFsvolCleanupRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Co PAGED_CODE(); - PDEVICE_OBJECT FsvolDeviceObject = Context[RequestDeviceObject]; PIRP Irp = Context[RequestIrp]; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PFILE_OBJECT FileObject = IrpSp->FileObject; @@ -165,8 +155,6 @@ static VOID FspFsvolCleanupRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Co if (DeletePending) { - ASSERT(0 != FsvolDeviceObject); - /* FileNode is Exclusive Full; release Pgio */ FspFileNodeReleaseOwner(FileNode, Pgio, Request); @@ -174,8 +162,6 @@ static VOID FspFsvolCleanupRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Co } else { - ASSERT(0 == FsvolDeviceObject); - /* FileNode is Shared Full; reacquire as Exclusive Main for CcUnitializeCacheMap */ FspFileNodeReleaseOwner(FileNode, Full, Request); @@ -208,9 +194,6 @@ static VOID FspFsvolCleanupRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Co /* this works correctly even if owner is current thread */ FspFileNodeReleaseOwner(FileNode, Main, Request); - - if (DeletePending) - FspFsvolDeviceFileRenameReleaseOwner(FsvolDeviceObject, Request); } static VOID FspFsvolCleanupUninitialize(PVOID Context) diff --git a/src/sys/driver.h b/src/sys/driver.h index 6b18dbc0..29256a2d 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -752,7 +752,7 @@ typedef struct LONG OpenCount; SHARE_ACCESS ShareAccess; FSP_DEVICE_CONTEXT_BY_NAME_TABLE_ELEMENT ContextByNameElementStorage; - /* locked under FSP_FSVOL_DEVICE_EXTENSION::FileRenameResource */ + /* locked under FSP_FSVOL_DEVICE_EXTENSION::FileRenameResource or Header.Resource */ UNICODE_STRING FileName; PWSTR ExternalFileName; /* locked under Header.Resource */ diff --git a/src/sys/fileinfo.c b/src/sys/fileinfo.c index cffc3218..ef662165 100644 --- a/src/sys/fileinfo.c +++ b/src/sys/fileinfo.c @@ -224,7 +224,7 @@ static NTSTATUS FspFsvolQueryNameInformation(PFILE_OBJECT FileObject, if ((PVOID)(Info + 1) > BufferEnd) return STATUS_BUFFER_TOO_SMALL; - FspFsvolDeviceFileRenameAcquireShared(FsvolDeviceObject); + FspFileNodeAcquireShared(FileNode, Main); Info->FileNameLength = FsvolDeviceExtension->VolumePrefix.Length + FileNode->FileName.Length; @@ -246,7 +246,7 @@ static NTSTATUS FspFsvolQueryNameInformation(PFILE_OBJECT FileObject, RtlCopyMemory(Buffer, FileNode->FileName.Buffer, CopyLength); Buffer += CopyLength; - FspFsvolDeviceFileRenameRelease(FsvolDeviceObject); + FspFileNodeRelease(FileNode, Main); *PBuffer = Buffer; @@ -715,7 +715,6 @@ static NTSTATUS FspFsvolSetDispositionInformation( /* cannot delete root directory */ return STATUS_CANNOT_DELETE; - FspFsvolDeviceFileRenameAcquireShared(FsvolDeviceObject); FspFileNodeAcquireExclusive(FileNode, Full); if (Info->DeleteFile) @@ -740,16 +739,13 @@ static NTSTATUS FspFsvolSetDispositionInformation( Request->Req.SetInformation.FileInformationClass = FileDispositionInformation; Request->Req.SetInformation.Info.Disposition.Delete = Info->DeleteFile; - FspFsvolDeviceFileRenameSetOwner(FsvolDeviceObject, Request); FspFileNodeSetOwner(FileNode, Full, Request); FspIopRequestContext(Request, RequestFileNode) = FileNode; - FspIopRequestContext(Request, RequestDeviceObject) = FsvolDeviceObject; return FSP_STATUS_IOQ_POST; unlock_exit: FspFileNodeRelease(FileNode, Full); - FspFsvolDeviceFileRenameRelease(FsvolDeviceObject); return Result; } @@ -760,7 +756,6 @@ static NTSTATUS FspFsvolSetDispositionInformationSuccess( PAGED_CODE(); PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); - PDEVICE_OBJECT FsvolDeviceObject = IrpSp->DeviceObject; PFILE_OBJECT FileObject = IrpSp->FileObject; PFILE_DISPOSITION_INFORMATION Info = (PFILE_DISPOSITION_INFORMATION)Irp->AssociatedIrp.SystemBuffer; FSP_FILE_NODE *FileNode = FileObject->FsContext; @@ -770,9 +765,7 @@ static NTSTATUS FspFsvolSetDispositionInformationSuccess( FileObject->DeletePending = Info->DeleteFile; FspIopRequestContext(Request, RequestFileNode) = 0; - FspIopRequestContext(Request, RequestDeviceObject) = 0; FspFileNodeReleaseOwner(FileNode, Full, Request); - FspFsvolDeviceFileRenameReleaseOwner(FsvolDeviceObject, Request); Irp->IoStatus.Information = 0;