Freeloader: Check return code of RegOpenKey() in FrLdrLoadBootDrivers()
for failure
Modified: trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c
_____
Modified: trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c
--- trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c
2006-01-14 20:36:49 UTC (rev 20865)
+++ trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c
2006-01-14 21:57:07 UTC (rev 20866)
@@ -428,55 +428,57 @@
/* 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));
+ /* Make sure it should be started */
+ if ((StartValue == 0) &&
+ (TagValue == OrderList[TagIndex]) &&
+ (_wcsicmp(DriverGroup, GroupName) == 0)) {
- /* Make sure it should be started */
- if ((StartValue == 0) &&
- (TagValue == OrderList[TagIndex]) &&
- (_wcsicmp(DriverGroup, GroupName) == 0)) {
+ /* Get the Driver's Location */
+ ValueSize = sizeof(TempImagePath);
+ rc = RegQueryValue(hDriverKey, L"ImagePath",
NULL, (PUCHAR)TempImagePath, &ValueSize);
- /* Get the Driver's Location */
- ValueSize = sizeof(TempImagePath);
- rc = RegQueryValue(hDriverKey, L"ImagePath", NULL,
(PUCHAR)TempImagePath, &ValueSize);
+ /* Write the whole path if it suceeded, else
prepare to fail */
+ if (rc != ERROR_SUCCESS) {
+ DbgPrint((DPRINT_REACTOS, " ImagePath: not
found\n"));
+ sprintf(ImagePath,
"%s\\system32\\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));
+ }
- /* Write the whole path if it suceeded, else
prepare to fail */
- if (rc != ERROR_SUCCESS) {
- DbgPrint((DPRINT_REACTOS, " ImagePath: not
found\n"));
- sprintf(ImagePath,
"%s\\system32\\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));
- DbgPrint((DPRINT_REACTOS, " Loading driver:
'%s'\n", ImagePath));
+ /* Update the position if needed */
+ if (nPos < 100) nPos += 5;
- /* Update the position if needed */
- 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 Tag %d, current group
'%S')\n",
- ServiceName, StartValue, TagValue,
DriverGroup, OrderList[TagIndex], GroupName));
+ DbgPrint((DPRINT_REACTOS, " Skipping driver
'%S' with Start %d, Tag %d and Group '%S' (Current Tag %d, current group
'%S')\n",
+ ServiceName, StartValue, TagValue,
DriverGroup, OrderList[TagIndex], GroupName));
+ }
}
Index++;