Juan Lang : setupapi: Implement SetupDiEnumDeviceInfo.

Alexandre Julliard julliard at winehq.org
Thu Sep 20 10:30:05 CDT 2007


Module: wine
Branch: master
Commit: 634cba84d2fc548594276a26d672e4117a527956
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=634cba84d2fc548594276a26d672e4117a527956

Author: Juan Lang <juan.lang at gmail.com>
Date:   Wed Sep 19 17:46:58 2007 -0700

setupapi: Implement SetupDiEnumDeviceInfo.

---

 dlls/setupapi/devinst.c |   31 +++++++++++++++++++++++++++----
 1 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 414aa18..d1e9642 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -769,15 +769,38 @@ BOOL WINAPI SetupDiEnumDeviceInfo(
         DWORD  index,
         PSP_DEVINFO_DATA info)
 {
-    FIXME("%p %d %p\n", devinfo, index, info);
+    BOOL ret = FALSE;
+
+    TRACE("%p %d %p\n", devinfo, index, info);
 
     if(info==NULL)
         return FALSE;
     if(info->cbSize < sizeof(*info))
         return FALSE;
-
-    SetLastError(ERROR_NO_MORE_ITEMS);
-    return FALSE;
+    if (devinfo && devinfo != (HDEVINFO)INVALID_HANDLE_VALUE)
+    {
+        struct DeviceInfoSet *list = (struct DeviceInfoSet *)devinfo;
+        if (list->magic == SETUP_DEVICE_INFO_SET_MAGIC)
+        {
+            if (index < list->cDevices)
+            {
+                if (info->cbSize == sizeof(SP_DEVINFO_DATA))
+                {
+                    memcpy(info, &list->devices[index], info->cbSize);
+                    ret = TRUE;
+                }
+                else
+                    SetLastError(ERROR_INVALID_USER_BUFFER);
+            }
+            else
+                SetLastError(ERROR_NO_MORE_ITEMS);
+        }
+        else
+            SetLastError(ERROR_INVALID_HANDLE);
+    }
+    else
+        SetLastError(ERROR_INVALID_HANDLE);
+    return ret;
 }
 
 /***********************************************************************




More information about the wine-cvs mailing list