[PATCH 3/3] setupapi: Implement SetupDiDeleteDeviceInfo().

Zebediah Figura z.figura12 at gmail.com
Mon Dec 3 18:34:58 CST 2018


Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=43211
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/setupapi/devinst.c       | 17 ++++++++++++++
 dlls/setupapi/stubs.c         | 12 ----------
 dlls/setupapi/tests/devinst.c | 54 ++++++++++++++++++++++++++++---------------
 3 files changed, 53 insertions(+), 30 deletions(-)

diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index db0b72fcb5..5685dc3bff 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -1574,6 +1574,23 @@ BOOL WINAPI SetupDiRemoveDevice(HDEVINFO devinfo, SP_DEVINFO_DATA *device_data)
     return TRUE;
 }
 
+/***********************************************************************
+ *              SetupDiDeleteDeviceInfo (SETUPAPI.@)
+ */
+BOOL WINAPI SetupDiDeleteDeviceInfo(HDEVINFO devinfo, SP_DEVINFO_DATA *device_data)
+{
+    struct device *device;
+
+    TRACE("devinfo %p, device_data %p.\n", devinfo, device_data);
+
+    if (!(device = get_device(devinfo, device_data)))
+        return FALSE;
+
+    delete_device(device);
+
+    return TRUE;
+}
+
 /***********************************************************************
  *              SetupDiRemoveDeviceInterface (SETUPAPI.@)
  */
diff --git a/dlls/setupapi/stubs.c b/dlls/setupapi/stubs.c
index 7c3413a7cc..61ce005212 100644
--- a/dlls/setupapi/stubs.c
+++ b/dlls/setupapi/stubs.c
@@ -611,18 +611,6 @@ BOOL WINAPI SetupDiDestroyDriverInfoList(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DAT
     return FALSE;
 }
 
-/***********************************************************************
- *              SetupDiDeleteDeviceInfo  (SETUPAPI.@)
- */
-
-BOOL WINAPI SetupDiDeleteDeviceInfo(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData)
- {
-    FIXME(": stub %p, %p\n", DeviceInfoSet, DeviceInfoData);
-
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
- }
-
 /***********************************************************************
  *              SetupDiDrawMiniIcon  (SETUPAPI.@)
  */
diff --git a/dlls/setupapi/tests/devinst.c b/dlls/setupapi/tests/devinst.c
index edb660e106..4de0b784dd 100644
--- a/dlls/setupapi/tests/devinst.c
+++ b/dlls/setupapi/tests/devinst.c
@@ -337,13 +337,21 @@ static void test_device_info(void)
     check_device_info(set, 2, &guid, "ROOT\\LEGACY_BOGUS\\0002");
     check_device_info(set, 3, &guid, NULL);
 
+    ret = SetupDiEnumDeviceInfo(set, 0, &ret_device);
+    ok(ret, "Failed to enumerate devices, error %#x.\n", GetLastError());
+    ret = SetupDiDeleteDeviceInfo(set, &ret_device);
+    ok(ret, "Failed to delete device, error %#x.\n", GetLastError());
+
+    check_device_info(set, 0, &guid, "ROOT\\LEGACY_BOGUS\\0001");
+    check_device_info(set, 1, &guid, "ROOT\\LEGACY_BOGUS\\0002");
+    check_device_info(set, 2, &guid, NULL);
+
     ret = SetupDiRemoveDevice(set, &device);
     ok(ret, "Got unexpected error %#x.\n", GetLastError());
 
-    check_device_info(set, 0, &guid, "ROOT\\LEGACY_BOGUS\\0000");
-    check_device_info(set, 1, &guid, "ROOT\\LEGACY_BOGUS\\0001");
+    check_device_info(set, 0, &guid, "ROOT\\LEGACY_BOGUS\\0001");
 
-    ret = SetupDiEnumDeviceInfo(set, 2, &ret_device);
+    ret = SetupDiEnumDeviceInfo(set, 1, &ret_device);
     ok(ret, "Got unexpected error %#x.\n", GetLastError());
     ok(IsEqualGUID(&ret_device.ClassGuid, &guid), "Got unexpected class %s.\n",
             wine_dbgstr_guid(&ret_device.ClassGuid));
