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