IN PIRP Irp)
{
+ UNREFERENCED_PARAMETER(LibDeviceObject);
NTSTATUS ntStatus = STATUS_SUCCESS;
- AFSDeviceExt *pDeviceExt = (AFSDeviceExt *)AFSRDRDeviceObject->DeviceExtension;
IO_STACK_LOCATION *pIrpSp;
- FS_INFORMATION_CLASS FsInformationClass;
+ FS_INFORMATION_CLASS FsInformationClass = FileFsMaximumInformation;
void *pBuffer = NULL;
ULONG ulLength = 0;
BOOLEAN bReleaseResource = FALSE;
+ PFILE_OBJECT pFileObject = NULL;
AFSFcb *pFcb = NULL;
+ AFSObjectInfoCB *pObjectInfo = NULL;
AFSVolumeCB *pVolumeCB = NULL;
pIrpSp = IoGetCurrentIrpStackLocation( Irp);
__try
{
- pFcb = (AFSFcb *)pIrpSp->FileObject->FsContext;
+ pFileObject = pIrpSp->FileObject;
+
+ if( pFileObject == NULL)
+ {
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_ERROR,
+ "AFSQueryVolumeInfo Failing request with NULL FileObject\n");
+
+ try_return( ntStatus = STATUS_INVALID_DEVICE_REQUEST);
+ }
+
+ pFcb = (AFSFcb *)pFileObject->FsContext;
if( pFcb == NULL)
{
try_return( ntStatus = STATUS_INVALID_DEVICE_REQUEST);
}
- pVolumeCB = pFcb->ObjectInformation->VolumeCB;
+ pObjectInfo = pFcb->ObjectInformation;
- ASSERT( pVolumeCB->ObjectInformation.FileType == AFS_FILE_TYPE_DIRECTORY &&
- pVolumeCB->ObjectInformation.FileId.Vnode == 1);
+ if( pObjectInfo == NULL)
+ {
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_ERROR,
+ "AFSQueryVolumeInfo Failing request with NULL ObjectInformation\n");
+
+ try_return( ntStatus = STATUS_INVALID_DEVICE_REQUEST);
+ }
+
+ pVolumeCB = pObjectInfo->VolumeCB;
ulLength = pIrpSp->Parameters.QueryVolume.Length;
FsInformationClass = pIrpSp->Parameters.QueryVolume.FsInformationClass;
ntStatus);
}
- __except( AFSExceptionFilter( GetExceptionCode(), GetExceptionInformation()) )
+ __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()) )
{
AFSDbgLogMsg( 0,
0,
- "EXCEPTION - AFSQueryVolumeInfo\n");
+ "EXCEPTION - AFSQueryVolumeInfo FO %p InfoClass %d FCB %p ObjectInfo %p VolCB %p\n",
+ pFileObject,
+ FsInformationClass,
+ pFcb,
+ pObjectInfo,
+ pVolumeCB);
+
+ AFSDumpTraceFilesFnc();
}
return ntStatus;
IN PIRP Irp)
{
+ UNREFERENCED_PARAMETER(DeviceObject);
NTSTATUS ntStatus = STATUS_SUCCESS;
IO_STACK_LOCATION *pIrpSp;
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
- "AFSSetVolumeInfo Entry for FO %08lX\n", pIrpSp->FileObject);
+ "AFSSetVolumeInfo Entry for FO %p\n", pIrpSp->FileObject);
AFSCompleteRequest( Irp,
ntStatus);
}
- __except( AFSExceptionFilter( GetExceptionCode(), GetExceptionInformation()) )
+ __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()) )
{
AFSDbgLogMsg( 0,
0,
"EXCEPTION - AFSSetVolumeInfo\n");
+
+ AFSDumpTraceFilesFnc();
}
return ntStatus;
if( *Length >= (LONG)sizeof( FILE_FS_DEVICE_INFORMATION))
{
+ //
+ // This value is used to determine the return type of
+ // Win32 GetFileType(). Returning FILE_DEVICE_NETWORK_FILE_SYSTEM
+ // results in GetFileType returning FILE_TYPE_UNKNOWN which breaks
+ // msys-based applications. They treat all files as character
+ // special devices instead of files.
+ //
+
Buffer->DeviceType = FILE_DEVICE_DISK;
Buffer->Characteristics = VolumeInfo->Characteristics;
IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
IN OUT PULONG Length)
{
+ UNREFERENCED_PARAMETER(VolumeInfo);
NTSTATUS ntStatus = STATUS_SUCCESS;
RtlZeroMemory( Buffer,
Buffer->FileSystemAttributes = (FILE_CASE_PRESERVED_NAMES |
FILE_UNICODE_ON_DISK |
+ FILE_SUPPORTS_HARD_LINKS |
FILE_SUPPORTS_REPARSE_POINTS);
Buffer->MaximumComponentNameLength = 255;