Windows: AFSSetRenameInfo log message
[openafs.git] / src / WINNT / afsrdr / kernel / lib / AFSFileInfo.cpp
index c08a020..8b95c13 100644 (file)
@@ -383,11 +383,22 @@ AFSQueryFileInfo( IN PDEVICE_OBJECT LibDeviceObject,
                 break;
             }
 
-        default:
+            case FileNetworkPhysicalNameInformation:
+            {
 
-                ntStatus = STATUS_INVALID_PARAMETER;
+                ntStatus = AFSQueryPhysicalNameInfo( Irp,
+                                                     pCcb->DirectoryCB,
+                                                     (FILE_NETWORK_PHYSICAL_NAME_INFORMATION *)pBuffer,
+                                                     &lLength);
+
+                break;
+            }
 
+            default:
+            {
+                ntStatus = STATUS_INVALID_PARAMETER;
                 break;
+            }
         }
 
 try_exit:
@@ -745,6 +756,13 @@ AFSQueryBasicInfo( IN PIRP Irp,
 {
     NTSTATUS ntStatus = STATUS_SUCCESS;
     AFSDeviceExt *pDeviceExt = (AFSDeviceExt *)AFSRDRDeviceObject->DeviceExtension;
+    ULONG ulFileAttribs = 0;
+    AFSFcb *pFcb = NULL;
+    AFSCcb *pCcb = NULL;
+    IO_STACK_LOCATION *pIrpSp = IoGetCurrentIrpStackLocation( Irp);
+    AFSFileInfoCB stFileInfo;
+    AFSDirectoryCB *pParentDirectoryCB = NULL;
+    UNICODE_STRING uniParentPath;
 
     if( *Length >= sizeof( FILE_BASIC_INFORMATION))
     {
@@ -752,24 +770,68 @@ AFSQueryBasicInfo( IN PIRP Irp,
         RtlZeroMemory( Buffer,
                        *Length);
 
+        ulFileAttribs = DirectoryCB->ObjectInformation->FileAttributes;
+
+        pFcb = (AFSFcb *)pIrpSp->FileObject->FsContext;
+        pCcb = (AFSCcb *)pIrpSp->FileObject->FsContext2;
+
+        if( DirectoryCB->ObjectInformation->FileType == AFS_FILE_TYPE_SYMLINK)
+        {
+
+            pParentDirectoryCB = AFSGetParentEntry( pCcb->NameArray);
+
+            AFSRetrieveParentPath( &pCcb->FullFileName,
+                                   &uniParentPath);
+
+            RtlZeroMemory( &stFileInfo,
+                           sizeof( AFSFileInfoCB));
+
+            //
+            // Can't hold the Fcb while evaluating the path, leads to lock inversion
+            //
+
+            AFSReleaseResource( &pFcb->NPFcb->Resource);
+
+            if( NT_SUCCESS( AFSRetrieveFileAttributes( pParentDirectoryCB,
+                                                       DirectoryCB,
+                                                       &uniParentPath,
+                                                       NULL,
+                                                       &stFileInfo)))
+            {
+                ulFileAttribs = stFileInfo.FileAttributes;
+
+                ulFileAttribs |= FILE_ATTRIBUTE_REPARSE_POINT;
+            }
+
+            AFSAcquireShared( &pFcb->NPFcb->Resource,
+                              TRUE);
+        }
+
+
+        AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+                      AFS_TRACE_LEVEL_VERBOSE_2,
+                      "AFSQueryBasicInfo %wZ Type 0x%x Attrib 0x%x -> 0x%x\n",
+                      &pCcb->DirectoryCB->NameInformation.FileName,
+                      pCcb->DirectoryCB->ObjectInformation->FileType,
+                      pCcb->DirectoryCB->ObjectInformation->FileAttributes,
+                      ulFileAttribs);
+
         Buffer->CreationTime = DirectoryCB->ObjectInformation->CreationTime;
         Buffer->LastAccessTime = DirectoryCB->ObjectInformation->LastAccessTime;
         Buffer->LastWriteTime = DirectoryCB->ObjectInformation->LastWriteTime;
         Buffer->ChangeTime = DirectoryCB->ObjectInformation->ChangeTime;
-        Buffer->FileAttributes = DirectoryCB->ObjectInformation->FileAttributes;
+        Buffer->FileAttributes = ulFileAttribs;
 
         if( DirectoryCB->NameInformation.FileName.Buffer[ 0] == L'.' &&
-                 BooleanFlagOn( pDeviceExt->DeviceFlags, AFS_DEVICE_FLAG_HIDE_DOT_NAMES))
+            BooleanFlagOn( pDeviceExt->DeviceFlags, AFS_DEVICE_FLAG_HIDE_DOT_NAMES))
         {
 
             if ( Buffer->FileAttributes != FILE_ATTRIBUTE_NORMAL)
             {
-
                 Buffer->FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
             }
             else
             {
-
                 Buffer->FileAttributes = FILE_ATTRIBUTE_HIDDEN;
             }
         }
@@ -793,13 +855,18 @@ AFSQueryStandardInfo( IN PIRP Irp,
 {
 
     NTSTATUS ntStatus = STATUS_SUCCESS;
-    AFSFileInfoCB stFileInformation;
+    AFSFcb *pFcb = NULL;
     AFSCcb *pCcb = NULL;
     PIO_STACK_LOCATION pIrpSp = IoGetCurrentIrpStackLocation( Irp);
+    AFSFileInfoCB stFileInfo;
+    AFSDirectoryCB *pParentDirectoryCB = NULL;
+    UNICODE_STRING uniParentPath;
+    ULONG ulFileAttribs = 0;
 
     if( *Length >= sizeof( FILE_STANDARD_INFORMATION))
     {
 
+        pFcb = (AFSFcb *)pIrpSp->FileObject->FsContext;
         pCcb = (AFSCcb *)pIrpSp->FileObject->FsContext2;
 
         RtlZeroMemory( Buffer,
@@ -808,14 +875,51 @@ AFSQueryStandardInfo( IN PIRP Irp,
         Buffer->NumberOfLinks = 1;
         Buffer->DeletePending = BooleanFlagOn( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
 
-        RtlZeroMemory( &stFileInformation,
-                       sizeof( AFSFileInfoCB));
-
         Buffer->AllocationSize.QuadPart = (ULONGLONG)((DirectoryCB->ObjectInformation->AllocationSize.QuadPart/PAGE_SIZE) + 1) * PAGE_SIZE;
 
         Buffer->EndOfFile = DirectoryCB->ObjectInformation->EndOfFile;
 
-        Buffer->Directory = BooleanFlagOn( DirectoryCB->ObjectInformation->FileAttributes, FILE_ATTRIBUTE_DIRECTORY);
+        ulFileAttribs = DirectoryCB->ObjectInformation->FileAttributes;
+
+        if( DirectoryCB->ObjectInformation->FileType == AFS_FILE_TYPE_SYMLINK)
+        {
+
+            pParentDirectoryCB = AFSGetParentEntry( pCcb->NameArray);
+
+            AFSRetrieveParentPath( &pCcb->FullFileName,
+                                   &uniParentPath);
+
+            RtlZeroMemory( &stFileInfo,
+                           sizeof( AFSFileInfoCB));
+
+            //
+            // Can't hold the Fcb while evaluating the path, leads to lock inversion
+            //
+
+            AFSReleaseResource( &pFcb->NPFcb->Resource);
+
+            if( NT_SUCCESS( AFSRetrieveFileAttributes( pParentDirectoryCB,
+                                                       DirectoryCB,
+                                                       &uniParentPath,
+                                                       NULL,
+                                                       &stFileInfo)))
+            {
+                ulFileAttribs = stFileInfo.FileAttributes;
+            }
+
+            AFSAcquireShared( &pFcb->NPFcb->Resource,
+                              TRUE);
+        }
+
+        AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+                      AFS_TRACE_LEVEL_VERBOSE_2,
+                      "AFSQueryStandardInfo %wZ Type 0x%x Attrib 0x%x -> 0x%x\n",
+                      &pCcb->DirectoryCB->NameInformation.FileName,
+                      pCcb->DirectoryCB->ObjectInformation->FileType,
+                      pCcb->DirectoryCB->ObjectInformation->FileAttributes,
+                      ulFileAttribs);
+
+        Buffer->Directory = BooleanFlagOn( ulFileAttribs, FILE_ATTRIBUTE_DIRECTORY);
 
         *Length -= sizeof( FILE_STANDARD_INFORMATION);
     }
@@ -1240,6 +1344,13 @@ AFSQueryNetworkInfo( IN PIRP Irp,
 
     NTSTATUS ntStatus = STATUS_SUCCESS;
     AFSDeviceExt *pDeviceExt = (AFSDeviceExt *)AFSRDRDeviceObject->DeviceExtension;
+    AFSFcb *pFcb = NULL;
+    AFSCcb *pCcb = NULL;
+    PIO_STACK_LOCATION pIrpSp = IoGetCurrentIrpStackLocation( Irp);
+    AFSFileInfoCB stFileInfo;
+    AFSDirectoryCB *pParentDirectoryCB = NULL;
+    UNICODE_STRING uniParentPath;
+    ULONG ulFileAttribs = 0;
 
     RtlZeroMemory( Buffer,
                    *Length);
@@ -1247,6 +1358,51 @@ AFSQueryNetworkInfo( IN PIRP Irp,
     if( *Length >= sizeof( FILE_NETWORK_OPEN_INFORMATION))
     {
 
+        ulFileAttribs = DirectoryCB->ObjectInformation->FileAttributes;
+
+        pFcb = (AFSFcb *)pIrpSp->FileObject->FsContext;
+        pCcb = (AFSCcb *)pIrpSp->FileObject->FsContext2;
+
+        if( DirectoryCB->ObjectInformation->FileType == AFS_FILE_TYPE_SYMLINK)
+        {
+
+            pParentDirectoryCB = AFSGetParentEntry( pCcb->NameArray);
+
+            AFSRetrieveParentPath( &pCcb->FullFileName,
+                                   &uniParentPath);
+
+            RtlZeroMemory( &stFileInfo,
+                           sizeof( AFSFileInfoCB));
+
+            //
+            // Can't hold the Fcb while evaluating the path, leads to lock inversion
+            //
+
+            AFSReleaseResource( &pFcb->NPFcb->Resource);
+
+            if( NT_SUCCESS( AFSRetrieveFileAttributes( pParentDirectoryCB,
+                                                       DirectoryCB,
+                                                       &uniParentPath,
+                                                       NULL,
+                                                       &stFileInfo)))
+            {
+                ulFileAttribs = stFileInfo.FileAttributes;
+
+                ulFileAttribs |= FILE_ATTRIBUTE_REPARSE_POINT;
+            }
+
+            AFSAcquireShared( &pFcb->NPFcb->Resource,
+                              TRUE);
+        }
+
+        AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+                      AFS_TRACE_LEVEL_VERBOSE_2,
+                      "AFSQueryNetworkInfo %wZ Type 0x%x Attrib 0x%x -> 0x%x\n",
+                      &pCcb->DirectoryCB->NameInformation.FileName,
+                      pCcb->DirectoryCB->ObjectInformation->FileType,
+                      pCcb->DirectoryCB->ObjectInformation->FileAttributes,
+                      ulFileAttribs);
+
         Buffer->CreationTime.QuadPart = DirectoryCB->ObjectInformation->CreationTime.QuadPart;
         Buffer->LastAccessTime.QuadPart = DirectoryCB->ObjectInformation->LastAccessTime.QuadPart;
         Buffer->LastWriteTime.QuadPart = DirectoryCB->ObjectInformation->LastWriteTime.QuadPart;
@@ -1255,7 +1411,7 @@ AFSQueryNetworkInfo( IN PIRP Irp,
         Buffer->AllocationSize.QuadPart = DirectoryCB->ObjectInformation->AllocationSize.QuadPart;
         Buffer->EndOfFile.QuadPart = DirectoryCB->ObjectInformation->EndOfFile.QuadPart;
 
-        Buffer->FileAttributes = DirectoryCB->ObjectInformation->FileAttributes;
+        Buffer->FileAttributes = ulFileAttribs;
 
         if( DirectoryCB->NameInformation.FileName.Buffer[ 0] == L'.' &&
             BooleanFlagOn( pDeviceExt->DeviceFlags, AFS_DEVICE_FLAG_HIDE_DOT_NAMES))
@@ -1364,6 +1520,13 @@ AFSQueryAttribTagInfo( IN PIRP Irp,
     NTSTATUS ntStatus = STATUS_BUFFER_TOO_SMALL;
     ULONG ulCopyLength = 0;
     AFSDeviceExt *pDeviceExt = (AFSDeviceExt *)AFSRDRDeviceObject->DeviceExtension;
+    AFSFcb *pFcb = NULL;
+    AFSCcb *pCcb = NULL;
+    PIO_STACK_LOCATION pIrpSp = IoGetCurrentIrpStackLocation( Irp);
+    AFSFileInfoCB stFileInfo;
+    AFSDirectoryCB *pParentDirectoryCB = NULL;
+    UNICODE_STRING uniParentPath;
+    ULONG ulFileAttribs = 0;
 
     if( *Length >= sizeof( FILE_ATTRIBUTE_TAG_INFORMATION))
     {
@@ -1371,7 +1534,52 @@ AFSQueryAttribTagInfo( IN PIRP Irp,
         RtlZeroMemory( Buffer,
                        *Length);
 
-        Buffer->FileAttributes = DirectoryCB->ObjectInformation->FileAttributes;
+        ulFileAttribs = DirectoryCB->ObjectInformation->FileAttributes;
+
+        pFcb = (AFSFcb *)pIrpSp->FileObject->FsContext;
+        pCcb = (AFSCcb *)pIrpSp->FileObject->FsContext2;
+
+        if( DirectoryCB->ObjectInformation->FileType == AFS_FILE_TYPE_SYMLINK)
+        {
+
+            pParentDirectoryCB = AFSGetParentEntry( pCcb->NameArray);
+
+            AFSRetrieveParentPath( &pCcb->FullFileName,
+                                   &uniParentPath);
+
+            RtlZeroMemory( &stFileInfo,
+                           sizeof( AFSFileInfoCB));
+
+            //
+            // Can't hold the Fcb while evaluating the path, leads to lock inversion
+            //
+
+            AFSReleaseResource( &pFcb->NPFcb->Resource);
+
+            if( NT_SUCCESS( AFSRetrieveFileAttributes( pParentDirectoryCB,
+                                                       DirectoryCB,
+                                                       &uniParentPath,
+                                                       NULL,
+                                                       &stFileInfo)))
+            {
+                ulFileAttribs = stFileInfo.FileAttributes;
+
+                ulFileAttribs |= FILE_ATTRIBUTE_REPARSE_POINT;
+            }
+
+            AFSAcquireShared( &pFcb->NPFcb->Resource,
+                              TRUE);
+        }
+
+        AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+                      AFS_TRACE_LEVEL_VERBOSE_2,
+                      "AFSAttribTagInfo %wZ Type 0x%x Attrib 0x%x -> 0x%x\n",
+                      &pCcb->DirectoryCB->NameInformation.FileName,
+                      pCcb->DirectoryCB->ObjectInformation->FileType,
+                      pCcb->DirectoryCB->ObjectInformation->FileAttributes,
+                      ulFileAttribs);
+
+        Buffer->FileAttributes = ulFileAttribs;
 
         if( DirectoryCB->NameInformation.FileName.Buffer[ 0] == L'.' &&
             BooleanFlagOn( pDeviceExt->DeviceFlags, AFS_DEVICE_FLAG_HIDE_DOT_NAMES))
@@ -1440,6 +1648,105 @@ AFSQueryRemoteProtocolInfo( IN PIRP Irp,
 }
 
 NTSTATUS
+AFSQueryPhysicalNameInfo( IN PIRP Irp,
+                          IN AFSDirectoryCB *DirectoryCB,
+                          IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
+                          IN OUT PLONG Length)
+{
+
+    NTSTATUS ntStatus = STATUS_SUCCESS;
+    ULONG ulCopyLength = 0;
+    ULONG cchCopied = 0;
+    AFSFcb *pFcb = NULL;
+    AFSCcb *pCcb = NULL;
+    IO_STACK_LOCATION *pIrpSp = IoGetCurrentIrpStackLocation( Irp);
+    BOOLEAN bAddLeadingSlash = FALSE;
+    USHORT usFullNameLength = 0;
+
+    pFcb = (AFSFcb *)pIrpSp->FileObject->FsContext;
+
+    pCcb = (AFSCcb *)pIrpSp->FileObject->FsContext2;
+
+    if( *Length >= FIELD_OFFSET( FILE_NETWORK_PHYSICAL_NAME_INFORMATION, FileName))
+    {
+
+        RtlZeroMemory( Buffer,
+                       *Length);
+
+        if( pCcb->FullFileName.Length == 0 ||
+            pCcb->FullFileName.Buffer[ 0] != L'\\')
+        {
+            bAddLeadingSlash = TRUE;
+        }
+
+        usFullNameLength = pCcb->FullFileName.Length;
+
+        if( bAddLeadingSlash)
+        {
+            usFullNameLength += sizeof( WCHAR);
+        }
+
+        if( *Length >= (LONG)(FIELD_OFFSET( FILE_NETWORK_PHYSICAL_NAME_INFORMATION, FileName) + (LONG)usFullNameLength))
+        {
+            ulCopyLength = (LONG)usFullNameLength;
+        }
+        else
+        {
+
+            ulCopyLength = *Length - FIELD_OFFSET( FILE_NETWORK_PHYSICAL_NAME_INFORMATION, FileName);
+
+            ntStatus = STATUS_BUFFER_OVERFLOW;
+        }
+
+        Buffer->FileNameLength = (ULONG)usFullNameLength;
+
+        *Length -= FIELD_OFFSET( FILE_NETWORK_PHYSICAL_NAME_INFORMATION, FileName);
+
+        if( ulCopyLength > 0)
+        {
+
+            if( bAddLeadingSlash)
+            {
+
+                Buffer->FileName[ cchCopied] = L'\\';
+
+                ulCopyLength -= sizeof( WCHAR);
+                *Length -= sizeof( WCHAR);
+                cchCopied++;
+            }
+
+            if( ulCopyLength >= pCcb->FullFileName.Length)
+            {
+
+                RtlCopyMemory( &Buffer->FileName[ cchCopied],
+                               pCcb->FullFileName.Buffer,
+                               pCcb->FullFileName.Length);
+
+                ulCopyLength -= pCcb->FullFileName.Length;
+                *Length -= pCcb->FullFileName.Length;
+                cchCopied += pCcb->FullFileName.Length/sizeof( WCHAR);
+            }
+            else
+            {
+
+                RtlCopyMemory( &Buffer->FileName[ cchCopied],
+                               pCcb->FullFileName.Buffer,
+                               ulCopyLength);
+
+                *Length -= ulCopyLength;
+            }
+        }
+    }
+    else
+    {
+
+        ntStatus = STATUS_BUFFER_TOO_SMALL;
+    }
+
+    return ntStatus;
+}
+
+NTSTATUS
 AFSSetBasicInfo( IN PIRP Irp,
                  IN AFSDirectoryCB *DirectoryCB)
 {
@@ -1749,10 +2056,10 @@ AFSSetRenameInfo( IN PIRP Irp)
     ULONG ulNotificationAction = 0, ulNotifyFilter = 0;
     UNICODE_STRING uniFullTargetPath;
     BOOLEAN bCommonParent = FALSE;
-    ULONG oldFileIndex;
     BOOLEAN bReleaseVolumeLock = FALSE;
     BOOLEAN bReleaseTargetDirLock = FALSE;
     BOOLEAN bReleaseSourceDirLock = FALSE;
+    PERESOURCE  pSourceDirLock = NULL;
 
     __Enter
     {
@@ -1872,10 +2179,6 @@ AFSSetRenameInfo( IN PIRP Irp)
             try_return( ntStatus = STATUS_NOT_SAME_DEVICE);
         }
 
-        //
-        // If the target exists be sure the ReplaceIfExists flag is set
-        //
-
         AFSAcquireExcl( pTargetParentObject->VolumeCB->VolumeLock,
                         TRUE);
 
@@ -1895,6 +2198,8 @@ AFSSetRenameInfo( IN PIRP Irp)
                             TRUE);
 
             bReleaseSourceDirLock = TRUE;
+
+            pSourceDirLock = pSrcFcb->ObjectInformation->ParentObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock;
         }
 
         AFSLocateCaseSensitiveDirEntry( pTargetParentObject->Specific.Directory.DirectoryNodeHdr.CaseSensitiveTreeHead,
@@ -1971,8 +2276,8 @@ AFSSetRenameInfo( IN PIRP Irp)
         else
         {
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
-                          AFS_TRACE_LEVEL_ERROR,
-                          "AFSSetRenameInfo Target Target does NOT exist, normal rename\n");
+                          AFS_TRACE_LEVEL_VERBOSE,
+                          "AFSSetRenameInfo Target does NOT exist, normal rename\n");
         }
 
         //
@@ -2019,21 +2324,6 @@ AFSSetRenameInfo( IN PIRP Irp)
                                     pSrcCcb->DirectoryCB,
                                     !bCommonParent);
 
-        oldFileIndex = pSrcCcb->DirectoryCB->FileIndex;
-
-        if( !bCommonParent)
-        {
-
-            //
-            // We always need to update the FileIndex since this entry will be put at the 'end'
-            // of the enumeraiton list. If we don't it will cause recursion ... We do this
-            // here to cover any failures which might occur below
-            //
-
-            pSrcCcb->DirectoryCB->FileIndex =
-                            (ULONG)InterlockedIncrement( &pTargetDcb->ObjectInformation->ParentObjectInformation->Specific.Directory.DirectoryNodeHdr.ContentIndex);
-        }
-
         //
         // OK, this is a simple rename. Issue the rename
         // request to the service.
@@ -2053,7 +2343,6 @@ AFSSetRenameInfo( IN PIRP Irp)
             // Attempt to re-insert the directory entry
             //
 
-            pSrcCcb->DirectoryCB->FileIndex = oldFileIndex;
             AFSInsertDirectoryNode( pSrcFcb->ObjectInformation->ParentObjectInformation,
                                     pSrcCcb->DirectoryCB,
                                     !bCommonParent);
@@ -2114,7 +2403,6 @@ AFSSetRenameInfo( IN PIRP Irp)
             // Attempt to re-insert the directory entry
             //
 
-            pSrcCcb->DirectoryCB->FileIndex = oldFileIndex;
             AFSInsertDirectoryNode( pSrcFcb->ObjectInformation->ParentObjectInformation,
                                     pSrcCcb->DirectoryCB,
                                     !bCommonParent);
@@ -2353,7 +2641,7 @@ try_exit:
 
         if( bReleaseSourceDirLock)
         {
-            AFSReleaseResource( pSrcFcb->ObjectInformation->ParentObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock);
+            AFSReleaseResource( pSourceDirLock);
         }
     }
 
@@ -2848,6 +3136,10 @@ AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
             case FileBasicInformation:
             {
 
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_VERBOSE,
+                              "AFSProcessPIOCtlQueryInfo (FileBasicInformation)\n");
+
                 if ( *Length >= sizeof( FILE_BASIC_INFORMATION))
                 {
                     PFILE_BASIC_INFORMATION pBasic = (PFILE_BASIC_INFORMATION)Irp->AssociatedIrp.SystemBuffer;
@@ -2862,7 +3154,7 @@ AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
                 }
                 else
                 {
-                    ntStatus = STATUS_BUFFER_OVERFLOW;
+                    ntStatus = STATUS_BUFFER_TOO_SMALL;
                 }
 
                 break;
@@ -2871,21 +3163,25 @@ AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
             case FileStandardInformation:
             {
 
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_VERBOSE,
+                              "AFSProcessPIOCtlQueryInfo (FileStandardInformation)\n");
+
                 if ( *Length >= sizeof( FILE_STANDARD_INFORMATION))
                 {
                     PFILE_STANDARD_INFORMATION pStandard = (PFILE_STANDARD_INFORMATION)Irp->AssociatedIrp.SystemBuffer;
 
                     pStandard->NumberOfLinks = 1;
                     pStandard->DeletePending = 0;
-                    pStandard->AllocationSize.QuadPart = 4096;
-                    pStandard->EndOfFile.QuadPart = 4096;
+                    pStandard->AllocationSize.QuadPart = 0;
+                    pStandard->EndOfFile.QuadPart = 0;
                     pStandard->Directory = 0;
 
                     *Length -= sizeof( FILE_STANDARD_INFORMATION);
                 }
                 else
                 {
-                    ntStatus = STATUS_BUFFER_OVERFLOW;
+                    ntStatus = STATUS_BUFFER_TOO_SMALL;
                 }
 
                 break;
@@ -2901,6 +3197,10 @@ AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
                 PFILE_NAME_INFORMATION pNameInfo = (PFILE_NAME_INFORMATION)Irp->AssociatedIrp.SystemBuffer;
                 UNICODE_STRING uniName;
 
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_VERBOSE,
+                              "AFSProcessPIOCtlQueryInfo (FileNameInformation)\n");
+
                 pFcb = (AFSFcb *)pIrpSp->FileObject->FsContext;
                 pCcb = (AFSCcb *)pIrpSp->FileObject->FsContext2;
 
@@ -2992,6 +3292,10 @@ AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
 
                 PFILE_INTERNAL_INFORMATION pInternalInfo = (PFILE_INTERNAL_INFORMATION)Irp->AssociatedIrp.SystemBuffer;
 
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_VERBOSE,
+                              "AFSProcessPIOCtlQueryInfo (FileInternalInformation)\n");
+
                 if( *Length >= sizeof( FILE_INTERNAL_INFORMATION))
                 {
 
@@ -3010,6 +3314,105 @@ AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
                 break;
             }
 
+            case FileAllInformation:
+            {
+                ntStatus = STATUS_INVALID_PARAMETER;
+
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_WARNING,
+                              "AFSProcessPIOCtlQueryInfo (FileAllInformation) Not Implemented\n");
+
+                break;
+            }
+
+            case FileEaInformation:
+            {
+                ntStatus = STATUS_INVALID_PARAMETER;
+
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_WARNING,
+                              "AFSProcessPIOCtlQueryInfo (FileEaInformation) Not Implemented\n");
+
+                break;
+            }
+
+            case FilePositionInformation:
+            {
+                ntStatus = STATUS_INVALID_PARAMETER;
+
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_WARNING,
+                              "AFSProcessPIOCtlQueryInfo (FilePositionInformation) Not Implemented\n");
+
+                break;
+            }
+
+            case FileAlternateNameInformation:
+            {
+                ntStatus = STATUS_INVALID_PARAMETER;
+
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_WARNING,
+                              "AFSProcessPIOCtlQueryInfo (FileAlternateNameInformation) Not Implemented\n");
+
+                break;
+            }
+
+            case FileNetworkOpenInformation:
+            {
+                ntStatus = STATUS_INVALID_PARAMETER;
+
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_WARNING,
+                              "AFSProcessPIOCtlQueryInfo (FileNetworkOpenInformation) Not Implemented\n");
+
+                break;
+            }
+
+            case FileStreamInformation:
+            {
+                ntStatus = STATUS_INVALID_PARAMETER;
+
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_WARNING,
+                              "AFSProcessPIOCtlQueryInfo (FileStreamInformation) Not Implemented\n");
+
+                break;
+            }
+
+            case FileAttributeTagInformation:
+            {
+                ntStatus = STATUS_INVALID_PARAMETER;
+
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_WARNING,
+                              "AFSProcessPIOCtlQueryInfo (FileAttributeTagInformation) Not Implemented\n");
+
+                break;
+            }
+
+            case FileRemoteProtocolInformation:
+            {
+                ntStatus = STATUS_INVALID_PARAMETER;
+
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_WARNING,
+                              "AFSProcessPIOCtlQueryInfo (FileRemoteProtocolInformation) Not Implemented\n");
+
+                break;
+            }
+
+            case FileNetworkPhysicalNameInformation:
+            {
+                ntStatus = STATUS_INVALID_PARAMETER;
+
+                AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                              AFS_TRACE_LEVEL_WARNING,
+                              "AFSProcessPIOCtlQueryInfo (FileNetworkPhysicalNameInformation) Not Implemented\n");
+
+                break;
+            }
+
             default:
             {
                 ntStatus = STATUS_INVALID_PARAMETER;
@@ -3024,6 +3427,11 @@ AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
         }
     }
 
+    AFSDbgLogMsg( AFS_SUBSYSTEM_PIOCTL_PROCESSING,
+                  AFS_TRACE_LEVEL_VERBOSE,
+                  "AFSProcessPIOCtlQueryInfo ntStatus %08lX\n",
+                  ntStatus);
+
     return ntStatus;
 }