PFILE_OBJECT pFileObject = NULL;
BOOLEAN bReleaseMain = FALSE;
BOOLEAN bUpdateFileInfo = FALSE;
+ BOOLEAN bReleaseVolumeLock = FALSE;
AFSFileID stParentFileId;
__try
bCanQueueRequest = !(IoIsOperationSynchronous( Irp) | (KeGetCurrentIrql() != PASSIVE_LEVEL));
FileInformationClass = pIrpSp->Parameters.SetFile.FileInformationClass;
+ if( FileInformationClass == FileRenameInformation)
+ {
+
+ AFSAcquireExcl( pFcb->ObjectInformation->VolumeCB->VolumeLock,
+ TRUE);
+
+ bReleaseVolumeLock = TRUE;
+ }
+
//
// Grab the Fcb EXCL
//
AFSReleaseResource( &pFcb->NPFcb->Resource);
}
+ if( bReleaseVolumeLock)
+ {
+ AFSReleaseResource( pFcb->ObjectInformation->VolumeCB->VolumeLock);
+ }
+
if( NT_SUCCESS( ntStatus) &&
bUpdateFileInfo)
{
ULONG ulNotificationAction = 0, ulNotifyFilter = 0;
UNICODE_STRING uniFullTargetPath;
BOOLEAN bCommonParent = FALSE;
- BOOLEAN bReleaseVolumeLock = FALSE;
BOOLEAN bReleaseTargetDirLock = FALSE;
BOOLEAN bReleaseSourceDirLock = FALSE;
PERESOURCE pSourceDirLock = NULL;
try_return( ntStatus = STATUS_NOT_SAME_DEVICE);
}
- AFSAcquireExcl( pTargetParentObject->VolumeCB->VolumeLock,
- TRUE);
-
- bReleaseVolumeLock = TRUE;
-
ulTargetCRC = AFSGenerateCRC( &uniTargetName,
FALSE);
InterlockedDecrement( &pTargetDirEntry->OpenReferenceCount);
}
- if( bReleaseVolumeLock)
- {
- AFSReleaseResource( pTargetParentObject->VolumeCB->VolumeLock);
- }
-
if( bReleaseTargetDirLock)
{
AFSReleaseResource( pTargetParentObject->Specific.Directory.DirectoryNodeHdr.TreeLock);