[PATCH 0/1] MR9080: win32u: Implement NtUserDisplayConfigGetDeviceInfo( DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME ).
From: Paul Gofman <pgofman(a)codeweavers.com> --- dlls/user32/tests/monitor.c | 3 +-- dlls/win32u/sysparams.c | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/dlls/user32/tests/monitor.c b/dlls/user32/tests/monitor.c index 97eddbc60bd..206d9505705 100644 --- a/dlls/user32/tests/monitor.c +++ b/dlls/user32/tests/monitor.c @@ -2024,15 +2024,14 @@ static void test_QueryDisplayConfig_result(UINT32 flags, preferred_mode.width, preferred_mode.height); check_preferred_mode(&preferred_mode, source_name.viewGdiDeviceName); - todo_wine { adapter_name.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME; adapter_name.header.size = sizeof(adapter_name); adapter_name.header.adapterId = pi[i].sourceInfo.adapterId; + adapter_name.header.id = ~0u; adapter_name.adapterDevicePath[0] = '\0'; ret = pDisplayConfigGetDeviceInfo(&adapter_name.header); ok(!ret, "Expected 0, got %ld\n", ret); ok(adapter_name.adapterDevicePath[0] != '\0', "Expected adapter device path, got empty string\n"); - } /* Check corresponding modes */ if (flags & QDC_VIRTUAL_MODE_AWARE) diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 3a0fbe4f87b..0c53fd9f54c 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -7390,13 +7390,33 @@ NTSTATUS WINAPI NtUserDisplayConfigGetDeviceInfo( DISPLAYCONFIG_DEVICE_INFO_HEAD case DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME: { DISPLAYCONFIG_ADAPTER_NAME *adapter_name = (DISPLAYCONFIG_ADAPTER_NAME *)packet; + char buffer[MAX_PATH + 4 + sizeof(guid_devinterface_display_adapterA)]; + struct source *source; + unsigned int i; - FIXME( "DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME stub.\n" ); + TRACE( "DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME.\n" ); if (packet->size < sizeof(*adapter_name)) return STATUS_INVALID_PARAMETER; - return STATUS_NOT_SUPPORTED; + if (!lock_display_devices( FALSE )) return STATUS_UNSUCCESSFUL; + + LIST_FOR_EACH_ENTRY(source, &sources, struct source, entry) + { + if (memcmp( &adapter_name->header.adapterId, &source->gpu->luid, sizeof(source->gpu->luid) )) continue; + + snprintf( buffer, ARRAY_SIZE(buffer), "\\\\?\\%s\\%s", source->gpu->path, guid_devinterface_display_adapterA ); + for (i = 4; buffer[i]; ++i) + { + if (buffer[i] == '\\') buffer[i] = '#'; + } + asciiz_to_unicode( adapter_name->adapterDevicePath, buffer ); + ret = STATUS_SUCCESS; + break; + } + + unlock_display_devices(); + return ret; } case DISPLAYCONFIG_DEVICE_INFO_SET_TARGET_PERSISTENCE: case DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_BASE_TYPE: -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9080
This merge request was approved by Zhiyi Zhang. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9080
participants (3)
-
Paul Gofman -
Paul Gofman (@gofman) -
Zhiyi Zhang (@zhiyi)