Author: hpoussin
Date: Tue Jan 13 20:08:14 2015
New Revision: 66033
URL:
http://svn.reactos.org/svn/reactos?rev=66033&view=rev
Log:
[FREELDR] Support failing to load some boot drivers
In that case, simply skip it and try the next one.
Modified:
trunk/reactos/boot/freeldr/freeldr/windows/winldr.c
Modified: trunk/reactos/boot/freeldr/freeldr/windows/winldr.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/windo…
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/windows/winldr.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/windows/winldr.c [iso-8859-1] Tue Jan 13 20:08:14
2015
@@ -301,6 +301,7 @@
PLIST_ENTRY NextBd;
PBOOT_DRIVER_LIST_ENTRY BootDriver;
BOOLEAN Success;
+ BOOLEAN ret = TRUE;
// Walk through the boot drivers list
NextBd = LoaderBlock->BootDriverListHead.Flink;
@@ -321,24 +322,28 @@
0,
&BootDriver->LdrEntry);
- // If loading failed - cry loudly
- //FIXME: Maybe remove it from the list and try to continue?
- if (!Success)
+ if (Success)
{
- ERR("Can't load boot driver '%wZ'!",
&BootDriver->FilePath);
+ // Convert the RegistryPath and DTE addresses to VA since we are not going to
use it anymore
+ BootDriver->RegistryPath.Buffer =
PaToVa(BootDriver->RegistryPath.Buffer);
+ BootDriver->FilePath.Buffer = PaToVa(BootDriver->FilePath.Buffer);
+ BootDriver->LdrEntry = PaToVa(BootDriver->LdrEntry);
+ }
+ else
+ {
+ // Loading failed - cry loudly
+ ERR("Can't load boot driver '%wZ'!\n",
&BootDriver->FilePath);
UiMessageBox("Can't load boot driver '%wZ'!",
&BootDriver->FilePath);
- return FALSE;
+ ret = FALSE;
+
+ // Remove it from the list and try to continue
+ RemoveEntryList(NextBd);
}
- // Convert the RegistryPath and DTE addresses to VA since we are not going to use
it anymore
- BootDriver->RegistryPath.Buffer = PaToVa(BootDriver->RegistryPath.Buffer);
- BootDriver->FilePath.Buffer = PaToVa(BootDriver->FilePath.Buffer);
- BootDriver->LdrEntry = PaToVa(BootDriver->LdrEntry);
-
NextBd = BootDriver->Link.Flink;
}
- return TRUE;
+ return ret;
}
PVOID