pFileObject->FileName.Buffer == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCreate (%p) Processing control device open request\n",
- Irp);
+ Irp));
ntStatus = AFSControlDeviceCreate( Irp);
if( AFSRDRDeviceObject == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCreate (%p) Invalid request to open before library is initialized\n",
- Irp);
+ Irp));
try_return( ntStatus = STATUS_DEVICE_NOT_READY);
}
__except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()) )
{
- AFSDbgLogMsg( 0,
+ AFSDbgTrace(( 0,
0,
- "EXCEPTION - AFSCreate\n");
+ "EXCEPTION - AFSCreate\n"));
ntStatus = STATUS_ACCESS_DENIED;
UNICODE_STRING uniRelativeName;
AFSNameArrayHdr *pNameArray = NULL;
AFSVolumeCB *pVolumeCB = NULL;
+ LONG VolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
+ AFSVolumeCB *pNewVolumeCB = NULL;
+ LONG NewVolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
AFSDirectoryCB *pParentDirectoryCB = NULL, *pDirectoryCB = NULL;
+ AFSDirectoryCB *pNewParentDirectoryCB = NULL;
BOOLEAN bReleaseParentDir = FALSE, bReleaseDir = FALSE;
ULONG ulParseFlags = 0;
GUID stAuthGroup = {0};
if( BooleanFlagOn( pDeviceExt->DeviceFlags, AFS_DEVICE_FLAG_REDIRECTOR_SHUTDOWN))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSCommonCreate (%p) Open request after shutdown\n",
- Irp);
+ Irp));
try_return( ntStatus = STATUS_TOO_LATE);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate Failed to enumerate global root Status %08lX\n",
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
uniFileName.Length > 0 ? AFS_TRACE_LEVEL_ERROR : AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate (%p) Failed to parse name \"%wZ\" Status %08lX\n",
Irp,
&uniFileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate Failed to open root IOCtl Fcb Status %08lX\n",
- ntStatus);
+ ntStatus));
}
}
else if( pParentDirectoryCB != NULL)
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate Failed to open special share Fcb Status %08lX\n",
- ntStatus);
+ ntStatus));
}
}
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate Failed to open root Status %08lX\n",
- ntStatus);
+ ntStatus));
}
try_return( ntStatus);
// We have a reference on the root volume
//
+ VolumeReferenceReason = AFS_VOLUME_REFERENCE_PARSE_NAME;
+
bReleaseVolume = TRUE;
//
ntStatus = STATUS_OBJECT_NAME_NOT_FOUND;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate (%p) Invalid name %wZ Status %08lX\n",
Irp,
&uniFileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
- //
- // Opening a reparse point directly?
- //
- ulNameProcessingFlags = AFS_LOCATE_FLAGS_SUBSTITUTE_NAME;
-
- if( BooleanFlagOn( ulOptions, FILE_OPEN_REPARSE_POINT))
+ if ( !AFSIgnoreReparsePointToFile() ||
+ !BooleanFlagOn( ulOptions, FILE_OPEN_REPARSE_POINT))
{
- ulNameProcessingFlags |= (AFS_LOCATE_FLAGS_NO_MP_TARGET_EVAL |
- AFS_LOCATE_FLAGS_NO_SL_TARGET_EVAL |
- AFS_LOCATE_FLAGS_NO_DFS_LINK_EVAL);
- }
+ //
+ // If there is no ReparsePointPolicy then the FILE_OPEN_REPARSE_POINT
+ // flag is applied if it is set.
+ //
+ // If the FILE_OPEN_REPARSE_POINT flag is not set, then there is
+ // no extra work to be done in any case. Use a single pass evaluation.
+ //
+
+ ulNameProcessingFlags = AFS_LOCATE_FLAGS_SUBSTITUTE_NAME;
+
+ //
+ // Opening a reparse point directly?
+ //
+
+ if( BooleanFlagOn( ulOptions, FILE_OPEN_REPARSE_POINT))
+ {
+ ulNameProcessingFlags |= (AFS_LOCATE_FLAGS_NO_MP_TARGET_EVAL |
+ AFS_LOCATE_FLAGS_NO_SL_TARGET_EVAL |
+ AFS_LOCATE_FLAGS_NO_DFS_LINK_EVAL);
+ }
+
+ uniSubstitutedPathName = uniRootFileName;
+
+ ntStatus = AFSLocateNameEntry( &stAuthGroup,
+ pFileObject,
+ &uniRootFileName,
+ &uniParsedFileName,
+ pNameArray,
+ ulNameProcessingFlags,
+ pVolumeCB,
+ pParentDirectoryCB,
+ &pNewVolumeCB,
+ &NewVolumeReferenceReason,
+ &pNewParentDirectoryCB,
+ &pDirectoryCB,
+ &uniComponentName);
+
+ if ( pNewVolumeCB != NULL)
+ {
+
+ //
+ // AFSLocateNameEntry returns pNewVolumeCB with a reference held
+ // even if pVolumeCB == pNewVolumeCB. It is always safe to release
+ // the reference on pVolumeCB that was held prior to the call.
+ // If pVolumeCB == pNewVolumeCB, the reference from AFSLocateNameEntry
+ // will be released second.
+ //
+
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ VolumeReferenceReason);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate Decrement count on volume %p Reason %u Cnt %d\n",
+ pVolumeCB,
+ VolumeReferenceReason,
+ lCount));
+
+ pVolumeCB = pNewVolumeCB;
+
+ pNewVolumeCB = NULL;
+
+ VolumeReferenceReason = NewVolumeReferenceReason;
+
+ NewVolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
+
+ bReleaseVolume = (pVolumeCB != NULL);
+ }
+
+ //
+ // AFSLocateNameEntry does not alter the reference count of
+ // pParentDirectoryCB and it returns pNewParentDirectoryCB with
+ // a reference held.
+ //
+
+ if ( bReleaseParentDir)
+ {
+
+ lCount = InterlockedDecrement( &pParentDirectoryCB->DirOpenReferenceCount);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate DecrementX count on %wZ DE %p Ccb %p Cnt %d\n",
+ &pParentDirectoryCB->NameInformation.FileName,
+ pParentDirectoryCB,
+ pCcb,
+ lCount));
+ }
+
+ pParentDirectoryCB = pNewParentDirectoryCB;
+
+ pNewParentDirectoryCB = NULL;
+
+ bReleaseParentDir = (pParentDirectoryCB != NULL);
+
+ if ( pDirectoryCB)
+ {
+
+ bReleaseDir = TRUE;
+ }
+
+ if( !NT_SUCCESS( ntStatus) &&
+ ntStatus != STATUS_OBJECT_NAME_NOT_FOUND)
+ {
- uniSubstitutedPathName = uniRootFileName;
+ if ( uniSubstitutedPathName.Buffer == uniRootFileName.Buffer)
+ {
+ uniSubstitutedPathName.Buffer = NULL;
+ }
- ntStatus = AFSLocateNameEntry( &stAuthGroup,
- pFileObject,
- &uniRootFileName,
- &uniParsedFileName,
- pNameArray,
- ulNameProcessingFlags,
- &pVolumeCB,
- &pParentDirectoryCB,
- &pDirectoryCB,
- &uniComponentName);
+ //
+ // AFSLocateNameEntry released the Parent while walking the
+ // branch
+ //
- if( !NT_SUCCESS( ntStatus) &&
- ntStatus != STATUS_OBJECT_NAME_NOT_FOUND)
- {
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate (%p) Failed to locate name entry for %wZ Status %08lX\n",
+ Irp,
+ &uniFileName,
+ ntStatus));
+
+ try_return( ntStatus);
+ }
+
+ //
+ // Check for STATUS_REPARSE
+ //
+
+ if( ntStatus == STATUS_REPARSE)
+ {
+
+ uniSubstitutedPathName.Buffer = NULL;
- if ( uniSubstitutedPathName.Buffer == uniRootFileName.Buffer)
+ //
+ // Update the information and return
+ //
+
+ Irp->IoStatus.Information = IO_REPARSE;
+
+ try_return( ntStatus);
+ }
+
+ //
+ // If we re-allocated the name, then update our substitute name
+ //
+
+ if( uniSubstitutedPathName.Buffer != uniRootFileName.Buffer)
{
+
+ uniSubstitutedPathName = uniRootFileName;
+ }
+ else
+ {
+
uniSubstitutedPathName.Buffer = NULL;
}
//
- // AFSLocateNameEntry released the Parent while walking the
- // branch
+ // Check for a symlink access
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSCommonCreate (%p) Failed to locate name entry for %wZ Status %08lX\n",
- Irp,
- &uniFileName,
- ntStatus);
+ if( ntStatus == STATUS_OBJECT_NAME_NOT_FOUND &&
+ pParentDirectoryCB != NULL)
+ {
- //
- // We released any root volume locks in the above on failure
- //
+ //
+ // pParentDirectoryCB DirOpenReferenceCount is still held
+ //
- bReleaseVolume = FALSE;
+ UNICODE_STRING uniFinalComponent;
- bReleaseParentDir = FALSE;
+ uniFinalComponent.Length = 0;
+ uniFinalComponent.MaximumLength = 0;
+ uniFinalComponent.Buffer = NULL;
- try_return( ntStatus);
- }
+ AFSRetrieveFinalComponent( &uniFileName,
+ &uniFinalComponent);
- //
- // Check for STATUS_REPARSE
- //
+ ntStatus = AFSCheckSymlinkAccess( pParentDirectoryCB,
+ &uniFinalComponent);
- if( ntStatus == STATUS_REPARSE)
+ if( !NT_SUCCESS( ntStatus) &&
+ ntStatus != STATUS_OBJECT_NAME_NOT_FOUND)
+ {
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate (%p) Failing access to symlink %wZ Status %08lX\n",
+ Irp,
+ &uniFileName,
+ ntStatus));
+
+ try_return( ntStatus);
+ }
+ }
+ }
+ else
{
+ AFSNameArrayHdr *pNameArrayClone = NULL;
+
+ //
+ // The FILE_OPEN_REPARSE_POINT flag has been specified and a ReparsePointPolicy
+ // is in effect which conditionally applies depending on the type of the target
+ // object. Therefore, two lookup passes must be performed.
+ // 1. Evaluate the path as if the FILE_OPEN_REPARSE_POINT flag had
+ // not been specified.
+ // 2. If the target object type matches the policy, use it and ignore
+ // the FILE_OPEN_REPARSE_POINT flag.
+ // 3. If the target object type does not match the policy, perform
+ // a second pass that opens the reparse point.
+ // 4. If the target object cannot be evaluated, perform the second pass
+ // that opens the reparse point.
- uniSubstitutedPathName.Buffer = NULL;
+
+ ulNameProcessingFlags = AFS_LOCATE_FLAGS_SUBSTITUTE_NAME;
+
+ uniSubstitutedPathName = uniRootFileName;
//
- // Update the information and return
+ // Since we may need to replay the call with different options
+ // the values that might be altered need to be cloned:
+ // 1. uniRootFileName
+ // 2. pNameArray
//
- Irp->IoStatus.Information = IO_REPARSE;
+ pNameArrayClone = AFSInitNameArray( NULL, 0);
+
+ if ( pNameArrayClone == NULL)
+ {
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate (%p) Failed to initialize name array clone\n",
+ Irp));
+
+ try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
+ }
+
+ ntStatus = AFSPopulateNameArrayFromRelatedArray( pNameArrayClone,
+ pNameArray,
+ NULL);
+
+ if ( !NT_SUCCESS(ntStatus))
+ {
+
+ AFSFreeNameArray( pNameArrayClone);
+
+ try_return( ntStatus);
+ }
//
- // We released the volume lock above
+ // Now that the data is saved perform the lookup to determine
+ // what the target resolves to.
//
- bReleaseVolume = FALSE;
+ ntStatus = AFSLocateNameEntry( &stAuthGroup,
+ pFileObject,
+ &uniRootFileName,
+ &uniParsedFileName,
+ pNameArray,
+ ulNameProcessingFlags,
+ pVolumeCB,
+ pParentDirectoryCB,
+ &pNewVolumeCB,
+ &NewVolumeReferenceReason,
+ &pNewParentDirectoryCB,
+ &pDirectoryCB,
+ &uniComponentName);
+
+ if ( ntStatus == STATUS_SUCCESS ||
+ ntStatus == STATUS_REPARSE ||
+ ntStatus == STATUS_OBJECT_NAME_NOT_FOUND ||
+ ntStatus == STATUS_ACCESS_DENIED)
+ {
+ //
+ // Decide what to do based upon the ReparsePointPolicy
+ // and the type of the target object.
+ //
+
+ if ( ntStatus == STATUS_SUCCESS &&
+ AFSIgnoreReparsePointToFile() &&
+ pDirectoryCB->ObjectInformation->FileType == AFS_FILE_TYPE_FILE)
+ {
+
+ //
+ // We found an entity that matches the policy.
+ // Therefore, we are done. Cleanup the cloned data
+ // and clear the FILE_OPEN_REPARSE_FLAG so we do not
+ // later mark the CCB with CCB_FLAG_MASK_OPENED_REPARSE_POINT.
+ //
+
+ AFSFreeNameArray( pNameArrayClone);
+
+ pNameArrayClone = NULL;
+
+ ClearFlag( ulOptions, FILE_OPEN_REPARSE_POINT);
+ }
+ else
+ {
+ //
+ // There is no matching policy, so we need to cleanup the
+ // output values from AFSLocateNameEntry(), restore the
+ // cloned information, and re-issue the request attempting
+ // to open the reparse point (if any).
+ //
+
+ if ( pNewVolumeCB != NULL)
+ {
+
+ lCount = AFSVolumeDecrement( pNewVolumeCB,
+ NewVolumeReferenceReason);
+
+ pNewVolumeCB = NULL;
+
+ NewVolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
+ }
+
+ if ( pNewParentDirectoryCB)
+ {
+
+ lCount = InterlockedDecrement( &pNewParentDirectoryCB->DirOpenReferenceCount);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate DecrementY count on %wZ DE %p Ccb %p Cnt %d\n",
+ &pNewParentDirectoryCB->NameInformation.FileName,
+ pNewParentDirectoryCB,
+ pCcb,
+ lCount));
+
+ pNewParentDirectoryCB = NULL;
+ }
+
+ if ( pDirectoryCB)
+ {
+
+ lCount = InterlockedDecrement( &pDirectoryCB->DirOpenReferenceCount);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate DecrementZ count on %wZ DE %p Ccb %p Cnt %d\n",
+ &pDirectoryCB->NameInformation.FileName,
+ pDirectoryCB,
+ pCcb,
+ lCount));
+
+ pDirectoryCB = NULL;
+ }
+
+ RtlZeroMemory( &uniComponentName,
+ sizeof( UNICODE_STRING));
+
+ if ( uniSubstitutedPathName.Buffer != uniRootFileName.Buffer)
+ {
+
+ AFSExFreePoolWithTag( uniRootFileName.Buffer, 0);
+
+ uniRootFileName = uniSubstitutedPathName;
+ }
+
+ AFSFreeNameArray( pNameArray);
+
+ pNameArray = pNameArrayClone;
- bReleaseParentDir = FALSE;
+ pNameArrayClone = NULL;
- try_return( ntStatus);
- }
+ //
+ // Retry the lookup
+ //
- //
- // If we re-allocated the name, then update our substitute name
- //
+ ulNameProcessingFlags |= (AFS_LOCATE_FLAGS_NO_MP_TARGET_EVAL |
+ AFS_LOCATE_FLAGS_NO_SL_TARGET_EVAL |
+ AFS_LOCATE_FLAGS_NO_DFS_LINK_EVAL);
- if( uniSubstitutedPathName.Buffer != uniRootFileName.Buffer)
- {
+ ntStatus = AFSLocateNameEntry( &stAuthGroup,
+ pFileObject,
+ &uniRootFileName,
+ &uniParsedFileName,
+ pNameArray,
+ ulNameProcessingFlags,
+ pVolumeCB,
+ pParentDirectoryCB,
+ &pNewVolumeCB,
+ &NewVolumeReferenceReason,
+ &pNewParentDirectoryCB,
+ &pDirectoryCB,
+ &uniComponentName);
+ }
+ }
+ else
+ {
- uniSubstitutedPathName = uniRootFileName;
- }
- else
- {
+ AFSFreeNameArray( pNameArrayClone);
- uniSubstitutedPathName.Buffer = NULL;
- }
+ pNameArrayClone = NULL;
+ }
- //
- // Check for a symlink access
- //
+ if ( pNewVolumeCB != NULL)
+ {
- if( ntStatus == STATUS_OBJECT_NAME_NOT_FOUND &&
- pParentDirectoryCB != NULL)
- {
+ //
+ // AFSLocateNameEntry returns pNewVolumeCB with a reference held
+ // even if pVolumeCB == pNewVolumeCB. It is always safe to release
+ // the reference on pVolumeCB that was held prior to the call.
+ // If pVolumeCB == pNewVolumeCB, the reference from AFSLocateNameEntry
+ // will be released second.
+ //
- //
- // pParentDirectoryCB DirOpenReferenceCount is still held
- //
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ VolumeReferenceReason);
- UNICODE_STRING uniFinalComponent;
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate Decrement count on volume %p Reason %u Cnt %d\n",
+ pVolumeCB,
+ VolumeReferenceReason,
+ lCount));
- uniFinalComponent.Length = 0;
- uniFinalComponent.MaximumLength = 0;
- uniFinalComponent.Buffer = NULL;
+ pVolumeCB = pNewVolumeCB;
- AFSRetrieveFinalComponent( &uniFileName,
- &uniFinalComponent);
+ pNewVolumeCB = NULL;
+
+ VolumeReferenceReason = NewVolumeReferenceReason;
+
+ NewVolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
+
+ bReleaseVolume = (pVolumeCB != NULL);
+ }
+
+ //
+ // AFSLocateNameEntry does not alter the reference count of
+ // pParentDirectoryCB and it returns pNewParentDirectoryCB with
+ // a reference held.
+ //
+
+ if ( bReleaseParentDir)
+ {
+
+ lCount = InterlockedDecrement( &pParentDirectoryCB->DirOpenReferenceCount);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate DecrementX count on %wZ DE %p Ccb %p Cnt %d\n",
+ &pParentDirectoryCB->NameInformation.FileName,
+ pParentDirectoryCB,
+ pCcb,
+ lCount));
+ }
- ntStatus = AFSCheckSymlinkAccess( pParentDirectoryCB,
- &uniFinalComponent);
+ pParentDirectoryCB = pNewParentDirectoryCB;
+
+ pNewParentDirectoryCB = NULL;
+
+ bReleaseParentDir = (pParentDirectoryCB != NULL);
+
+ if ( pDirectoryCB)
+ {
+
+ bReleaseDir = TRUE;
+ }
if( !NT_SUCCESS( ntStatus) &&
ntStatus != STATUS_OBJECT_NAME_NOT_FOUND)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ if ( uniSubstitutedPathName.Buffer == uniRootFileName.Buffer)
+ {
+ uniSubstitutedPathName.Buffer = NULL;
+ }
+
+ //
+ // AFSLocateNameEntry released the Parent while walking the
+ // branch
+ //
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSCommonCreate (%p) Failing access to symlink %wZ Status %08lX\n",
+ "AFSCommonCreate (%p) Failed to locate name entry for %wZ Status %08lX\n",
Irp,
&uniFileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
- }
- else
- {
- //
- // AFSLocateNameEntry succeeded. The parent directory reference
- // has been released and if there is a directory returned, it is
- // referenced.
- //
+ //
+ // Check for STATUS_REPARSE
+ //
- bReleaseParentDir = FALSE;
+ if( ntStatus == STATUS_REPARSE)
+ {
- if ( pDirectoryCB)
- {
+ uniSubstitutedPathName.Buffer = NULL;
- bReleaseDir = TRUE;
- }
+ //
+ // Update the information and return
+ //
+
+ Irp->IoStatus.Information = IO_REPARSE;
+
+ try_return( ntStatus);
+ }
+
+ //
+ // If we re-allocated the name, then update our substitute name
+ //
+
+ if( uniSubstitutedPathName.Buffer != uniRootFileName.Buffer)
+ {
+
+ uniSubstitutedPathName = uniRootFileName;
+ }
+ else
+ {
+
+ uniSubstitutedPathName.Buffer = NULL;
+ }
+
+ //
+ // Check for a symlink access
+ //
+
+ if( ntStatus == STATUS_OBJECT_NAME_NOT_FOUND &&
+ pParentDirectoryCB != NULL)
+ {
+
+ //
+ // pParentDirectoryCB DirOpenReferenceCount is still held
+ //
+
+ UNICODE_STRING uniFinalComponent;
+
+ uniFinalComponent.Length = 0;
+ uniFinalComponent.MaximumLength = 0;
+ uniFinalComponent.Buffer = NULL;
+
+ AFSRetrieveFinalComponent( &uniFileName,
+ &uniFinalComponent);
+
+ ntStatus = AFSCheckSymlinkAccess( pParentDirectoryCB,
+ &uniFinalComponent);
+
+ if( !NT_SUCCESS( ntStatus) &&
+ ntStatus != STATUS_OBJECT_NAME_NOT_FOUND)
+ {
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCommonCreate (%p) Failing access to symlink %wZ Status %08lX\n",
+ Irp,
+ &uniFileName,
+ ntStatus));
+
+ try_return( ntStatus);
+ }
+ }
}
}
lCount = InterlockedIncrement( &pDirectoryCB->DirOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate Increment0 count on %wZ DE %p Ccb %p Cnt %d\n",
&pDirectoryCB->NameInformation.FileName,
pDirectoryCB,
pCcb,
- lCount);
+ lCount));
bReleaseDir = TRUE;
}
lCount = InterlockedIncrement( &pParentDirectoryCB->DirOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate Increment1 count on %wZ DE %p Ccb %p Cnt %d\n",
&pParentDirectoryCB->NameInformation.FileName,
pParentDirectoryCB,
pCcb,
- lCount);
+ lCount));
bReleaseParentDir = TRUE;
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate Failed to open target directory %wZ Status %08lX\n",
&pParentDirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
}
try_return( ntStatus);
if( pDirectoryCB == NULL ||
!BooleanFlagOn( pDirectoryCB->ObjectInformation->FileAttributes, FILE_ATTRIBUTE_REPARSE_POINT))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate (%p) Reparse open request but attribute not set for %wZ DirCB %p Type %08lX\n",
Irp,
&uniFileName,
pDirectoryCB,
- pDirectoryCB ? pDirectoryCB->ObjectInformation->FileType : 0);
+ pDirectoryCB ? pDirectoryCB->ObjectInformation->FileType : 0));
}
else
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate (%p) Opening as reparse point %wZ Type %08lX\n",
Irp,
&uniFileName,
- pDirectoryCB->ObjectInformation->FileType);
+ pDirectoryCB->ObjectInformation->FileType));
bOpenedReparsePoint = TRUE;
}
if( pDirectoryCB != NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate Object name collision on create of %wZ Status %08lX\n",
&pDirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
}
else
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate Object name collision on create Status %08lX\n",
- ntStatus);
+ ntStatus));
}
try_return( ntStatus = STATUS_OBJECT_NAME_COLLISION);
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate Failed to create of %wZ in directory %wZ Status %08lX\n",
&uniComponentName,
&pParentDirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
}
try_return( ntStatus);
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate Failed to IOCtl open on %wZ Status %08lX\n",
&uniComponentName,
- ntStatus);
+ ntStatus));
}
}
else
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate (%p) File %wZ name not found\n",
Irp,
- &uniFileName);
+ &uniFileName));
ntStatus = STATUS_OBJECT_NAME_NOT_FOUND;
}
if( BooleanFlagOn( ulOptions, FILE_DELETE_ON_CLOSE ))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate (%p) Attempt to open root as delete on close\n",
- Irp);
+ Irp));
try_return( ntStatus = STATUS_CANNOT_DELETE);
}
if( bOpenTargetDirectory)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate (%p) Attempt to open root as target directory\n",
- Irp);
+ Irp));
try_return( ntStatus = STATUS_INVALID_PARAMETER);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate Failed to open volume root %08lX-%08lX Status %08lX\n",
pVolumeCB->ObjectInformation.FileId.Cell,
pVolumeCB->ObjectInformation.FileId.Volume,
- ntStatus);
+ ntStatus));
}
try_return( ntStatus);
if( pDirectoryCB == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate Failing access to %wZ Name not found\n",
- &uniFileName);
+ &uniFileName));
try_return( ntStatus = STATUS_OBJECT_NAME_NOT_FOUND);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate Failed overwrite/supersede on %wZ Status %08lX\n",
&pDirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
}
try_return( ntStatus);
pVolumeCB,
pParentDirectoryCB,
pDirectoryCB,
+ bOpenedReparsePoint,
&pFcb,
&pCcb);
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate Failed open on %wZ Status %08lX\n",
&pDirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
}
try_exit:
SetFlag( pCcb->Flags, CCB_FLAG_MASK_OPENED_REPARSE_POINT);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ lCount = pCcb->DirectoryCB->DirOpenReferenceCount;
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate Count on %wZ DE %p Ccb %p Cnt %d\n",
&pCcb->DirectoryCB->NameInformation.FileName,
pCcb->DirectoryCB,
pCcb,
- lCount = pCcb->DirectoryCB->DirOpenReferenceCount);
+ lCount));
ASSERT( lCount >= 0);
// If we make it here then init the FO for the request.
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSCommonCreate (%p) FileObject %p FsContext %p FsContext2 %p\n",
Irp,
pFileObject,
pFcb,
- pCcb);
+ pCcb));
pFileObject->FsContext = (void *)pFcb;
else
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate (%p) Returning with NULL Fcb FileObject %p FsContext %p FsContext2 %p\n",
Irp,
pFileObject,
pFcb,
- pCcb);
+ pCcb));
}
}
else
ntStatus == STATUS_REPARSE)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCommonCreate (%p) STATUS_REPARSE FileObject %p FsContext %p FsContext2 %p\n",
Irp,
pFileObject,
pFcb,
- pCcb);
+ pCcb));
}
//
if( bReleaseVolume)
{
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ VolumeReferenceReason);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSCommonCreate Decrement count on Volume %08lX Cnt %d\n",
+ "AFSCommonCreate Decrement count on Volume %08lX Reason %u Cnt %d\n",
pVolumeCB,
- lCount);
+ VolumeReferenceReason,
+ lCount));
}
if ( bReleaseDir)
lCount = InterlockedDecrement( &pDirectoryCB->DirOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate Decrement count on %wZ DE %p Ccb %p Cnt %d\n",
&pDirectoryCB->NameInformation.FileName,
pDirectoryCB,
pCcb,
- lCount);
+ lCount));
ASSERT( lCount >= 0);
}
lCount = InterlockedDecrement( &pParentDirectoryCB->DirOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCommonCreate Decrement count on %wZ DE %p Ccb %p Cnt %d\n",
&pParentDirectoryCB->NameInformation.FileName,
pParentDirectoryCB,
pCcb,
- lCount);
+ lCount));
ASSERT( lCount >= 0);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenAFSRoot (%p) Failed to allocate Ccb\n",
- Irp);
+ Irp));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &AFSGlobalRoot->RootFcb->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenAFSRoot Increment count on Fcb %p Cnt %d\n",
AFSGlobalRoot->RootFcb,
- lCount);
+ lCount));
lCount = InterlockedIncrement( &AFSGlobalRoot->RootFcb->OpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenAFSRoot Increment handle count on Fcb %p Cnt %d\n",
AFSGlobalRoot->RootFcb,
- lCount);
+ lCount));
*Fcb = AFSGlobalRoot->RootFcb;
ntStatus = STATUS_FILE_IS_A_DIRECTORY;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenRoot (%p) Attempt to open root as file Status %08lX\n",
Irp,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenRoot (%p) Failed to validate root entry Status %08lX\n",
Irp,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
AuthGroup,
NULL,
&VolumeCB->ObjectInformation.FileId,
+ VolumeCB->VolumeInformation.Cell,
+ VolumeCB->VolumeInformation.CellLength,
(void *)&stOpenCB,
sizeof( AFSFileOpenCB),
(void *)&stOpenResultCB,
&uniGUID);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenRoot (%p) Failed open in service volume %08lX-%08lX AuthGroup %wZ Status %08lX\n",
Irp,
VolumeCB->ObjectInformation.FileId.Cell,
VolumeCB->ObjectInformation.FileId.Volume,
&uniGUID,
- ntStatus);
+ ntStatus));
if( AuthGroup != NULL)
{
AFSAcquireExcl( VolumeCB->ObjectInformation.Specific.Directory.DirectoryNodeHdr.TreeLock,
TRUE);
- if( !BooleanFlagOn( VolumeCB->ObjectInformation.Flags, AFS_OBJECT_FLAGS_DIRECTORY_ENUMERATED))
- {
-
- ntStatus = AFSEnumerateDirectory( AuthGroup,
- &VolumeCB->ObjectInformation,
- TRUE);
+ ntStatus = AFSEnumerateDirectory( AuthGroup,
+ &VolumeCB->ObjectInformation,
+ TRUE);
- if( !NT_SUCCESS( ntStatus))
- {
-
- AFSReleaseResource( VolumeCB->ObjectInformation.Specific.Directory.DirectoryNodeHdr.TreeLock);
+ if( !NT_SUCCESS( ntStatus))
+ {
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
- AFS_TRACE_LEVEL_ERROR,
- "AFSOpenRoot (%p) Failed to enumerate directory Status %08lX\n",
- Irp,
- ntStatus);
+ AFSReleaseResource( VolumeCB->ObjectInformation.Specific.Directory.DirectoryNodeHdr.TreeLock);
- try_return( ntStatus);
- }
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_ERROR,
+ "AFSOpenRoot (%p) Failed to enumerate directory Status %08lX\n",
+ Irp,
+ ntStatus));
- SetFlag( VolumeCB->ObjectInformation.Flags, AFS_OBJECT_FLAGS_DIRECTORY_ENUMERATED);
+ try_return( ntStatus);
}
AFSReleaseResource( VolumeCB->ObjectInformation.Specific.Directory.DirectoryNodeHdr.TreeLock);
// init the volume fcb
//
- if( VolumeCB->RootFcb == NULL)
- {
+ ntStatus = AFSInitRootFcb( (ULONGLONG)PsGetCurrentProcessId(),
+ VolumeCB);
- ntStatus = AFSInitRootFcb( (ULONGLONG)PsGetCurrentProcessId(),
- VolumeCB);
-
- if( !NT_SUCCESS( ntStatus))
- {
-
- try_return( ntStatus);
- }
- }
- else
+ if( !NT_SUCCESS( ntStatus))
{
- AFSAcquireExcl( VolumeCB->RootFcb->Header.Resource,
- TRUE);
+ try_return( ntStatus);
}
lCount = InterlockedIncrement( &VolumeCB->RootFcb->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenRoot Increment count on Fcb %p Cnt %d\n",
VolumeCB->RootFcb,
- lCount);
+ lCount));
bReleaseFcb = TRUE;
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenRoot (%p) Access check failure Status %08lX\n",
Irp,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenRoot (%p) Failed to allocate Ccb Status %08lX\n",
Irp,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &VolumeCB->RootFcb->OpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenRoot Increment handle count on Fcb %p Cnt %d\n",
VolumeCB->RootFcb,
- lCount);
+ lCount));
//
// Indicate the object is held
lCount = InterlockedDecrement( &VolumeCB->RootFcb->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenRoot Decrement count on Fcb %p Cnt %d\n",
VolumeCB->RootFcb,
- lCount);
+ lCount));
}
AFSReleaseResource( VolumeCB->RootFcb->Header.Resource);
ulAttributes |= FILE_ATTRIBUTE_DIRECTORY;
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessCreate (%p) Creating file %wZ Attributes %08lX\n",
Irp,
FullFileName,
- ulAttributes);
+ ulAttributes));
- if( BooleanFlagOn( VolumeCB->VolumeInformation.Characteristics, FILE_READ_ONLY_DEVICE))
+ if( BooleanFlagOn( VolumeCB->VolumeInformation.FileSystemAttributes, FILE_READ_ONLY_VOLUME))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessCreate Request failed due to read only volume %wZ\n",
- FullFileName);
+ FullFileName));
try_return( ntStatus = STATUS_MEDIA_WRITE_PROTECTED);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessCreate (%p) Failed to create directory entry %wZ Status %08lX\n",
Irp,
FullFileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
pObjectInfo->FileType == AFS_FILE_TYPE_UNKNOWN)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessCreate (%p) Evaluating object %wZ FID %08lX-%08lX-%08lX-%08lX\n",
Irp,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
ntStatus = AFSEvaluateNode( AuthGroup,
pDirEntry);
if ( ntStatus == STATUS_NOT_A_DIRECTORY)
{
- if ( pParentObjectInfo == pObjectInfo->ParentObjectInformation)
+ if ( !BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_FLAGS_PARENT_FID))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSProcessCreate (%p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSProcessCreate (%p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX != NULL Status %08lX\n",
Irp,
&pDirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pParentObjectInfo->FileId.Volume,
pParentObjectInfo->FileId.Vnode,
pParentObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
}
- else if ( pObjectInfo->ParentObjectInformation == NULL)
+ else if ( AFSIsEqualFID( &pParentObjectInfo->FileId, &pObjectInfo->ParentFileId))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSProcessCreate (%p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX != NULL Status %08lX\n",
+ "AFSProcessCreate (%p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX Status %08lX\n",
Irp,
&pDirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pParentObjectInfo->FileId.Volume,
pParentObjectInfo->FileId.Vnode,
pParentObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
}
else
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessCreate (%p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX != %08lX-%08lX-%08lX-%08lX Status %08lX\n",
Irp,
pParentObjectInfo->FileId.Volume,
pParentObjectInfo->FileId.Vnode,
pParentObjectInfo->FileId.Unique,
- pObjectInfo->ParentObjectInformation->FileId.Cell,
- pObjectInfo->ParentObjectInformation->FileId.Volume,
- pObjectInfo->ParentObjectInformation->FileId.Vnode,
- pObjectInfo->ParentObjectInformation->FileId.Unique,
- ntStatus);
+ pObjectInfo->ParentFileId.Cell,
+ pObjectInfo->ParentFileId.Volume,
+ pObjectInfo->ParentFileId.Vnode,
+ pObjectInfo->ParentFileId.Unique,
+ ntStatus));
}
}
else
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessCreate (%p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
Irp,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
}
try_return( ntStatus);
ClearFlag( pObjectInfo->Flags, AFS_OBJECT_FLAGS_NOT_EVALUATED);
}
+ ASSERT( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_FLAGS_PARENT_FID) &&
+ AFSIsEqualFID( &pParentObjectInfo->FileId, &pObjectInfo->ParentFileId));
+
//
// We may have raced and the Fcb is already created
//
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessCreate (%p) Failed to initialize fcb %wZ Status %08lX\n",
Irp,
FullFileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &(*Fcb)->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessCreate Increment count on Fcb %p Cnt %d\n",
*Fcb,
- lCount);
+ lCount));
bReleaseFcb = TRUE;
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessCreate (%p) Failed to initialize ccb %wZ Status %08lX\n",
Irp,
FullFileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &(*Fcb)->OpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessCreate Increment handle count on Fcb %p Cnt %d\n",
(*Fcb),
- lCount);
+ lCount));
//
// Increment the open reference and handle on the parent node
//
- lCount = InterlockedIncrement( &pObjectInfo->ParentObjectInformation->Specific.Directory.ChildOpenHandleCount);
+ lCount = InterlockedIncrement( &pParentObjectInfo->Specific.Directory.ChildOpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessCreate Increment child open handle count on Parent object %p Cnt %d\n",
- pObjectInfo->ParentObjectInformation,
- lCount);
+ pParentObjectInfo,
+ lCount));
- lCount = InterlockedIncrement( &pObjectInfo->ParentObjectInformation->Specific.Directory.ChildOpenReferenceCount);
+ lCount = InterlockedIncrement( &pParentObjectInfo->Specific.Directory.ChildOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessCreate Increment child open ref count on Parent object %p Cnt %d\n",
- pObjectInfo->ParentObjectInformation,
- lCount);
+ pParentObjectInfo,
+ lCount));
if( ulOptions & FILE_DELETE_ON_CLOSE)
{
// Mark it for delete on close
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessCreate (%p) Setting PENDING_DELETE flag in DirEntry %p Name %wZ\n",
Irp,
pDirEntry,
- FullFileName);
+ FullFileName));
SetFlag( pDirEntry->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
}
lCount = InterlockedDecrement( &(*Fcb)->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessCreate Decrement count on Fcb %p Cnt %d\n",
*Fcb,
- lCount);
+ lCount));
}
AFSReleaseResource( &(*Fcb)->NPFcb->Resource);
lCount = InterlockedDecrement( &pDirEntry->DirOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessCreate Decrement count on %wZ DE %p Cnt %d\n",
&pDirEntry->NameInformation.FileName,
pDirEntry,
- lCount);
+ lCount));
ASSERT( lCount >= 0);
}
if( bFileCreated)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessCreate Create failed, removing DE %p from parent object %p Status %08lX\n",
pDirEntry,
pParentObjectInfo,
- ntStatus);
+ ntStatus));
//
// Remove the dir entry from the parent
BOOLEAN bAllocatedCcb = FALSE;
BOOLEAN bReleaseFcb = FALSE;
AFSObjectInfoCB *pParentObject = NULL;
+ AFSObjectInfoCB *pGrandParentObject = NULL;
UNICODE_STRING uniTargetName;
LONG lCount;
pFileObject = pIrpSp->FileObject;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenTargetDirectory (%p) Processing file %wZ\n",
Irp,
- TargetName);
+ TargetName));
pParentObject = ParentDirectoryCB->ObjectInformation;
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenTargetDirectory (%p) Failed to initialize fcb %wZ Status %08lX\n",
Irp,
&ParentDirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &pParentObject->Fcb->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenTargetDirectory Increment count on Fcb %p Cnt %d\n",
pParentObject->Fcb,
- lCount);
+ lCount));
bReleaseFcb = TRUE;
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenTargetDirectory (%p) Access check failure %wZ Status %08lX\n",
Irp,
&ParentDirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenTargetDirectory (%p) Failed to initialize ccb %wZ Status %08lX\n",
Irp,
&ParentDirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &pParentObject->Fcb->OpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenTargetDirectory Increment handle count on Fcb %p Cnt %d\n",
pParentObject->Fcb,
- lCount);
+ lCount));
//
// Increment the open reference and handle on the parent node
//
- if( pParentObject->ParentObjectInformation != NULL)
+ if( BooleanFlagOn( pParentObject->Flags, AFS_OBJECT_FLAGS_PARENT_FID))
{
- lCount = InterlockedIncrement( &pParentObject->ParentObjectInformation->Specific.Directory.ChildOpenHandleCount);
+ pGrandParentObject = AFSFindObjectInfo( pParentObject->VolumeCB,
+ &pParentObject->ParentFileId,
+ TRUE);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSOpenTargetDirectory Increment child open handle count on Parent object %p Cnt %d\n",
- pParentObject->ParentObjectInformation,
- lCount);
+ if ( pGrandParentObject)
+ {
- lCount = InterlockedIncrement( &pParentObject->ParentObjectInformation->Specific.Directory.ChildOpenReferenceCount);
+ lCount = InterlockedIncrement( &pGrandParentObject->Specific.Directory.ChildOpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSOpenTargetDirectory Increment child open ref count on Parent object %p Cnt %d\n",
- pParentObject->ParentObjectInformation,
- lCount);
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSOpenTargetDirectory Increment child open handle count on Parent object %p Cnt %d\n",
+ pGrandParentObject,
+ lCount));
+
+ lCount = InterlockedIncrement( &pGrandParentObject->Specific.Directory.ChildOpenReferenceCount);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSOpenTargetDirectory Increment child open ref count on Parent object %p Cnt %d\n",
+ pGrandParentObject,
+ lCount));
+
+ AFSReleaseObjectInfo( &pGrandParentObject);
+ }
}
try_exit:
lCount = InterlockedDecrement( &pParentObject->Fcb->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenTargetDirectory Decrement count on Fcb %p Cnt %d\n",
pParentObject->Fcb,
- lCount);
+ lCount));
}
AFSReleaseResource( &pParentObject->Fcb->NPFcb->Resource);
IN AFSVolumeCB *VolumeCB,
IN AFSDirectoryCB *ParentDirCB,
IN AFSDirectoryCB *DirectoryCB,
+ IN BOOLEAN bOpenedReparsePoint,
OUT AFSFcb **Fcb,
OUT AFSCcb **Ccb)
{
pObjectInfo = DirectoryCB->ObjectInformation;
+ ASSERT( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_FLAGS_PARENT_FID) &&
+ AFSIsEqualFID( &pParentObjectInfo->FileId, &pObjectInfo->ParentFileId));
+
//
// Check if the entry is pending a deletion
//
ntStatus = STATUS_DELETE_PENDING;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOpen (%p) Entry pending delete %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
ntStatus = AFSValidateEntry( DirectoryCB,
AuthGroup,
- FALSE,
+ bOpenedReparsePoint,
TRUE);
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOpen (%p) Failed to validate entry %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
ntStatus = STATUS_CANNOT_DELETE;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOpen (%p) Cannot delete entry %wZ marked for delete on close Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOpen (%p) Failed to init fcb on %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &pObjectInfo->Fcb->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOpen Increment2 count on Fcb %p Cnt %d\n",
pObjectInfo->Fcb,
- lCount);
+ lCount));
//
// Check access on the entry
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOpen (%p) Failed to check share access on %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
BOOLEAN bMmFlushed;
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING|AFS_SUBSYSTEM_SECTION_OBJECT,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOpen Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( &pObjectInfo->Fcb->NPFcb->SectionObjectResource,
TRUE);
- bMmFlushed = MmFlushImageSection( &pObjectInfo->Fcb->NPFcb->SectionObjectPointers,
- MmFlushForWrite);
+ __try
+ {
+
+ bMmFlushed = MmFlushImageSection( &pObjectInfo->Fcb->NPFcb->SectionObjectPointers,
+ MmFlushForWrite);
+ }
+ __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()))
+ {
+
+ bMmFlushed = FALSE;
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ ntStatus = GetExceptionCode();
+
+ AFSDbgTrace(( 0,
+ 0,
+ "EXCEPTION - AFSProcessOpen MmFlushImageSection failed FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX\n",
+ pObjectInfo->FileId.Cell,
+ pObjectInfo->FileId.Volume,
+ pObjectInfo->FileId.Vnode,
+ pObjectInfo->FileId.Unique,
+ ntStatus));
+ }
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING|AFS_SUBSYSTEM_SECTION_OBJECT,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOpen Releasing Fcb SectionObject lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSReleaseResource( &pObjectInfo->Fcb->NPFcb->SectionObjectResource);
ntStatus = BooleanFlagOn(ulOptions, FILE_DELETE_ON_CLOSE) ? STATUS_CANNOT_DELETE :
STATUS_SHARING_VIOLATION;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOpen (%p) Failed to flush image section %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
ntStatus = STATUS_NOT_A_DIRECTORY;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOpen (%p) Attempt to open file as directory %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
ntStatus = STATUS_FILE_IS_A_DIRECTORY;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOpen (%p) Attempt to open directory as file %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
AuthGroup,
&DirectoryCB->NameInformation.FileName,
&pObjectInfo->FileId,
+ pObjectInfo->VolumeCB->VolumeInformation.Cell,
+ pObjectInfo->VolumeCB->VolumeInformation.CellLength,
(void *)&stOpenCB,
sizeof( AFSFileOpenCB),
(void *)&stOpenResultCB,
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOpen (%p) Failed open in service %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
ntStatus = STATUS_ACCESS_DENIED;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOpen (%p) Failed to check access from service Desired %08lX Granted %08lX Entry %wZ Status %08lX\n",
Irp,
*pDesiredAccess,
stOpenResultCB.GrantedAccess,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOpen (%p) Failed to initialize ccb %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &pObjectInfo->Fcb->OpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOpen Increment handle count on Fcb %p Cnt %d\n",
pObjectInfo->Fcb,
- lCount);
+ lCount));
//
// Increment the open reference and handle on the parent node
//
- lCount = InterlockedIncrement( &pObjectInfo->ParentObjectInformation->Specific.Directory.ChildOpenHandleCount);
+ lCount = InterlockedIncrement( &pParentObjectInfo->Specific.Directory.ChildOpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOpen Increment child open handle count on Parent object %p Cnt %d\n",
- pObjectInfo->ParentObjectInformation,
- lCount);
+ pParentObjectInfo,
+ lCount));
- lCount = InterlockedIncrement( &pObjectInfo->ParentObjectInformation->Specific.Directory.ChildOpenReferenceCount);
+ lCount = InterlockedIncrement( &pParentObjectInfo->Specific.Directory.ChildOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOpen Increment child open ref count on Parent object %p Cnt %d\n",
- pObjectInfo->ParentObjectInformation,
- lCount);
+ pParentObjectInfo,
+ lCount));
if( BooleanFlagOn( ulOptions, FILE_DELETE_ON_CLOSE))
{
// Mark it for delete on close
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOpen (%p) Setting PENDING_DELETE flag in DirEntry %p Name %wZ\n",
Irp,
DirectoryCB,
- &DirectoryCB->NameInformation.FileName);
+ &DirectoryCB->NameInformation.FileName));
SetFlag( DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
}
lCount = InterlockedDecrement( &pObjectInfo->Fcb->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOpen Decrement2 count on Fcb %p Cnt %d\n",
pObjectInfo->Fcb,
- lCount);
+ lCount));
}
AFSReleaseResource( pObjectInfo->Fcb->Header.Resource);
AuthGroup,
&DirectoryCB->NameInformation.FileName,
&pObjectInfo->FileId,
+ pObjectInfo->VolumeCB->VolumeInformation.Cell,
+ pObjectInfo->VolumeCB->VolumeInformation.CellLength,
(void *)&stReleaseFileAccess,
sizeof( AFSFileAccessReleaseCB),
NULL,
ulCreateDisposition = (pIrpSp->Parameters.Create.Options >> 24) & 0x000000ff;
- if( BooleanFlagOn( VolumeCB->VolumeInformation.Characteristics, FILE_READ_ONLY_DEVICE))
+ if( BooleanFlagOn( VolumeCB->VolumeInformation.FileSystemAttributes, FILE_READ_ONLY_VOLUME))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOverwriteSupersede Request failed on %wZ due to read only volume\n",
Irp,
- &DirectoryCB->NameInformation.FileName);
+ &DirectoryCB->NameInformation.FileName));
try_return( ntStatus = STATUS_MEDIA_WRITE_PROTECTED);
}
pObjectInfo = DirectoryCB->ObjectInformation;
+ ASSERT( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_FLAGS_PARENT_FID) &&
+ AFSIsEqualFID( &pParentObjectInfo->FileId, &pObjectInfo->ParentFileId));
+
//
// Check if we should go and retrieve updated information for the node
//
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOverwriteSupersede (%p) Failed to validate entry %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
+ if ( BooleanFlagOn( pObjectInfo->FileAttributes, FILE_ATTRIBUTE_READONLY))
+ {
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_WARNING,
+ "AFSProcessOverwriteSupersede Request failed on %wZ due to read only file attribute\n",
+ Irp,
+ &DirectoryCB->NameInformation.FileName));
+
+ try_return( ntStatus = STATUS_ACCESS_DENIED);
+ }
+
//
// Be sure we have an Fcb for the object block
//
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOverwriteSupersede (%p) Failed to initialize fcb %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &pObjectInfo->Fcb->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOverwriteSupersede Increment2 count on Fcb %p Cnt %d\n",
pObjectInfo->Fcb,
- lCount);
+ lCount));
bReleaseFcb = TRUE;
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOverwriteSupersede (%p) Access check failure %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING|AFS_SUBSYSTEM_SECTION_OBJECT,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOverwriteSupercede Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( &pObjectInfo->Fcb->NPFcb->SectionObjectResource,
TRUE);
- //
- // Before we actually truncate, check to see if the purge
- // is going to fail.
- //
+ __try
+ {
+
+ //
+ // Before we actually truncate, check to see if the purge
+ // is going to fail.
+ //
- bUserMapped = !MmCanFileBeTruncated( &pObjectInfo->Fcb->NPFcb->SectionObjectPointers,
- &liZero);
+ bUserMapped = !MmCanFileBeTruncated( &pObjectInfo->Fcb->NPFcb->SectionObjectPointers,
+ &liZero);
+ }
+ __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()))
+ {
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ bUserMapped = FALSE;
+
+ ntStatus = GetExceptionCode();
+
+ AFSDbgTrace(( 0,
+ 0,
+ "EXCEPTION - AFSProcessOverwriteSupercede MmCanFileBeTruncated failed FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX\n",
+ pObjectInfo->FileId.Cell,
+ pObjectInfo->FileId.Volume,
+ pObjectInfo->FileId.Vnode,
+ pObjectInfo->FileId.Unique,
+ ntStatus));
+ }
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING|AFS_SUBSYSTEM_SECTION_OBJECT,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOverwriteSupercede Releasing Fcb SectionObject lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSReleaseResource( &pObjectInfo->Fcb->NPFcb->SectionObjectResource);
ntStatus = STATUS_USER_MAPPED_FILE;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOverwriteSupersede (%p) File user mapped %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOverwriteSupersede (%p) Failed to initialize ccb %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
pObjectInfo->Fcb->ObjectInformation->EndOfFile = liSaveSize;
pObjectInfo->Fcb->ObjectInformation->AllocationSize = liSaveAlloc;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSProcessOverwriteSupersede (%p) Failed to update file information %wZ Status %08lX\n",
Irp,
&DirectoryCB->NameInformation.FileName,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &pObjectInfo->Fcb->OpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOverwriteSupersede Increment handle count on Fcb %p Cnt %d\n",
pObjectInfo->Fcb,
- lCount);
+ lCount));
//
// Increment the open reference and handle on the parent node
//
- lCount = InterlockedIncrement( &pObjectInfo->ParentObjectInformation->Specific.Directory.ChildOpenHandleCount);
+ lCount = InterlockedIncrement( &pParentObjectInfo->Specific.Directory.ChildOpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOverwriteSupersede Increment child open handle count on Parent object %p Cnt %d\n",
- pObjectInfo->ParentObjectInformation,
- lCount);
+ pParentObjectInfo,
+ lCount));
- lCount = InterlockedIncrement( &pObjectInfo->ParentObjectInformation->Specific.Directory.ChildOpenReferenceCount);
+ lCount = InterlockedIncrement( &pParentObjectInfo->Specific.Directory.ChildOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOverwriteSupersede Increment child open ref count on Parent object %p Cnt %d\n",
- pObjectInfo->ParentObjectInformation,
- lCount);
+ pParentObjectInfo,
+ lCount));
AFSReleaseResource( pObjectInfo->Fcb->Header.Resource);
lCount = InterlockedDecrement( &pObjectInfo->Fcb->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSProcessOverwriteSupersede Decrement2 count on Fcb %p Cnt %d\n",
pObjectInfo->Fcb,
- lCount);
+ lCount));
}
AFSReleaseResource( pObjectInfo->Fcb->Header.Resource);
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenIOCtlFcb (%p) Failed to initialize fcb Status %08lX\n",
Irp,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &(*Fcb)->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenIOCtlFcb Increment count on Fcb %p Cnt %d\n",
(*Fcb),
- lCount);
+ lCount));
bReleaseFcb = TRUE;
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenIOCtlFcb (%p) Failed to initialize ccb Status %08lX\n",
Irp,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
AuthGroup,
NULL,
&stFileID,
+ NULL,
+ 0,
(void *)&stPIOCtlOpen,
sizeof( AFSPIOCtlOpenCloseRequestCB),
NULL,
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenIOCtlFcb (%p) Failed service open Status %08lX\n",
Irp,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &(*Fcb)->OpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenIOCtlFcb Increment handle count on Fcb %p Cnt %d\n",
(*Fcb),
- lCount);
+ lCount));
//
// Increment the open reference and handle on the parent node
lCount = InterlockedIncrement( &pParentObjectInfo->Specific.Directory.ChildOpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenIOCtlFcb Increment child open handle count on Parent object %p Cnt %d\n",
pParentObjectInfo,
- lCount);
+ lCount));
lCount = InterlockedIncrement( &pParentObjectInfo->Specific.Directory.ChildOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenIOCtlFcb Increment child open ref count on Parent object %p Cnt %d\n",
pParentObjectInfo,
- lCount);
+ lCount));
//
// Return the open result for this file
lCount = InterlockedDecrement( &(*Fcb)->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenIOCtlFcb Decrement count on Fcb %p Cnt %d\n",
(*Fcb),
- lCount);
+ lCount));
}
AFSReleaseResource( &(*Fcb)->NPFcb->Resource);
PFILE_OBJECT pFileObject = NULL;
PIO_STACK_LOCATION pIrpSp = IoGetCurrentIrpStackLocation( Irp);
BOOLEAN bReleaseFcb = FALSE, bAllocatedCcb = FALSE, bAllocateFcb = FALSE;
+ AFSObjectInfoCB *pObjectInfo = NULL;
AFSObjectInfoCB *pParentObjectInfo = NULL;
AFSPipeOpenCloseRequestCB stPipeOpen;
LONG lCount;
pFileObject = pIrpSp->FileObject;
- AFSDbgLogMsg( AFS_SUBSYSTEM_PIPE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_PIPE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSOpenSpecialShareFcb (%p) Processing Share %wZ open\n",
Irp,
- &DirectoryCB->NameInformation.FileName);
+ &DirectoryCB->NameInformation.FileName));
- pParentObjectInfo = DirectoryCB->ObjectInformation->ParentObjectInformation;
+ pObjectInfo = DirectoryCB->ObjectInformation;
- if( DirectoryCB->ObjectInformation->Fcb == NULL)
+ if ( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_FLAGS_PARENT_FID))
{
- //
+ pParentObjectInfo = AFSFindObjectInfo( pObjectInfo->VolumeCB,
+ &pObjectInfo->ParentFileId,
+ TRUE);
+ }
+
+ *Fcb = pObjectInfo->Fcb;
+
+ if( *Fcb == NULL)
+ {
+
+ //
// Allocate and initialize the Fcb for the file.
//
ntStatus = AFSInitFcb( DirectoryCB);
- *Fcb = DirectoryCB->ObjectInformation->Fcb;
+ *Fcb = pObjectInfo->Fcb;
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_PIPE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_PIPE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenSpecialShareFcb (%p) Failed to initialize fcb Status %08lX\n",
Irp,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
else
{
- *Fcb = DirectoryCB->ObjectInformation->Fcb;
-
AFSAcquireExcl( &(*Fcb)->NPFcb->Resource,
TRUE);
}
lCount = InterlockedIncrement( &(*Fcb)->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenSpecialShareFcb Increment count on Fcb %p Cnt %d\n",
(*Fcb),
- lCount);
+ lCount));
bReleaseFcb = TRUE;
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_PIPE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_PIPE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenSpecialShareFcb (%p) Failed to initialize ccb Status %08lX\n",
Irp,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
AuthGroup,
&DirectoryCB->NameInformation.FileName,
NULL,
+ NULL,
+ 0,
(void *)&stPipeOpen,
sizeof( AFSPipeOpenCloseRequestCB),
NULL,
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_PIPE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_PIPE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSOpenSpecialShareFcb (%p) Failed service open Status %08lX\n",
Irp,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
lCount = InterlockedIncrement( &(*Fcb)->OpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenSpecialShareFcb Increment handle count on Fcb %p Cnt %d\n",
(*Fcb),
- lCount);
+ lCount));
//
// Increment the open reference and handle on the parent node
lCount = InterlockedIncrement( &pParentObjectInfo->Specific.Directory.ChildOpenHandleCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenSpecialShareFcb Increment child open handle count on Parent object %p Cnt %d\n",
pParentObjectInfo,
- lCount);
+ lCount));
lCount = InterlockedIncrement( &pParentObjectInfo->Specific.Directory.ChildOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenSpecialShareFcb Increment child open ref count on Parent object %p Cnt %d\n",
pParentObjectInfo,
- lCount);
+ lCount));
//
// Return the open result for this file
lCount = InterlockedDecrement( &(*Fcb)->OpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSOpenSpecialShareFcb Decrement count on Fcb %p Cnt %d\n",
(*Fcb),
- lCount);
+ lCount));
}
AFSReleaseResource( &(*Fcb)->NPFcb->Resource);