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++;