}
//
- // We have our root node shared
+ // We have a reference on the root volume
//
bReleaseVolume = TRUE;
// fail with collision
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSCommonCreate Object name collision on create of %wZ Status %08lX\n",
- &pDirectoryCB->NameInformation.FileName,
- ntStatus);
-
if( pDirectoryCB != NULL)
{
+ AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate Object name collision on create of %wZ Status %08lX\n",
+ &pDirectoryCB->NameInformation.FileName,
+ ntStatus);
+
InterlockedDecrement( &pDirectoryCB->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
else
{
+ AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate Object name collision on create Status %08lX\n",
+ ntStatus);
+
InterlockedDecrement( &pParentDirectoryCB->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSCommonCreate Failed to open root (2) Status %08lX\n",
+ "AFSCommonCreate Failed to open volume root %08lX-%08lX Status %08lX\n",
+ pVolumeCB->ObjectInformation.FileId.Cell,
+ pVolumeCB->ObjectInformation.FileId.Volume,
ntStatus);
InterlockedDecrement( &pDirectoryCB->OpenReferenceCount);
if( pCcb != NULL)
{
+ RtlCopyMemory( &pCcb->AuthGroup,
+ &stAuthGroup,
+ sizeof( GUID));
+
//
// If we have a substitute name, then use it
//
ClearFlag( pFcb->Flags, AFS_FCB_FILE_CLOSED);
- RtlCopyMemory( &pFcb->AuthGroup,
- &stAuthGroup,
- sizeof( GUID));
-
//
// For files perform additional processing
//
//
KeQuerySystemTime( &pFcb->ObjectInformation->LastAccessTime);
+
+ if( pCcb != NULL)
+ {
+ AFSInsertCcb( pFcb,
+ pCcb);
+ }
}
else
{
"AFSCommonCreate Decrement count on Volume %08lX Cnt %d\n",
pVolumeCB,
pVolumeCB->VolumeReferenceCount);
-
- AFSReleaseResource( pVolumeCB->VolumeLock);
}
//
if( !NT_SUCCESS( ntStatus))
{
+ UNICODE_STRING uniGUID;
+
+ uniGUID.Length = 0;
+ uniGUID.MaximumLength = 0;
+ uniGUID.Buffer = NULL;
+
+ if( AuthGroup != NULL)
+ {
+ RtlStringFromGUID( *AuthGroup,
+ &uniGUID);
+ }
+
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSOpenRoot (%08lX) Failed open in service AFSRoot Status %08lX\n",
+ "AFSOpenRoot (%08lX) Failed open in service volume %08lX-%08lX AuthGroup %wZ Status %08lX\n",
Irp,
+ VolumeCB->ObjectInformation.FileId.Cell,
+ VolumeCB->ObjectInformation.FileId.Volume,
+ &uniGUID,
ntStatus);
+ if( AuthGroup != NULL)
+ {
+ RtlFreeUnicodeString( &uniGUID);
+ }
+
try_return( ntStatus);
}
(*Ccb)->DirectoryCB = VolumeCB->DirectoryCB;
+ (*Ccb)->GrantedAccess = *pDesiredAccess;
+
//
// OK, update the share access on the fileobject
//
if( bAllocatedCcb)
{
- AFSRemoveCcb( *Ccb);
+ AFSRemoveCcb( NULL,
+ *Ccb);
*Ccb = NULL;
}
"AFSProcessCreate Request failed due to read only volume %wZ\n",
FullFileName);
- try_return( ntStatus = STATUS_ACCESS_DENIED);
+ try_return( ntStatus = STATUS_MEDIA_WRITE_PROTECTED);
}
pParentObjectInfo = ParentDirCB->ObjectInformation;
(*Ccb)->DirectoryCB = pDirEntry;
+ (*Ccb)->GrantedAccess = *pDesiredAccess;
+
//
// If this is a file, update the headers filesizes.
//
AFSFsRtlNotifyFullReportChange( pParentObjectInfo,
*Ccb,
- (ULONG)FILE_NOTIFY_CHANGE_FILE_NAME,
- (ULONG)FILE_ACTION_ADDED);
+ (ULONG)FILE_NOTIFY_CHANGE_FILE_NAME,
+ (ULONG)FILE_ACTION_ADDED);
(*Fcb)->NPFcb->Specific.File.ExtentsRequestStatus = STATUS_SUCCESS;
}
AFSFsRtlNotifyFullReportChange( pParentObjectInfo,
*Ccb,
- (ULONG)FILE_NOTIFY_CHANGE_DIR_NAME,
- (ULONG)FILE_ACTION_ADDED);
+ (ULONG)FILE_NOTIFY_CHANGE_DIR_NAME,
+ (ULONG)FILE_ACTION_ADDED);
}
else if( (*Fcb)->Header.NodeTypeCode == AFS_MOUNT_POINT_FCB ||
(*Fcb)->Header.NodeTypeCode == AFS_SYMBOLIC_LINK_FCB ||
- (*Fcb)->Header.NodeTypeCode == AFS_DFS_LINK_FCB)
+ (*Fcb)->Header.NodeTypeCode == AFS_DFS_LINK_FCB ||
+ (*Fcb)->Header.NodeTypeCode == AFS_INVALID_FCB)
{
//
AFSFsRtlNotifyFullReportChange( pParentObjectInfo,
*Ccb,
- (ULONG)FILE_NOTIFY_CHANGE_DIR_NAME,
- (ULONG)FILE_ACTION_ADDED);
+ (ULONG)FILE_NOTIFY_CHANGE_DIR_NAME,
+ (ULONG)FILE_ACTION_ADDED);
}
//
FALSE); // Leave it in the enum list so the worker cleans it up
AFSNotifyDelete( pDirEntry,
+ AuthGroup,
FALSE);
//
if( bAllocatedCcb)
{
- AFSRemoveCcb( *Ccb);
+ AFSRemoveCcb( NULL,
+ *Ccb);
}
if( bAllocatedFcb)
(*Ccb)->DirectoryCB = ParentDirectoryCB;
+ (*Ccb)->GrantedAccess = *pDesiredAccess;
+
if( TargetDirectoryCB != NULL &&
FsRtlAreNamesEqual( &TargetDirectoryCB->NameInformation.FileName,
TargetName,
if( bAllocatedCcb)
{
- AFSRemoveCcb( *Ccb);
+ AFSRemoveCcb( NULL,
+ *Ccb);
}
*Ccb = NULL;
{
ntStatus = AFSNotifyDelete( DirectoryCB,
+ AuthGroup,
TRUE);
if( !NT_SUCCESS( ntStatus))
}
else if( pObjectInfo->Fcb->Header.NodeTypeCode == AFS_MOUNT_POINT_FCB ||
pObjectInfo->Fcb->Header.NodeTypeCode == AFS_SYMBOLIC_LINK_FCB ||
- pObjectInfo->Fcb->Header.NodeTypeCode == AFS_DFS_LINK_FCB)
+ pObjectInfo->Fcb->Header.NodeTypeCode == AFS_DFS_LINK_FCB ||
+ pObjectInfo->Fcb->Header.NodeTypeCode == AFS_INVALID_FCB)
{
}
(*Ccb)->FileAccess = ulFileAccess;
+ (*Ccb)->GrantedAccess = *pDesiredAccess;
+
//
// Perform the access check on the target if this is a mount point or symlink
//
if( bAllocatedCcb)
{
- AFSRemoveCcb( *Ccb);
+ AFSRemoveCcb( NULL,
+ *Ccb);
}
*Ccb = NULL;
Irp,
&DirectoryCB->NameInformation.FileName);
- try_return( ntStatus = STATUS_ACCESS_DENIED);
+ try_return( ntStatus = STATUS_MEDIA_WRITE_PROTECTED);
}
pParentObjectInfo = ParentDirCB->ObjectInformation;
(*Ccb)->DirectoryCB = DirectoryCB;
+ (*Ccb)->GrantedAccess = *pDesiredAccess;
+
//
// Need to purge any data currently in the cache
//
if( bAllocatedCcb)
{
- AFSRemoveCcb( *Ccb);
+ AFSRemoveCcb( NULL,
+ *Ccb);
}
*Ccb = NULL;
if( bAllocatedCcb)
{
- AFSRemoveCcb( *Ccb);
+ AFSRemoveCcb( NULL,
+ *Ccb);
*Ccb = NULL;
}
if( bAllocatedCcb)
{
- AFSRemoveCcb( *Ccb);
+ AFSRemoveCcb( NULL,
+ *Ccb);
*Ccb = NULL;
}