From 911e59c1333be238cc504bd9c3e06131e1204882 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 18 Jul 2016 15:38:42 +0900 Subject: [PATCH] user32: Store window station objects under the session directory. Signed-off-by: Alexandre Julliard --- dlls/user32/winstation.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dlls/user32/winstation.c b/dlls/user32/winstation.c index 61add7692cc..673917c14c9 100644 --- a/dlls/user32/winstation.c +++ b/dlls/user32/winstation.c @@ -59,8 +59,10 @@ static BOOL CALLBACK enum_names_WtoA( LPWSTR name, LPARAM lparam ) static HANDLE get_winstations_dir_handle(void) { static HANDLE handle = NULL; - static const WCHAR basenameW[] = {'\\','W','i','n','d','o','w','s','\\', + static const WCHAR basenameW[] = {'\\','S','e','s','s','i','o','n','s','\\','%','u', + '\\','W','i','n','d','o','w','s','\\', 'W','i','n','d','o','w','S','t','a','t','i','o','n','s',0}; + WCHAR buffer[64]; UNICODE_STRING str; OBJECT_ATTRIBUTES attr; @@ -68,7 +70,8 @@ static HANDLE get_winstations_dir_handle(void) { HANDLE dir; - RtlInitUnicodeString( &str, basenameW ); + sprintfW( buffer, basenameW, NtCurrentTeb()->Peb->SessionId ); + RtlInitUnicodeString( &str, buffer ); InitializeObjectAttributes( &attr, &str, 0, 0, NULL ); NtOpenDirectoryObject( &dir, DIRECTORY_CREATE_OBJECT | DIRECTORY_TRAVERSE, &attr ); if (InterlockedCompareExchangePointer( &handle, dir, 0 ) != 0) /* someone beat us here */