diff --git a/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp b/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp index eb643b380b..86751d0fa6 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp @@ -2094,6 +2094,7 @@ AFSSetRenameInfo( IN PIRP Irp) pSrcCcb = (AFSCcb *)pSrcFileObj->FsContext2; pSrcObject = pSrcFcb->ObjectInformation; + pSrcParentObject = pSrcFcb->ObjectInformation->ParentObjectInformation; // // Perform some basic checks to ensure FS integrity @@ -2132,6 +2133,15 @@ AFSSetRenameInfo( IN PIRP Irp) } } + // + // Extract off the final component name from the Fcb + // + + uniSourceName.Length = (USHORT)pSrcCcb->DirectoryCB->NameInformation.FileName.Length; + uniSourceName.MaximumLength = uniSourceName.Length; + + uniSourceName.Buffer = pSrcCcb->DirectoryCB->NameInformation.FileName.Buffer; + // // Resolve the target fileobject // @@ -2146,7 +2156,7 @@ AFSSetRenameInfo( IN PIRP Irp) pRenameInfo = (PFILE_RENAME_INFORMATION)Irp->AssociatedIrp.SystemBuffer; - pTargetParentObject = pSrcFcb->ObjectInformation->ParentObjectInformation; + pTargetParentObject = pSrcParentObject; pTargetDcb = pTargetParentObject->Fcb; @@ -2174,6 +2184,31 @@ AFSSetRenameInfo( IN PIRP Irp) uniTargetName = *((PUNICODE_STRING)&pTargetFileObj->FileName); } + // + // The quick check to see if they are not really performing a rename + // Do the names match? Only do this where the parent directories are + // the same + // + + if( pTargetParentObject == pSrcParentObject) + { + + if( FsRtlAreNamesEqual( &uniTargetName, + &uniSourceName, + FALSE, + NULL)) + { + try_return( ntStatus = STATUS_SUCCESS); + } + + bCommonParent = TRUE; + } + else + { + + bCommonParent = FALSE; + } + // // We do not allow cross-volume renames to occur // @@ -2197,7 +2232,7 @@ AFSSetRenameInfo( IN PIRP Irp) bReleaseTargetDirLock = TRUE; - if( pTargetParentObject != pSrcFcb->ObjectInformation->ParentObjectInformation) + if( pTargetParentObject != pSrcParentObject) { AFSAcquireExcl( pSrcFcb->ObjectInformation->ParentObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock, TRUE); @@ -2285,40 +2320,6 @@ AFSSetRenameInfo( IN PIRP Irp) "AFSSetRenameInfo Target does NOT exist, normal rename\n"); } - // - // Extract off the final component name from the Fcb - // - - uniSourceName.Length = (USHORT)pSrcCcb->DirectoryCB->NameInformation.FileName.Length; - uniSourceName.MaximumLength = uniSourceName.Length; - - uniSourceName.Buffer = pSrcCcb->DirectoryCB->NameInformation.FileName.Buffer; - - // - // The quick check to see if they are not really performing a rename - // Do the names match? Only do this where the parent directories are - // the same - // - - if( pTargetParentObject == pSrcFcb->ObjectInformation->ParentObjectInformation) - { - - bCommonParent = TRUE; - - if( FsRtlAreNamesEqual( &uniTargetName, - &uniSourceName, - FALSE, - NULL)) - { - try_return( ntStatus = STATUS_SUCCESS); - } - } - else - { - - bCommonParent = FALSE; - } - // // We need to remove the DirEntry from the parent node, update the index // and reinsert it into the parent tree. Note that for entries with the