ntStatus);
}
- __except( AFSExceptionFilter( GetExceptionCode(), GetExceptionInformation()) )
+ __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()) )
{
AFSDbgLogMsg( 0,
0,
"EXCEPTION - AFSFSControl\n");
+
+ AFSDumpTraceFilesFnc();
}
return ntStatus;
// If a colon is not found, it means there is no cell
- if ( Cell->Buffer[ Cell->Length / sizeof( WCHAR)] == L':')
+ if ( Cell->Length < Target->Length - sizeof( WCHAR) &&
+ Cell->Buffer[ Cell->Length / sizeof( WCHAR)] == L':')
{
Cell->MaximumLength = Cell->Length;
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSProcessUserFsRequest Processing FSCTL_LOCK_VOLUME request\n");
+ ntStatus = STATUS_NOT_IMPLEMENTED;
+
break;
}
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSProcessUserFsRequest Processing FSCTL_UNLOCK_VOLUME request\n");
+ ntStatus = STATUS_NOT_IMPLEMENTED;
+
break;
}
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSProcessUserFsRequest Processing FSCTL_DISMOUNT_VOLUME request\n");
+ ntStatus = STATUS_NOT_IMPLEMENTED;
+
break;
}
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSProcessUserFsRequest Processing FSCTL_MARK_VOLUME_DIRTY request\n");
+ ntStatus = STATUS_NOT_IMPLEMENTED;
+
break;
}
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSProcessUserFsRequest Processing FSCTL_IS_VOLUME_DIRTY request\n");
+ ntStatus = STATUS_NOT_IMPLEMENTED;
+
break;
}
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSProcessUserFsRequest Processing FSCTL_IS_VOLUME_MOUNTED request\n");
+ ntStatus = STATUS_NOT_IMPLEMENTED;
+
break;
}
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSProcessUserFsRequest Processing FSCTL_IS_PATHNAME_VALID request\n");
+ ntStatus = STATUS_SUCCESS;
+
break;
}
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSProcessUserFsRequest Processing FSCTL_GET_REPARSE_POINT request\n");
-
- if( ulOutputBufferLen < FIELD_OFFSET( REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer.DataBuffer))
- {
-
- ntStatus = STATUS_BUFFER_TOO_SMALL;
-
- Irp->IoStatus.Information = FIELD_OFFSET( REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer.DataBuffer);
-
- break;
- }
-
- ulRemainingLen -= FIELD_OFFSET( REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer.DataBuffer);
+ "AFSProcessUserFsRequest Processing FSCTL_GET_REPARSE_POINT request %wZ Type 0x%x Attrib 0x%x\n",
+ &pCcb->DirectoryCB->NameInformation.FileName,
+ pCcb->DirectoryCB->ObjectInformation->FileType,
+ pCcb->DirectoryCB->ObjectInformation->FileAttributes);
//
// Check if we have the reparse entry set on the entry
break;
}
+ if( ulOutputBufferLen < FIELD_OFFSET( REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer.DataBuffer))
+ {
+
+ ntStatus = STATUS_BUFFER_TOO_SMALL;
+
+ Irp->IoStatus.Information = FIELD_OFFSET( REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer.DataBuffer);
+
+ break;
+ }
+
+ ulRemainingLen -= FIELD_OFFSET( REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer.DataBuffer);
+
//
// Populate the data in the reparse buffer
//
pCcb->DirectoryCB->ObjectInformation->FileId.Vnode,
pCcb->DirectoryCB->ObjectInformation->FileId.Unique);
- ntStatus = AFSVerifyEntry( &pFcb->AuthGroup,
+ ntStatus = AFSVerifyEntry( &pCcb->AuthGroup,
pCcb->DirectoryCB);
if( !NT_SUCCESS( ntStatus))
if( pCcb->DirectoryCB->NameInformation.TargetName.Length == 0)
{
- ntStatus = STATUS_ACCESS_DENIED;
+ ntStatus = STATUS_REPARSE_POINT_NOT_RESOLVED;
break;
}
if( pCcb->DirectoryCB->NameInformation.TargetName.Length == 0)
{
- ntStatus = STATUS_ACCESS_DENIED;
+ ntStatus = STATUS_REPARSE_POINT_NOT_RESOLVED;
break;
}
if( pCcb->DirectoryCB->NameInformation.TargetName.Length == 0)
{
- ntStatus = STATUS_ACCESS_DENIED;
+ ntStatus = STATUS_REPARSE_POINT_NOT_RESOLVED;
break;
}
ulRemainingLen -= pReparseBuffer->ReparseDataLength;
- pReparseBuffer->ReparseTag = IO_REPARSE_TAG_OPENAFS_DFS;
+ pReparseBuffer->ReparseTag = IO_REPARSE_TAG_SURROGATE|IO_REPARSE_TAG_OPENAFS_DFS;
RtlCopyMemory( &pReparseBuffer->ReparseGuid,
&GUID_AFS_REPARSE_GUID,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSProcessUserFsRequest Processing FSCTL_SET_REPARSE_POINT request\n");
-
- if( ulInputBufferLen < FIELD_OFFSET( REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer.DataBuffer))
- {
-
- ntStatus = STATUS_INVALID_PARAMETER;
-
- break;
- }
+ "AFSProcessUserFsRequest Processing FSCTL_SET_REPARSE_POINT request %wZ Type 0x%x Attrib 0x%x\n",
+ &pCcb->DirectoryCB->NameInformation.FileName,
+ pCcb->DirectoryCB->ObjectInformation->FileType,
+ pCcb->DirectoryCB->ObjectInformation->FileAttributes);
//
// Check if we have the reparse entry set on the entry
break;
}
- if( pReparseBuffer->ReparseTag != IO_REPARSE_TAG_OPENAFS_DFS)
+ if( ulInputBufferLen < FIELD_OFFSET( REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer.DataBuffer))
+ {
+
+ ntStatus = STATUS_IO_REPARSE_DATA_INVALID;
+
+ break;
+ }
+
+ if( (pReparseBuffer->ReparseTag & 0x0000FFFF) != IO_REPARSE_TAG_OPENAFS_DFS)
{
ntStatus = STATUS_IO_REPARSE_TAG_MISMATCH;
// For now deny access on this call
//
+ ntStatus = STATUS_INVALID_PARAMETER;
+
break;
}
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSProcessUserFsRequest Processing FSCTL_DELETE_REPARSE_POINT request\n");
-
- if( ulInputBufferLen < FIELD_OFFSET( REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer.DataBuffer))
- {
-
- ntStatus = STATUS_INVALID_PARAMETER;
-
- break;
- }
+ "AFSProcessUserFsRequest Processing FSCTL_DELETE_REPARSE_POINT request %wZ Type 0x%x Attrib 0x%x\n",
+ &pCcb->DirectoryCB->NameInformation.FileName,
+ pCcb->DirectoryCB->ObjectInformation->FileType,
+ pCcb->DirectoryCB->ObjectInformation->FileAttributes);
//
// Check if we have the reparse entry set on the entry
break;
}
- if( pReparseBuffer->ReparseTag != IO_REPARSE_TAG_OPENAFS_DFS)
+ if( ulInputBufferLen < FIELD_OFFSET( REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer.DataBuffer))
+ {
+
+ ntStatus = STATUS_INVALID_PARAMETER;
+
+ break;
+ }
+
+ if( (pReparseBuffer->ReparseTag & 0x0000FFFF) != IO_REPARSE_TAG_OPENAFS_DFS)
{
ntStatus = STATUS_IO_REPARSE_TAG_MISMATCH;
break;
}
+#ifndef FSCTL_SET_PURGE_FAILURE_MODE
+#define FSCTL_SET_PURGE_FAILURE_MODE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 156, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#endif
+
+ case FSCTL_SET_PURGE_FAILURE_MODE:
+ {
+
+ //
+ // For the time being just succeed this call
+ //
+
+ ntStatus = STATUS_SUCCESS;
+
+ break;
+ }
+
default :
+ {
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSProcessUserFsRequest Processing default (%08lX) request\n", ulFsControlCode);
- ntStatus = STATUS_INVALID_PARAMETER;
+ ntStatus = STATUS_INVALID_DEVICE_REQUEST;
break;
+ }
}
try_exit: