From c02407e9a3ea57fe51e88f0fc40d9552927fc634 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 8 Apr 2019 05:37:30 +0000 Subject: [PATCH] user32: Implement CWF_CREATE_ONLY flag for CreateWindowStation. Signed-off-by: Alistair Leslie-Hughes Signed-off-by: Alexandre Julliard --- dlls/user32/winstation.c | 11 ++++++----- include/winuser.h | 2 ++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/dlls/user32/winstation.c b/dlls/user32/winstation.c index 673917c14c9..4f53b43bd6c 100644 --- a/dlls/user32/winstation.c +++ b/dlls/user32/winstation.c @@ -83,26 +83,26 @@ static HANDLE get_winstations_dir_handle(void) /*********************************************************************** * CreateWindowStationA (USER32.@) */ -HWINSTA WINAPI CreateWindowStationA( LPCSTR name, DWORD reserved, ACCESS_MASK access, +HWINSTA WINAPI CreateWindowStationA( LPCSTR name, DWORD flags, ACCESS_MASK access, LPSECURITY_ATTRIBUTES sa ) { WCHAR buffer[MAX_PATH]; - if (!name) return CreateWindowStationW( NULL, reserved, access, sa ); + if (!name) return CreateWindowStationW( NULL, flags, access, sa ); if (!MultiByteToWideChar( CP_ACP, 0, name, -1, buffer, MAX_PATH )) { SetLastError( ERROR_FILENAME_EXCED_RANGE ); return 0; } - return CreateWindowStationW( buffer, reserved, access, sa ); + return CreateWindowStationW( buffer, flags, access, sa ); } /*********************************************************************** * CreateWindowStationW (USER32.@) */ -HWINSTA WINAPI CreateWindowStationW( LPCWSTR name, DWORD reserved, ACCESS_MASK access, +HWINSTA WINAPI CreateWindowStationW( LPCWSTR name, DWORD flags, ACCESS_MASK access, LPSECURITY_ATTRIBUTES sa ) { HANDLE ret; @@ -117,7 +117,8 @@ HWINSTA WINAPI CreateWindowStationW( LPCWSTR name, DWORD reserved, ACCESS_MASK a { req->flags = 0; req->access = access; - req->attributes = OBJ_CASE_INSENSITIVE | OBJ_OPENIF | + req->attributes = OBJ_CASE_INSENSITIVE | + ((flags & CWF_CREATE_ONLY) ? 0 : OBJ_OPENIF) | ((sa && sa->bInheritHandle) ? OBJ_INHERIT : 0); req->rootdir = wine_server_obj_handle( get_winstations_dir_handle() ); wine_server_add_data( req, name, len * sizeof(WCHAR) ); diff --git a/include/winuser.h b/include/winuser.h index 3cffaa19acd..28b9b1fbc34 100644 --- a/include/winuser.h +++ b/include/winuser.h @@ -101,6 +101,8 @@ typedef void* HPOWERNOTIFY; #define WSF_VISIBLE 1 #define DF_ALLOWOTHERACCOUNTHOOK 1 +#define CWF_CREATE_ONLY 0x01 + typedef struct tagUSEROBJECTFLAGS { BOOL fInherit; BOOL fReserved;