Index: drivers/filesystems/fastfat/create.c
===================================================================
--- drivers/filesystems/fastfat/create.c	(revision 71301)
+++ drivers/filesystems/fastfat/create.c	(working copy)
@@ -229,11 +229,7 @@
     {
         /* if there is no '*?' in the search name, than look first for an existing fcb */
         RtlCopyUnicodeString(&PathNameU, &Parent->PathNameU);
-        if (!vfatFCBIsRoot(Parent))
-        {
-            PathNameU.Buffer[PathNameU.Length / sizeof(WCHAR)] = L'\\';
-            PathNameU.Length += sizeof(WCHAR);
-        }
+        vfatAddBackslash(&PathNameU);
         RtlAppendUnicodeStringToString(&PathNameU, FileToFindU);
         PathNameU.Buffer[PathNameU.Length / sizeof(WCHAR)] = 0;
         rcFcb = vfatGrabFCBFromTable(DeviceExt, &PathNameU);
@@ -316,11 +312,7 @@
             if (WildCard)
             {
                 RtlCopyUnicodeString(&PathNameU, &Parent->PathNameU);
-                if (!vfatFCBIsRoot(Parent))
-                {
-                    PathNameU.Buffer[PathNameU.Length / sizeof(WCHAR)] = L'\\';
-                    PathNameU.Length += sizeof(WCHAR);
-                }
+                vfatAddBackslash(&PathNameU);
                 RtlAppendUnicodeStringToString(&PathNameU, &DirContext->LongNameU);
                 PathNameU.Buffer[PathNameU.Length / sizeof(WCHAR)] = 0;
                 rcFcb = vfatGrabFCBFromTable(DeviceExt, &PathNameU);
Index: drivers/filesystems/fastfat/fcb.c
===================================================================
--- drivers/filesystems/fastfat/fcb.c	(revision 71301)
+++ drivers/filesystems/fastfat/fcb.c	(working copy)
@@ -896,12 +896,8 @@
     {
         /* Make absolute path */
         RtlCopyUnicodeString(&FileNameU, &parentFCB->PathNameU);
+        vfatAddBackslash(&FileNameU);
         curr = FileNameU.Buffer + FileNameU.Length / sizeof(WCHAR) - 1;
-        if (*curr != L'\\')
-        {
-            RtlAppendUnicodeToString(&FileNameU, L"\\");
-            curr++;
-        }
         ASSERT(*curr == L'\\');
         RtlAppendUnicodeStringToString(&FileNameU, pFileNameU);
 
Index: drivers/filesystems/fastfat/finfo.c
===================================================================
--- drivers/filesystems/fastfat/finfo.c	(revision 71301)
+++ drivers/filesystems/fastfat/finfo.c	(working copy)
@@ -636,8 +636,7 @@
         {
             /* Here, copy first absolute and then append relative */ 
             RtlCopyUnicodeString(&NewName, &RootFCB->PathNameU);
-            NewName.Buffer[NewName.Length / sizeof(WCHAR)] = L'\\';
-            NewName.Length += sizeof(WCHAR);
+            vfatAddBackslash(&NewName);
             RtlAppendUnicodeStringToString(&NewName, &RenameInfoString);
         }
         else if (RenameInfo->FileName[0] != L'\\')
@@ -644,8 +643,7 @@
         {
             /* Here, copy first work directory and then append filename */
             RtlCopyUnicodeString(&NewName, &FCB->DirNameU);
-            NewName.Buffer[NewName.Length / sizeof(WCHAR)] = L'\\';
-            NewName.Length += sizeof(WCHAR);
+            vfatAddBackslash(&NewName);
             RtlAppendUnicodeStringToString(&NewName, &RenameInfoString);
         }
         else if (TargetFileObject != NULL)
@@ -652,8 +650,7 @@
         {
             /* Here, copy first path name and then append filename */
             RtlCopyUnicodeString(&NewName, &((PVFATFCB)TargetFileObject->FsContext)->PathNameU);
-            NewName.Buffer[NewName.Length / sizeof(WCHAR)] = L'\\';
-            NewName.Length += sizeof(WCHAR);
+            vfatAddBackslash(&NewName);
             RtlAppendUnicodeStringToString(&NewName, &RenameInfoString);
         }
         else
@@ -693,8 +690,7 @@
         }
 
         RtlCopyUnicodeString(&NewName, &((PVFATFCB)TargetFileObject->FsContext)->PathNameU);
-        NewName.Buffer[NewName.Length / sizeof(WCHAR)] = L'\\';
-        NewName.Length += sizeof(WCHAR);
+        vfatAddBackslash(&NewName);
         RtlAppendUnicodeStringToString(&NewName, &TargetFileObject->FileName);
     }
 
Index: drivers/filesystems/fastfat/string.c
===================================================================
--- drivers/filesystems/fastfat/string.c	(revision 71301)
+++ drivers/filesystems/fastfat/string.c	(working copy)
@@ -24,3 +24,15 @@
 {
     return wcschr(long_illegals, c) ? TRUE : FALSE;
 }
+
+VOID
+vfatAddBackslash(
+    PUNICODE_STRING PathU)
+{
+    if (PathU->Length > 0 && PathU->Buffer[PathU->Length / sizeof(WCHAR) - 1] != L'\\')
+    {
+        PathU->Buffer[PathU->Length / sizeof(WCHAR)] = L'\\';
+        PathU->Length += sizeof(WCHAR);
+    }
+}
+
Index: drivers/filesystems/fastfat/vfat.h
===================================================================
--- drivers/filesystems/fastfat/vfat.h	(revision 71301)
+++ drivers/filesystems/fastfat/vfat.h	(working copy)
@@ -1013,6 +1013,10 @@
     PWSTR s1,
     PWSTR s2);
 
+VOID
+vfatAddBackslash(
+    PUNICODE_STRING PathU);
+
 /* volume.c */
 
 NTSTATUS
