- Format code of InstallFatBootcodeToPartition(), changing from tabs+spaces mix to...
authorAleksey Bragin <aleksey@reactos.org>
Wed, 4 Oct 2006 12:26:12 +0000 (12:26 +0000)
committerAleksey Bragin <aleksey@reactos.org>
Wed, 4 Oct 2006 12:26:12 +0000 (12:26 +0000)
- Change installation logic when installing to a NTLDR's boot.ini: Firstly freeldr.ini is checked for existence, and either created or updated, then boot.ini is checked for having a proper entry, and if needed - entry is added. Fixes related bugs (having more and more ReactOS entries, no entry added if freeldr.ini already exists in the root folder)

svn path=/trunk/; revision=24392

reactos/base/setup/usetup/bootsup.c

index 4e5b0d7..ddf5e20 100644 (file)
@@ -1751,311 +1751,311 @@ InstallFatBootcodeToPartition(PUNICODE_STRING SystemRootPath,
                              PUNICODE_STRING DestinationArcPath,
                              UCHAR PartitionType)
 {
-  WCHAR SrcPath[MAX_PATH];
-  WCHAR DstPath[MAX_PATH];
-  NTSTATUS Status;
-
-  /* FAT or FAT32 partition */
-  DPRINT1("System path: '%wZ'\n", SystemRootPath);
-
-  if (DoesFileExist(SystemRootPath->Buffer, L"ntldr") == TRUE ||
-      DoesFileExist(SystemRootPath->Buffer, L"boot.ini") == TRUE)
-    {
-      /* Search root directory for 'ntldr' and 'boot.ini'. */
-      DPRINT("Found Microsoft Windows NT/2000/XP boot loader\n");
-
-      /* Copy FreeLoader to the boot partition */
-      wcscpy(SrcPath, SourceRootPath->Buffer);
-      wcscat(SrcPath, L"\\loader\\freeldr.sys");
-      wcscpy(DstPath, SystemRootPath->Buffer);
-      wcscat(DstPath, L"\\freeldr.sys");
-
-      DPRINT("Copy: %S ==> %S\n", SrcPath, DstPath);
-      Status = SetupCopyFile(SrcPath, DstPath);
-      if (!NT_SUCCESS(Status))
-      {
-       DPRINT1("SetupCopyFile() failed (Status %lx)\n", Status);
-       return Status;
-      }
-
-      /* Create or update freeldr.ini */
-      if (DoesFileExist(SystemRootPath->Buffer, L"freeldr.ini") == FALSE)
-      {
-       /* Create new 'freeldr.ini' */
-       DPRINT1("Create new 'freeldr.ini'\n");
-       wcscpy(DstPath, SystemRootPath->Buffer);
-       wcscat(DstPath, L"\\freeldr.ini");
-
-       Status = CreateFreeLoaderIniForReactos(DstPath,
-                                              DestinationArcPath->Buffer);
-       if (!NT_SUCCESS(Status))
-       {
-         DPRINT1("CreateFreeLoaderIniForReactos() failed (Status %lx)\n", Status);
-         return Status;
-       }
-
-       /* Install new bootcode */
-       if (PartitionType == PARTITION_FAT32 ||
-           PartitionType == PARTITION_FAT32_XINT13)
-       {
-         /* Install FAT32 bootcode */
-         wcscpy(SrcPath, SourceRootPath->Buffer);
-         wcscat(SrcPath, L"\\loader\\fat32.bin");
-         wcscpy(DstPath, SystemRootPath->Buffer);
-         wcscat(DstPath, L"\\bootsect.ros");
-
-         DPRINT1("Install FAT32 bootcode: %S ==> %S\n", SrcPath, DstPath);
-         Status = InstallFat32BootCodeToFile(SrcPath,
-                                             DstPath,
-                                             SystemRootPath->Buffer);
-         if (!NT_SUCCESS(Status))
-         {
-           DPRINT1("InstallFat32BootCodeToFile() failed (Status %lx)\n", Status);
-           return Status;
-         }
-       }
-       else
-       {
-         /* Install FAT16 bootcode */
-         wcscpy(SrcPath, SourceRootPath->Buffer);
-         wcscat(SrcPath, L"\\loader\\fat.bin");
-         wcscpy(DstPath, SystemRootPath->Buffer);
-         wcscat(DstPath, L"\\bootsect.ros");
-
-         DPRINT1("Install FAT bootcode: %S ==> %S\n", SrcPath, DstPath);
-         Status = InstallFat16BootCodeToFile(SrcPath,
-                                             DstPath,
-                                             SystemRootPath->Buffer);
-         if (!NT_SUCCESS(Status))
-         {
-           DPRINT1("InstallFat16BootCodeToFile() failed (Status %lx)\n", Status);
-           return Status;
-         }
-       }
-
-       /* Update 'boot.ini' */
-       wcscpy(DstPath, SystemRootPath->Buffer);
-       wcscat(DstPath, L"\\boot.ini");
-
-       DPRINT1("Update 'boot.ini': %S\n", DstPath);
-       Status = UpdateBootIni(DstPath,
-                              L"C:\\bootsect.ros",
-                              L"\"ReactOS\"");
-       if (!NT_SUCCESS(Status))
-       {
-         DPRINT1("UpdateBootIni() failed (Status %lx)\n", Status);
-         return Status;
-       }
-      }
-      else
-      {
-       /* Update existing 'freeldr.ini' */
-       DPRINT1("Update existing 'freeldr.ini'\n");
-       wcscpy(DstPath, SystemRootPath->Buffer);
-       wcscat(DstPath, L"\\freeldr.ini");
-
-       Status = UpdateFreeLoaderIni(DstPath,
-                                    DestinationArcPath->Buffer);
-       if (!NT_SUCCESS(Status))
-       {
-         DPRINT1("UpdateFreeLoaderIni() failed (Status %lx)\n", Status);
-         return Status;
-       }
-      }
-    }
-    else if (DoesFileExist(SystemRootPath->Buffer, L"io.sys") == TRUE ||
-            DoesFileExist(SystemRootPath->Buffer, L"msdos.sys") == TRUE)
-    {
-      /* Search for root directory for 'io.sys' and 'msdos.sys'. */
-      DPRINT1("Found Microsoft DOS or Windows 9x boot loader\n");
-
-      /* Copy FreeLoader to the boot partition */
-      wcscpy(SrcPath, SourceRootPath->Buffer);
-      wcscat(SrcPath, L"\\loader\\freeldr.sys");
-      wcscpy(DstPath, SystemRootPath->Buffer);
-      wcscat(DstPath, L"\\freeldr.sys");
-
-      DPRINT("Copy: %S ==> %S\n", SrcPath, DstPath);
-      Status = SetupCopyFile(SrcPath, DstPath);
-      if (!NT_SUCCESS(Status))
-      {
-       DPRINT1("SetupCopyFile() failed (Status %lx)\n", Status);
-       return Status;
-      }
-
-      /* Create or update 'freeldr.ini' */
-      if (DoesFileExist(SystemRootPath->Buffer, L"freeldr.ini") == FALSE)
-      {
-       /* Create new 'freeldr.ini' */
-       DPRINT1("Create new 'freeldr.ini'\n");
-       wcscpy(DstPath, SystemRootPath->Buffer);
-       wcscat(DstPath, L"\\freeldr.ini");
-
-       Status = CreateFreeLoaderIniForDos(DstPath,
-                                          DestinationArcPath->Buffer);
-       if (!NT_SUCCESS(Status))
-       {
-         DPRINT1("CreateFreeLoaderIniForDos() failed (Status %lx)\n", Status);
-         return Status;
-       }
+       WCHAR SrcPath[MAX_PATH];
+       WCHAR DstPath[MAX_PATH];
+       NTSTATUS Status;
 
-       /* Save current bootsector as 'BOOTSECT.DOS' */
-       wcscpy(SrcPath, SystemRootPath->Buffer);
-       wcscpy(DstPath, SystemRootPath->Buffer);
-       wcscat(DstPath, L"\\bootsect.dos");
+       /* FAT or FAT32 partition */
+       DPRINT1("System path: '%wZ'\n", SystemRootPath);
 
-       DPRINT1("Save bootsector: %S ==> %S\n", SrcPath, DstPath);
-       Status = SaveCurrentBootSector(SrcPath,
-                                      DstPath);
-       if (!NT_SUCCESS(Status))
+       if (DoesFileExist(SystemRootPath->Buffer, L"ntldr") == TRUE ||
+               DoesFileExist(SystemRootPath->Buffer, L"boot.ini") == TRUE)
        {
-         DPRINT1("SaveCurrentBootSector() failed (Status %lx)\n", Status);
-         return Status;
+               /* Search root directory for 'ntldr' and 'boot.ini'. */
+               DPRINT("Found Microsoft Windows NT/2000/XP boot loader\n");
+
+               /* Copy FreeLoader to the boot partition */
+               wcscpy(SrcPath, SourceRootPath->Buffer);
+               wcscat(SrcPath, L"\\loader\\freeldr.sys");
+               wcscpy(DstPath, SystemRootPath->Buffer);
+               wcscat(DstPath, L"\\freeldr.sys");
+
+               DPRINT("Copy: %S ==> %S\n", SrcPath, DstPath);
+               Status = SetupCopyFile(SrcPath, DstPath);
+               if (!NT_SUCCESS(Status))
+               {
+                       DPRINT1("SetupCopyFile() failed (Status %lx)\n", Status);
+                       return Status;
+               }
+
+               /* Create or update freeldr.ini */
+               if (DoesFileExist(SystemRootPath->Buffer, L"freeldr.ini") == FALSE)
+               {
+                       /* Create new 'freeldr.ini' */
+                       DPRINT1("Create new 'freeldr.ini'\n");
+                       wcscpy(DstPath, SystemRootPath->Buffer);
+                       wcscat(DstPath, L"\\freeldr.ini");
+
+                       Status = CreateFreeLoaderIniForReactos(DstPath,
+                               DestinationArcPath->Buffer);
+                       if (!NT_SUCCESS(Status))
+                       {
+                               DPRINT1("CreateFreeLoaderIniForReactos() failed (Status %lx)\n", Status);
+                               return Status;
+                       }
+
+                       /* Install new bootcode */
+                       if (PartitionType == PARTITION_FAT32 ||
+                               PartitionType == PARTITION_FAT32_XINT13)
+                       {
+                               /* Install FAT32 bootcode */
+                               wcscpy(SrcPath, SourceRootPath->Buffer);
+                               wcscat(SrcPath, L"\\loader\\fat32.bin");
+                               wcscpy(DstPath, SystemRootPath->Buffer);
+                               wcscat(DstPath, L"\\bootsect.ros");
+
+                               DPRINT1("Install FAT32 bootcode: %S ==> %S\n", SrcPath, DstPath);
+                               Status = InstallFat32BootCodeToFile(SrcPath,
+                                       DstPath,
+                                       SystemRootPath->Buffer);
+                               if (!NT_SUCCESS(Status))
+                               {
+                                       DPRINT1("InstallFat32BootCodeToFile() failed (Status %lx)\n", Status);
+                                       return Status;
+                               }
+                       }
+                       else
+                       {
+                               /* Install FAT16 bootcode */
+                               wcscpy(SrcPath, SourceRootPath->Buffer);
+                               wcscat(SrcPath, L"\\loader\\fat.bin");
+                               wcscpy(DstPath, SystemRootPath->Buffer);
+                               wcscat(DstPath, L"\\bootsect.ros");
+
+                               DPRINT1("Install FAT bootcode: %S ==> %S\n", SrcPath, DstPath);
+                               Status = InstallFat16BootCodeToFile(SrcPath,
+                                       DstPath,
+                                       SystemRootPath->Buffer);
+                               if (!NT_SUCCESS(Status))
+                               {
+                                       DPRINT1("InstallFat16BootCodeToFile() failed (Status %lx)\n", Status);
+                                       return Status;
+                               }
+                       }
+               }
+               else
+               {
+                       /* Update existing 'freeldr.ini' */
+                       DPRINT1("Update existing 'freeldr.ini'\n");
+                       wcscpy(DstPath, SystemRootPath->Buffer);
+                       wcscat(DstPath, L"\\freeldr.ini");
+
+                       Status = UpdateFreeLoaderIni(DstPath,
+                               DestinationArcPath->Buffer);
+                       if (!NT_SUCCESS(Status))
+                       {
+                               DPRINT1("UpdateFreeLoaderIni() failed (Status %lx)\n", Status);
+                               return Status;
+                       }
+               }
+
+               /* Update 'boot.ini' */
+               wcscpy(DstPath, SystemRootPath->Buffer);
+               wcscat(DstPath, L"\\boot.ini");
+
+               DPRINT1("Update 'boot.ini': %S\n", DstPath);
+               Status = UpdateBootIni(DstPath,
+                       L"C:\\bootsect.ros",
+                       L"\"ReactOS\"");
+               if (!NT_SUCCESS(Status))
+               {
+                       DPRINT1("UpdateBootIni() failed (Status %lx)\n", Status);
+                       return Status;
+               }
        }
-
-       /* Install new bootsector */
-       if (PartitionType == PARTITION_FAT32 ||
-           PartitionType == PARTITION_FAT32_XINT13)
-       {
-         wcscpy(SrcPath, SourceRootPath->Buffer);
-         wcscat(SrcPath, L"\\loader\\fat32.bin");
-
-         DPRINT1("Install FAT32 bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
-         Status = InstallFat32BootCodeToDisk(SrcPath,
-                                             SystemRootPath->Buffer);
-         if (!NT_SUCCESS(Status))
-         {
-           DPRINT1("InstallFat32BootCodeToDisk() failed (Status %lx)\n", Status);
-           return Status;
-         }
-       }
-       else
-       {
-         wcscpy(SrcPath, SourceRootPath->Buffer);
-         wcscat(SrcPath, L"\\loader\\fat.bin");
-
-         DPRINT1("Install FAT bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
-         Status = InstallFat16BootCodeToDisk(SrcPath,
-                                             SystemRootPath->Buffer);
-         if (!NT_SUCCESS(Status))
-         {
-           DPRINT1("InstallFat16BootCodeToDisk() failed (Status %lx)\n", Status);
-           return Status;
-         }
-       }
-      }
-      else
-      {
-       /* Update existing 'freeldr.ini' */
-       wcscpy(DstPath, SystemRootPath->Buffer);
-       wcscat(DstPath, L"\\freeldr.ini");
-
-       Status = UpdateFreeLoaderIni(DstPath,
-                                    DestinationArcPath->Buffer);
-       if (!NT_SUCCESS(Status))
-       {
-         DPRINT1("UpdateFreeLoaderIni() failed (Status %lx)\n", Status);
-         return Status;
-       }
-      }
-    }
-    else
-    {
-      /* No or unknown boot loader */
-      DPRINT1("No or unknown boot loader found\n");
-
-      /* Copy FreeLoader to the boot partition */
-      wcscpy(SrcPath, SourceRootPath->Buffer);
-      wcscat(SrcPath, L"\\loader\\freeldr.sys");
-      wcscpy(DstPath, SystemRootPath->Buffer);
-      wcscat(DstPath, L"\\freeldr.sys");
-
-      DPRINT1("Copy: %S ==> %S\n", SrcPath, DstPath);
-      Status = SetupCopyFile(SrcPath, DstPath);
-      if (!NT_SUCCESS(Status))
-      {
-       DPRINT1("SetupCopyFile() failed (Status %lx)\n", Status);
-       return Status;
-      }
-
-      /* Create or update 'freeldr.ini' */
-      if (DoesFileExist(SystemRootPath->Buffer, L"freeldr.ini") == FALSE)
-      {
-       /* Create new freeldr.ini */
-       wcscpy(DstPath, SystemRootPath->Buffer);
-       wcscat(DstPath, L"\\freeldr.ini");
-
-       DPRINT1("Copy: %S ==> %S\n", SrcPath, DstPath);
-       Status = CreateFreeLoaderIniForReactos(DstPath,
-                                              DestinationArcPath->Buffer);
-       if (!NT_SUCCESS(Status))
-       {
-         DPRINT1("CreateFreeLoaderIniForReactos() failed (Status %lx)\n", Status);
-         return Status;
-       }
-
-       /* Save current bootsector as 'BOOTSECT.OLD' */
-       wcscpy(SrcPath, SystemRootPath->Buffer);
-       wcscpy(DstPath, SystemRootPath->Buffer);
-       wcscat(DstPath, L"\\bootsect.old");
-
-       DPRINT1("Save bootsector: %S ==> %S\n", SrcPath, DstPath);
-       Status = SaveCurrentBootSector(SrcPath,
-                                      DstPath);
-       if (!NT_SUCCESS(Status))
-       {
-         DPRINT1("SaveCurrentBootSector() failed (Status %lx)\n", Status);
-         return Status;
-       }
-
-       /* Install new bootsector */
-       if (PartitionType == PARTITION_FAT32 ||
-           PartitionType == PARTITION_FAT32_XINT13)
+       else if (DoesFileExist(SystemRootPath->Buffer, L"io.sys") == TRUE ||
+               DoesFileExist(SystemRootPath->Buffer, L"msdos.sys") == TRUE)
        {
-         wcscpy(SrcPath, SourceRootPath->Buffer);
-         wcscat(SrcPath, L"\\loader\\fat32.bin");
-
-         DPRINT("Install FAT32 bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
-         Status = InstallFat32BootCodeToDisk(SrcPath,
-                                             SystemRootPath->Buffer);
-         if (!NT_SUCCESS(Status))
-         {
-           DPRINT1("InstallFat32BootCodeToDisk() failed (Status %lx)\n", Status);
-           return Status;
-         }
+               /* Search for root directory for 'io.sys' and 'msdos.sys'. */
+               DPRINT1("Found Microsoft DOS or Windows 9x boot loader\n");
+
+               /* Copy FreeLoader to the boot partition */
+               wcscpy(SrcPath, SourceRootPath->Buffer);
+               wcscat(SrcPath, L"\\loader\\freeldr.sys");
+               wcscpy(DstPath, SystemRootPath->Buffer);
+               wcscat(DstPath, L"\\freeldr.sys");
+
+               DPRINT("Copy: %S ==> %S\n", SrcPath, DstPath);
+               Status = SetupCopyFile(SrcPath, DstPath);
+               if (!NT_SUCCESS(Status))
+               {
+                       DPRINT1("SetupCopyFile() failed (Status %lx)\n", Status);
+                       return Status;
+               }
+
+               /* Create or update 'freeldr.ini' */
+               if (DoesFileExist(SystemRootPath->Buffer, L"freeldr.ini") == FALSE)
+               {
+                       /* Create new 'freeldr.ini' */
+                       DPRINT1("Create new 'freeldr.ini'\n");
+                       wcscpy(DstPath, SystemRootPath->Buffer);
+                       wcscat(DstPath, L"\\freeldr.ini");
+
+                       Status = CreateFreeLoaderIniForDos(DstPath,
+                               DestinationArcPath->Buffer);
+                       if (!NT_SUCCESS(Status))
+                       {
+                               DPRINT1("CreateFreeLoaderIniForDos() failed (Status %lx)\n", Status);
+                               return Status;
+                       }
+
+                       /* Save current bootsector as 'BOOTSECT.DOS' */
+                       wcscpy(SrcPath, SystemRootPath->Buffer);
+                       wcscpy(DstPath, SystemRootPath->Buffer);
+                       wcscat(DstPath, L"\\bootsect.dos");
+
+                       DPRINT1("Save bootsector: %S ==> %S\n", SrcPath, DstPath);
+                       Status = SaveCurrentBootSector(SrcPath,
+                               DstPath);
+                       if (!NT_SUCCESS(Status))
+                       {
+                               DPRINT1("SaveCurrentBootSector() failed (Status %lx)\n", Status);
+                               return Status;
+                       }
+
+                       /* Install new bootsector */
+                       if (PartitionType == PARTITION_FAT32 ||
+                               PartitionType == PARTITION_FAT32_XINT13)
+                       {
+                               wcscpy(SrcPath, SourceRootPath->Buffer);
+                               wcscat(SrcPath, L"\\loader\\fat32.bin");
+
+                               DPRINT1("Install FAT32 bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
+                               Status = InstallFat32BootCodeToDisk(SrcPath,
+                                       SystemRootPath->Buffer);
+                               if (!NT_SUCCESS(Status))
+                               {
+                                       DPRINT1("InstallFat32BootCodeToDisk() failed (Status %lx)\n", Status);
+                                       return Status;
+                               }
+                       }
+                       else
+                       {
+                               wcscpy(SrcPath, SourceRootPath->Buffer);
+                               wcscat(SrcPath, L"\\loader\\fat.bin");
+
+                               DPRINT1("Install FAT bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
+                               Status = InstallFat16BootCodeToDisk(SrcPath,
+                                       SystemRootPath->Buffer);
+                               if (!NT_SUCCESS(Status))
+                               {
+                                       DPRINT1("InstallFat16BootCodeToDisk() failed (Status %lx)\n", Status);
+                                       return Status;
+                               }
+                       }
+               }
+               else
+               {
+                       /* Update existing 'freeldr.ini' */
+                       wcscpy(DstPath, SystemRootPath->Buffer);
+                       wcscat(DstPath, L"\\freeldr.ini");
+
+                       Status = UpdateFreeLoaderIni(DstPath,
+                               DestinationArcPath->Buffer);
+                       if (!NT_SUCCESS(Status))
+                       {
+                               DPRINT1("UpdateFreeLoaderIni() failed (Status %lx)\n", Status);
+                               return Status;
+                       }
+               }
        }
        else
        {
-         wcscpy(SrcPath, SourceRootPath->Buffer);
-         wcscat(SrcPath, L"\\loader\\fat.bin");
-
-         DPRINT("Install FAT bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
-         Status = InstallFat16BootCodeToDisk(SrcPath,
-                                             SystemRootPath->Buffer);
-         if (!NT_SUCCESS(Status))
-         {
-           DPRINT1("InstallFat16BootCodeToDisk() failed (Status %lx)\n", Status);
-           return Status;
-         }
+               /* No or unknown boot loader */
+               DPRINT1("No or unknown boot loader found\n");
+
+               /* Copy FreeLoader to the boot partition */
+               wcscpy(SrcPath, SourceRootPath->Buffer);
+               wcscat(SrcPath, L"\\loader\\freeldr.sys");
+               wcscpy(DstPath, SystemRootPath->Buffer);
+               wcscat(DstPath, L"\\freeldr.sys");
+
+               DPRINT1("Copy: %S ==> %S\n", SrcPath, DstPath);
+               Status = SetupCopyFile(SrcPath, DstPath);
+               if (!NT_SUCCESS(Status))
+               {
+                       DPRINT1("SetupCopyFile() failed (Status %lx)\n", Status);
+                       return Status;
+               }
+
+               /* Create or update 'freeldr.ini' */
+               if (DoesFileExist(SystemRootPath->Buffer, L"freeldr.ini") == FALSE)
+               {
+                       /* Create new freeldr.ini */
+                       wcscpy(DstPath, SystemRootPath->Buffer);
+                       wcscat(DstPath, L"\\freeldr.ini");
+
+                       DPRINT1("Copy: %S ==> %S\n", SrcPath, DstPath);
+                       Status = CreateFreeLoaderIniForReactos(DstPath,
+                               DestinationArcPath->Buffer);
+                       if (!NT_SUCCESS(Status))
+                       {
+                               DPRINT1("CreateFreeLoaderIniForReactos() failed (Status %lx)\n", Status);
+                               return Status;
+                       }
+
+                       /* Save current bootsector as 'BOOTSECT.OLD' */
+                       wcscpy(SrcPath, SystemRootPath->Buffer);
+                       wcscpy(DstPath, SystemRootPath->Buffer);
+                       wcscat(DstPath, L"\\bootsect.old");
+
+                       DPRINT1("Save bootsector: %S ==> %S\n", SrcPath, DstPath);
+                       Status = SaveCurrentBootSector(SrcPath,
+                               DstPath);
+                       if (!NT_SUCCESS(Status))
+                       {
+                               DPRINT1("SaveCurrentBootSector() failed (Status %lx)\n", Status);
+                               return Status;
+                       }
+
+                       /* Install new bootsector */
+                       if (PartitionType == PARTITION_FAT32 ||
+                               PartitionType == PARTITION_FAT32_XINT13)
+                       {
+                               wcscpy(SrcPath, SourceRootPath->Buffer);
+                               wcscat(SrcPath, L"\\loader\\fat32.bin");
+
+                               DPRINT("Install FAT32 bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
+                               Status = InstallFat32BootCodeToDisk(SrcPath,
+                                       SystemRootPath->Buffer);
+                               if (!NT_SUCCESS(Status))
+                               {
+                                       DPRINT1("InstallFat32BootCodeToDisk() failed (Status %lx)\n", Status);
+                                       return Status;
+                               }
+                       }
+                       else
+                       {
+                               wcscpy(SrcPath, SourceRootPath->Buffer);
+                               wcscat(SrcPath, L"\\loader\\fat.bin");
+
+                               DPRINT("Install FAT bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
+                               Status = InstallFat16BootCodeToDisk(SrcPath,
+                                       SystemRootPath->Buffer);
+                               if (!NT_SUCCESS(Status))
+                               {
+                                       DPRINT1("InstallFat16BootCodeToDisk() failed (Status %lx)\n", Status);
+                                       return Status;
+                               }
+                       }
+               }
+               else
+               {
+                       /* Update existing 'freeldr.ini' */
+                       wcscpy(DstPath, SystemRootPath->Buffer);
+                       wcscat(DstPath, L"\\freeldr.ini");
+
+                       Status = UpdateFreeLoaderIni(DstPath,
+                               DestinationArcPath->Buffer);
+                       if (!NT_SUCCESS(Status))
+                       {
+                               DPRINT1("UpdateFreeLoaderIni() failed (Status %lx)\n", Status);
+                               return Status;
+                       }
+               }
        }
-      }
-      else
-      {
-       /* Update existing 'freeldr.ini' */
-       wcscpy(DstPath, SystemRootPath->Buffer);
-       wcscat(DstPath, L"\\freeldr.ini");
 
-       Status = UpdateFreeLoaderIni(DstPath,
-                                    DestinationArcPath->Buffer);
-       if (!NT_SUCCESS(Status))
-       {
-         DPRINT1("UpdateFreeLoaderIni() failed (Status %lx)\n", Status);
-         return Status;
-       }
-      }
-    }
-
-  return STATUS_SUCCESS;
+       return STATUS_SUCCESS;
 }