From: Rémi Bernon <rbernon(a)codeweavers.com> The mutex is also used in user32, gdi32, and winevulkan, where it is opened through kernel32, which opens it from the session directory. --- dlls/win32u/sysparams.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 6b5a6f65aef..498ed386386 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -406,14 +406,16 @@ void user_check_not_lock(void) static HANDLE get_display_device_init_mutex( void ) { - static const WCHAR display_device_initW[] = - {'\\','B','a','s','e','N','a','m','e','d','O','b','j','e','c','t','s', - '\\','d','i','s','p','l','a','y','_','d','e','v','i','c','e','_','i','n','i','t'}; - UNICODE_STRING name = { sizeof(display_device_initW), sizeof(display_device_initW), - (WCHAR *)display_device_initW }; + WCHAR bufferW[256]; + UNICODE_STRING name = {.Buffer = bufferW}; OBJECT_ATTRIBUTES attr; + char buffer[256]; HANDLE mutex; + snprintf( buffer, ARRAY_SIZE(buffer), "\\Sessions\\%u\\BaseNamedObjects\\display_device_init", + NtCurrentTeb()->Peb->SessionId ); + name.Length = name.MaximumLength = asciiz_to_unicode( bufferW, buffer ); + InitializeObjectAttributes( &attr, &name, OBJ_OPENIF, NULL, NULL ); if (NtCreateMutant( &mutex, MUTEX_ALL_ACCESS, &attr, FALSE ) < 0) return 0; NtWaitForSingleObject( mutex, FALSE, NULL ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1099