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/window... ============================================================================== --- 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