Sync with trunk (r48545)
[reactos.git] / drivers / filesystems / fastfat / create.c
index d3898fd..f643104 100644 (file)
@@ -466,7 +466,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
 
        /* This a open operation for the volume itself */
        if (FileObject->FileName.Length == 0 &&
-               FileObject->RelatedFileObject == NULL)
+               (FileObject->RelatedFileObject == NULL || FileObject->RelatedFileObject->FsContext2 != NULL))
        {
                if (RequestedDisposition == FILE_CREATE ||
                        RequestedDisposition == FILE_OVERWRITE_IF ||
@@ -474,10 +474,13 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
                {
                        return(STATUS_ACCESS_DENIED);
                }
+#if 0
+        /* In spite of what is shown in WDK, it seems that Windows FAT driver doesn't perform that test */
                if (RequestedOptions & FILE_DIRECTORY_FILE)
                {
                        return(STATUS_NOT_A_DIRECTORY);
                }
+#endif
                pFcb = DeviceExt->VolumeFcb;
                pCcb = ExAllocateFromNPagedLookasideList(&VfatGlobalData->CcbLookasideList);
                if (pCcb == NULL)
@@ -522,7 +525,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
                        return(STATUS_OBJECT_NAME_INVALID);
                }
        }
-        if (FileObject->RelatedFileObject && PathNameU.Buffer[0] == L'\\')
+        if (FileObject->RelatedFileObject && PathNameU.Length >= sizeof(WCHAR) && PathNameU.Buffer[0] == L'\\')
         {
             return(STATUS_OBJECT_NAME_INVALID);
         }