From f34d84db465ad15e770326aa2b0bc60dff29492a Mon Sep 17 00:00:00 2001 From: Nathan Woods Date: Sat, 14 Jan 2006 23:35:20 +0000 Subject: [PATCH] Freeloader: Check return code of RegOpenKey() in FrLdrLoadBootDrivers() for failure Another one... svn path=/trunk/; revision=20871 --- .../boot/freeldr/freeldr/reactos/reactos.c | 78 ++++++++++--------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/reactos/reactos.c b/reactos/boot/freeldr/freeldr/reactos/reactos.c index 30e06bb88e7..e9d29edd4b1 100644 --- a/reactos/boot/freeldr/freeldr/reactos/reactos.c +++ b/reactos/boot/freeldr/freeldr/reactos/reactos.c @@ -499,53 +499,55 @@ FrLdrLoadBootDrivers(PCHAR szSystemRoot, /* open driver Key */ rc = RegOpenKey(hServiceKey, ServiceName, &hDriverKey); + if (rc == ERROR_SUCCESS) + { + /* Read the Start Value */ + ValueSize = sizeof(ULONG); + rc = RegQueryValue(hDriverKey, L"Start", &ValueType, (PUCHAR)&StartValue, &ValueSize); + if (rc != ERROR_SUCCESS) StartValue = (ULONG)-1; + DbgPrint((DPRINT_REACTOS, " Start: %x \n", (int)StartValue)); - /* Read the Start Value */ - ValueSize = sizeof(ULONG); - rc = RegQueryValue(hDriverKey, L"Start", &ValueType, (PUCHAR)&StartValue, &ValueSize); - if (rc != ERROR_SUCCESS) StartValue = (ULONG)-1; - DbgPrint((DPRINT_REACTOS, " Start: %x \n", (int)StartValue)); + /* Read the Tag */ + ValueSize = sizeof(ULONG); + rc = RegQueryValue(hDriverKey, L"Tag", &ValueType, (PUCHAR)&TagValue, &ValueSize); + if (rc != ERROR_SUCCESS) TagValue = (ULONG)-1; + DbgPrint((DPRINT_REACTOS, " Tag: %x \n", (int)TagValue)); - /* Read the Tag */ - ValueSize = sizeof(ULONG); - rc = RegQueryValue(hDriverKey, L"Tag", &ValueType, (PUCHAR)&TagValue, &ValueSize); - if (rc != ERROR_SUCCESS) TagValue = (ULONG)-1; - DbgPrint((DPRINT_REACTOS, " Tag: %x \n", (int)TagValue)); + /* Read the driver's group */ + DriverGroupSize = sizeof(DriverGroup); + rc = RegQueryValue(hDriverKey, L"Group", NULL, (PUCHAR)DriverGroup, &DriverGroupSize); + DbgPrint((DPRINT_REACTOS, " Group: '%S' \n", DriverGroup)); - /* Read the driver's group */ - DriverGroupSize = sizeof(DriverGroup); - rc = RegQueryValue(hDriverKey, L"Group", NULL, (PUCHAR)DriverGroup, &DriverGroupSize); - DbgPrint((DPRINT_REACTOS, " Group: '%S' \n", DriverGroup)); + for (TagIndex = 1; TagIndex <= OrderList[0]; TagIndex++) { + if (TagValue == OrderList[TagIndex]) break; + } - for (TagIndex = 1; TagIndex <= OrderList[0]; TagIndex++) { - if (TagValue == OrderList[TagIndex]) break; - } + if ((StartValue == 0) && + (TagIndex > OrderList[0]) && + (_wcsicmp(DriverGroup, GroupName) == 0)) { - if ((StartValue == 0) && - (TagIndex > OrderList[0]) && - (_wcsicmp(DriverGroup, GroupName) == 0)) { + ValueSize = sizeof(TempImagePath); + rc = RegQueryValue(hDriverKey, L"ImagePath", NULL, (PUCHAR)TempImagePath, &ValueSize); + if (rc != ERROR_SUCCESS) { + DbgPrint((DPRINT_REACTOS, " ImagePath: not found\n")); + sprintf(ImagePath, "%ssystem32\\drivers\\%S.sys", szSystemRoot, ServiceName); + } else if (TempImagePath[0] != L'\\') { + sprintf(ImagePath, "%s%S", szSystemRoot, TempImagePath); + } else { + sprintf(ImagePath, "%S", TempImagePath); + DbgPrint((DPRINT_REACTOS, " ImagePath: '%s'\n", ImagePath)); + } + DbgPrint((DPRINT_REACTOS, " Loading driver: '%s'\n", ImagePath)); - ValueSize = sizeof(TempImagePath); - rc = RegQueryValue(hDriverKey, L"ImagePath", NULL, (PUCHAR)TempImagePath, &ValueSize); - if (rc != ERROR_SUCCESS) { - DbgPrint((DPRINT_REACTOS, " ImagePath: not found\n")); - sprintf(ImagePath, "%ssystem32\\drivers\\%S.sys", szSystemRoot, ServiceName); - } else if (TempImagePath[0] != L'\\') { - sprintf(ImagePath, "%s%S", szSystemRoot, TempImagePath); - } else { - sprintf(ImagePath, "%S", TempImagePath); - DbgPrint((DPRINT_REACTOS, " ImagePath: '%s'\n", ImagePath)); - } - DbgPrint((DPRINT_REACTOS, " Loading driver: '%s'\n", ImagePath)); + if (nPos < 100) nPos += 5; - if (nPos < 100) nPos += 5; + FrLdrLoadDriver(ImagePath, nPos); - FrLdrLoadDriver(ImagePath, nPos); + } else { - } else { - - DbgPrint((DPRINT_REACTOS, " Skipping driver '%S' with Start %d, Tag %d and Group '%S' (Current group '%S')\n", - ServiceName, StartValue, TagValue, DriverGroup, GroupName)); + DbgPrint((DPRINT_REACTOS, " Skipping driver '%S' with Start %d, Tag %d and Group '%S' (Current group '%S')\n", + ServiceName, StartValue, TagValue, DriverGroup, GroupName)); + } } Index++;