From: Paul Gofman pgofman@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:
This merge request was approved by Zhiyi Zhang.