Brendan Shanks : user32: Improve DisplayConfigGetDeviceInfo() stub.

Alexandre Julliard julliard at winehq.org
Tue May 5 14:48:52 CDT 2020


Module: wine
Branch: master
Commit: b1b1399dd6f31c60b43a193fcd8966b0776d1f3b
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b1b1399dd6f31c60b43a193fcd8966b0776d1f3b

Author: Brendan Shanks <bshanks at codeweavers.com>
Date:   Mon May  4 18:08:31 2020 -0700

user32: Improve DisplayConfigGetDeviceInfo() stub.

Signed-off-by: Brendan Shanks <bshanks at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/sysparams.c     | 50 ++++++++++++++++++++++++++++++++++++++++++++-
 dlls/user32/tests/monitor.c |  6 ------
 2 files changed, 49 insertions(+), 7 deletions(-)

diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index 74158f6aae..10f17bb4c3 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -4528,5 +4528,53 @@ LONG WINAPI QueryDisplayConfig(UINT32 flags, UINT32 *numpathelements, DISPLAYCON
 LONG WINAPI DisplayConfigGetDeviceInfo(DISPLAYCONFIG_DEVICE_INFO_HEADER *packet)
 {
     FIXME("stub: %p\n", packet);
-    return ERROR_NOT_SUPPORTED;
+
+    if (!packet || packet->size < sizeof(*packet))
+        return ERROR_GEN_FAILURE;
+
+    switch (packet->type)
+    {
+    case DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME:
+    {
+        DISPLAYCONFIG_SOURCE_DEVICE_NAME *source_name = (DISPLAYCONFIG_SOURCE_DEVICE_NAME *)packet;
+        if (packet->size < sizeof(*source_name))
+            return ERROR_INVALID_PARAMETER;
+
+        return ERROR_NOT_SUPPORTED;
+    }
+    case DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME:
+    {
+        DISPLAYCONFIG_TARGET_DEVICE_NAME *target_name = (DISPLAYCONFIG_TARGET_DEVICE_NAME *)packet;
+        if (packet->size < sizeof(*target_name))
+            return ERROR_INVALID_PARAMETER;
+
+        return ERROR_NOT_SUPPORTED;
+    }
+    case DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE:
+    {
+        DISPLAYCONFIG_TARGET_PREFERRED_MODE *preferred_mode = (DISPLAYCONFIG_TARGET_PREFERRED_MODE *)packet;
+        if (packet->size < sizeof(*preferred_mode))
+            return ERROR_INVALID_PARAMETER;
+
+        return ERROR_NOT_SUPPORTED;
+    }
+    case DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME:
+    {
+        DISPLAYCONFIG_ADAPTER_NAME *adapter_name = (DISPLAYCONFIG_ADAPTER_NAME *)packet;
+        if (packet->size < sizeof(*adapter_name))
+            return ERROR_INVALID_PARAMETER;
+
+        return ERROR_NOT_SUPPORTED;
+    }
+    case DISPLAYCONFIG_DEVICE_INFO_SET_TARGET_PERSISTENCE:
+    case DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_BASE_TYPE:
+    case DISPLAYCONFIG_DEVICE_INFO_GET_SUPPORT_VIRTUAL_RESOLUTION:
+    case DISPLAYCONFIG_DEVICE_INFO_SET_SUPPORT_VIRTUAL_RESOLUTION:
+    case DISPLAYCONFIG_DEVICE_INFO_GET_ADVANCED_COLOR_INFO:
+    case DISPLAYCONFIG_DEVICE_INFO_SET_ADVANCED_COLOR_STATE:
+    case DISPLAYCONFIG_DEVICE_INFO_GET_SDR_WHITE_LEVEL:
+    default:
+        FIXME("Unimplemented packet type: %u\n", packet->type);
+        return ERROR_INVALID_PARAMETER;
+    }
 }
diff --git a/dlls/user32/tests/monitor.c b/dlls/user32/tests/monitor.c
index 7c034c823a..fb5e331c25 100644
--- a/dlls/user32/tests/monitor.c
+++ b/dlls/user32/tests/monitor.c
@@ -1332,8 +1332,6 @@ static void test_display_config_get_device_info(void)
     DISPLAYCONFIG_TARGET_PREFERRED_MODE preferred_mode;
     DISPLAYCONFIG_ADAPTER_NAME adapter_name;
 
-    todo_wine
-    {
     ret = pDisplayConfigGetDeviceInfo(NULL);
     ok(ret == ERROR_GEN_FAILURE, "got %d\n", ret);
 
@@ -1366,7 +1364,6 @@ static void test_display_config_get_device_info(void)
     source_name.header.size = sizeof(source_name) - 1;
     ret = pDisplayConfigGetDeviceInfo(&source_name.header);
     ok(ret == ERROR_INVALID_PARAMETER, "got %d\n", ret);
-    }
 
     source_name.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME;
     source_name.header.size = sizeof(source_name);
@@ -1379,7 +1376,6 @@ static void test_display_config_get_device_info(void)
     target_name.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME;
     target_name.header.size = sizeof(target_name) - 1;
     ret = pDisplayConfigGetDeviceInfo(&target_name.header);
-    todo_wine
     ok(ret == ERROR_INVALID_PARAMETER, "got %d\n", ret);
 
     target_name.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME;
@@ -1393,7 +1389,6 @@ static void test_display_config_get_device_info(void)
     preferred_mode.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE;
     preferred_mode.header.size = sizeof(preferred_mode) - 1;
     ret = pDisplayConfigGetDeviceInfo(&preferred_mode.header);
-    todo_wine
     ok(ret == ERROR_INVALID_PARAMETER, "got %d\n", ret);
 
     preferred_mode.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE;
@@ -1407,7 +1402,6 @@ static void test_display_config_get_device_info(void)
     adapter_name.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME;
     adapter_name.header.size = sizeof(adapter_name) - 1;
     ret = pDisplayConfigGetDeviceInfo(&adapter_name.header);
-    todo_wine
     ok(ret == ERROR_INVALID_PARAMETER, "got %d\n", ret);
 
     adapter_name.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME;




More information about the wine-cvs mailing list