[ros-diffs] [hpoussin] 17343: Always set a valid class Guid in CreateDeviceInfoElement

hpoussin at svn.reactos.com hpoussin at svn.reactos.com
Fri Aug 12 21:00:15 CEST 2005


Always set a valid class Guid in CreateDeviceInfoElement
Fix interfaces enumeration by not copying cbSize field (it should
already be correct)
Modified: trunk/reactos/lib/setupapi/devinst.c
  _____  

Modified: trunk/reactos/lib/setupapi/devinst.c
--- trunk/reactos/lib/setupapi/devinst.c	2005-08-12 18:22:47 UTC
(rev 17342)
+++ trunk/reactos/lib/setupapi/devinst.c	2005-08-12 19:00:04 UTC
(rev 17343)
@@ -1204,7 +1204,6 @@

     struct DeviceInterface *deviceInterface;
 
     *pDeviceInterface = NULL;
-    if (IsEqualIID(&pInterfaceGuid, &GUID_NULL)) { FIXME("Bad
argument!!!"); return FALSE; }/* FIXME: remove */
 
     deviceInterface = HeapAlloc(GetProcessHeap(), 0, sizeof(struct
DeviceInterface) + (wcslen(SymbolicLink) + 1) * sizeof(WCHAR));
     if (!deviceInterface)
@@ -1261,6 +1260,8 @@
         j = 0;
         while (TRUE)
         {
+            GUID KeyGuid;
+
             dwLength = sizeof(KeyBuffer) / sizeof(KeyBuffer[0]);
             rc = RegEnumKeyExW(hDeviceIdKey, j, KeyBuffer, &dwLength,
NULL, NULL, NULL, NULL);
             if (rc == ERROR_NO_MORE_ITEMS)
@@ -1302,22 +1303,21 @@
                 RegCloseKey(hDeviceIdKey);
                 return ERROR_GEN_FAILURE;
             }
-            else if (pClassGuid)
+
+            KeyBuffer[37] = '\0'; /* Replace the } by a NULL character
*/
+            if (UuidFromStringW(&KeyBuffer[1], &KeyGuid) != RPC_S_OK)
             {
-                GUID KeyGuid;
-                KeyBuffer[37] = '\0'; /* Replace the } by a NULL
character */
-                if (UuidFromStringW(&KeyBuffer[1], &KeyGuid) !=
RPC_S_OK)
-                {
-                    RegCloseKey(hDeviceIdKey);
-                    return GetLastError();
-                }
-                if (!IsEqualIID(&KeyGuid, pClassGuid))
-                    /* Skip this entry as it is not the right device
class */
-                    continue;
+                RegCloseKey(hDeviceIdKey);
+                return GetLastError();
             }
+            if (pClassGuid && !IsEqualIID(&KeyGuid, pClassGuid))
+            {
+                /* Skip this entry as it is not the right device class
*/
+                continue;
+            }
 
             /* Add the entry to the list */
-            if (!CreateDeviceInfoElement(InstancePath, pClassGuid,
&deviceInfo))
+            if (!CreateDeviceInfoElement(InstancePath, &KeyGuid,
&deviceInfo))
             {
                 RegCloseKey(hDeviceIdKey);
                 return GetLastError();
@@ -2904,6 +2904,7 @@
             {
                 struct DeviceInfoElement *deviceInfo;
 
+                /* FIXME: ClassGuid can be NULL */
                 if (CreateDeviceInfoElement(DeviceName, ClassGuid,
&deviceInfo))
                 {
                     InsertTailList(&list->ListHead,
&deviceInfo->ListEntry);
@@ -3544,7 +3545,7 @@
 
         if (deviceInfo)
         {
-            // good one found
+            /* good one found */
             if (DeviceInfoData)
             {
                 memcpy(&DeviceInfoData->ClassGuid,
&deviceInfo->ClassGuid, sizeof(GUID));
@@ -3580,6 +3581,7 @@
                 return FALSE;
             }
 
+            /* FIXME: GUID_NULL is not allowed */
             if (!CreateDeviceInfoElement(DeviceInstanceId, &GUID_NULL
/* FIXME */, &deviceInfo))
             {
                 RegCloseKey(hKey);
@@ -3722,9 +3724,9 @@
             struct DriverInfoElement *DrvInfo = (struct
DriverInfoElement *)ItemList;
 
             memcpy(
-                DriverInfoData,
-                &DrvInfo->Info,
-                DriverInfoData->cbSize);
+                &DriverInfoData->DriverType,
+                &DrvInfo->Info.DriverType,
+                DriverInfoData->cbSize -
FIELD_OFFSET(SP_DRVINFO_DATA_W, DriverType));
             ret = TRUE;
         }
     }
@@ -3770,9 +3772,9 @@
         else
         {
             memcpy(
-                DriverInfoData,
-                &driverInfo->Info,
-                DriverInfoData->cbSize);
+                &DriverInfoData->DriverType,
+                &driverInfo->Info.DriverType,
+                DriverInfoData->cbSize -
FIELD_OFFSET(SP_DRVINFO_DATA_W, DriverType));
             ret = TRUE;
         }
     }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20050812/05567a1e/attachment.html


More information about the Ros-diffs mailing list