@@ -353,7 +361,7 @@ static void test_device_info(void)
     ok(ret_device.DevInst == device.DevInst, "Expected device node %#x, got %#x.\n",
             device.DevInst, ret_device.DevInst);
 
-    check_device_info(set, 3, &guid, NULL);
+    check_device_info(set, 2, &guid, NULL);
 
     SetupDiDestroyDeviceInfoList(set);
 
@@ -469,7 +477,7 @@ static void test_register_device_info(void)
     SP_DEVINFO_DATA device = {0};
     BOOL ret;
     HDEVINFO set;
-    char id[30];
+    int i = 0;
 
     SetLastError(0xdeadbeef);
     ret = SetupDiRegisterDeviceInfo(NULL, NULL, 0, NULL, NULL, NULL);
@@ -495,13 +503,26 @@ static void test_register_device_info(void)
     ok(!ret, "Expected failure.\n");
     ok(GetLastError() == ERROR_INVALID_PARAMETER, "Got unexpected error %#x.\n", GetLastError());
 
-    ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", &guid, NULL, NULL, 0, &device);
+    ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\device", &guid, NULL, NULL, 0, &device);
     ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+    ret = SetupDiRegisterDeviceInfo(set, &device, 0, NULL, NULL, NULL);
+    ok(ret, "Failed to register device, error %#x.\n", GetLastError());
 
+    ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\removed", &guid, NULL, NULL, 0, &device);
+    ok(ret, "Failed to create device, error %#x.\n", GetLastError());
     ret = SetupDiRegisterDeviceInfo(set, &device, 0, NULL, NULL, NULL);
     ok(ret, "Failed to register device, error %#x.\n", GetLastError());
+    ret = SetupDiRemoveDevice(set, &device);
+    ok(ret, "Failed to remove device, error %#x.\n", GetLastError());
 
-    ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0001", &guid, NULL, NULL, 0, &device);
+    ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\deleted", &guid, NULL, NULL, 0, &device);
+    ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+    ret = SetupDiRegisterDeviceInfo(set, &device, 0, NULL, NULL, NULL);
+    ok(ret, "Failed to register device, error %#x.\n", GetLastError());
+    ret = SetupDiDeleteDeviceInfo(set, &device);
+    ok(ret, "Failed to remove device, error %#x.\n", GetLastError());
+
+    ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\unregistered", &guid, NULL, NULL, 0, &device);
     ok(ret, "Failed to create device, error %#x.\n", GetLastError());
 
     SetupDiDestroyDeviceInfoList(set);
@@ -509,18 +530,15 @@ static void test_register_device_info(void)
     set = SetupDiGetClassDevsA(&guid, NULL, NULL, 0);
     ok(set != NULL, "Failed to create device list, error %#x.\n", GetLastError());
 
-    ret = SetupDiEnumDeviceInfo(set, 0, &device);
-    ok(ret, "Failed to enumerate devices, error %#x.\n", GetLastError());
-    ret = SetupDiGetDeviceInstanceIdA(set, &device, id, sizeof(id), NULL);
-    ok(ret, "Failed to get device id, error %#x.\n", GetLastError());
-    ok(!strcasecmp(id, "Root\\LEGACY_BOGUS\\0000"), "Got unexpected id %s.\n", id);
-
-    ret = SetupDiRemoveDevice(set, &device);
-    ok(ret, "Failed to remove device, error %#x.\n", GetLastError());
+    check_device_info(set, 0, &guid, "Root\\LEGACY_BOGUS\\deleted");
+    check_device_info(set, 1, &guid, "Root\\LEGACY_BOGUS\\device");
+    check_device_info(set, 2, &guid, NULL);
 
-    ret = SetupDiEnumDeviceInfo(set, 1, &device);
-    ok(!ret, "Expected failure.\n");
-    ok(GetLastError() == ERROR_NO_MORE_ITEMS, "Got unexpected error %#x.\n", GetLastError());
+    while (SetupDiEnumDeviceInfo(set, i++, &device))
+    {
+        ret = SetupDiRemoveDevice(set, &device);
+        ok(ret, "Failed to remove device, error %#x.\n", GetLastError());
+    }
 
     SetupDiDestroyDeviceInfoList(set);
 }
-- 
2.14.1




More information about the wine-devel mailing list