Try to transform the ClassGUID string to a GUID only when the string exists in registry. Otherwise, set it to GUID_NULL
Modified: trunk/reactos/lib/setupapi/devinst.c
Modified: trunk/reactos/lib/setupapi/setupapi_private.h

Modified: trunk/reactos/lib/setupapi/devinst.c
--- trunk/reactos/lib/setupapi/devinst.c	2005-11-15 14:26:06 UTC (rev 19245)
+++ trunk/reactos/lib/setupapi/devinst.c	2005-11-15 14:29:46 UTC (rev 19246)
@@ -1185,6 +1185,8 @@
                 if (pClassGuid)
                     /* Skip this bad entry as we can't verify it */
                     continue;
+                /* Set a default GUID for this device */
+                memcpy(&KeyGuid, &GUID_NULL, sizeof(GUID));
             }
             else if (rc != ERROR_SUCCESS)
             {
@@ -1196,13 +1198,14 @@
                 RegCloseKey(hDeviceIdKey);
                 return ERROR_GEN_FAILURE;
             }
-
-            KeyBuffer[37] = '\0'; /* Replace the } by a NULL character */
-            if (UuidFromStringW(&KeyBuffer[1], &KeyGuid) != RPC_S_OK)
+            else
             {
-                RegCloseKey(hDeviceIdKey);
-                return GetLastError();
+                KeyBuffer[37] = '\0'; /* Replace the } by a NULL character */
+                if (UuidFromStringW(&KeyBuffer[1], &KeyGuid) != RPC_S_OK)
+                    /* Bad GUID, skip the entry */
+                    continue;
             }
+
             if (pClassGuid && !IsEqualIID(&KeyGuid, pClassGuid))
             {
                 /* Skip this entry as it is not the right device class */
@@ -1259,7 +1262,7 @@
         return rc;
 
     /* If enumerator is provided, call directly SETUP_CreateDevListFromEnumerator.
-     * Else, enumerate all enumerators all call SETUP_CreateDevListFromEnumerator
+     * Else, enumerate all enumerators and call SETUP_CreateDevListFromEnumerator
      * for each one.
      */
     if (Enumerator)

Modified: trunk/reactos/lib/setupapi/setupapi_private.h
--- trunk/reactos/lib/setupapi/setupapi_private.h	2005-11-15 14:26:06 UTC (rev 19245)
+++ trunk/reactos/lib/setupapi/setupapi_private.h	2005-11-15 14:29:46 UTC (rev 19246)
@@ -103,7 +103,8 @@
      *       String which identifies the device. Can be NULL. If not NULL,
      *       points into the Data field at the end of the structure
      * - ClassGuid
-     *       Identifies the class of this device. FIXME: can it be GUID_NULL?
+     *       Identifies the class of this device. It is GUID_NULL if the
+     *       device has not been installed
      * - CreationFlags
      *       Is a combination of:
      *       - DICD_GENERATE_ID