winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
July
June
May
April
March
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
October 2021
----- 2025 -----
July 2025
June 2025
May 2025
April 2025
March 2025
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
1165 discussions
Start a n
N
ew thread
Jacek Caban : win32u: Move winstation initialization from user32.
by Alexandre Julliard
14 Oct '21
14 Oct '21
Module: wine Branch: master Commit: 2c1d00f142382f79fc70fde85a5eb110a50f7a3f URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2c1d00f142382f79fc70fde8…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu Oct 14 15:22:40 2021 +0200 win32u: Move winstation initialization from user32. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/user32/user_main.c | 105 +------------------------------- dlls/win32u/font.c | 16 +---- dlls/win32u/syscall.c | 4 +- dlls/win32u/win32u_private.h | 17 ++++++ dlls/win32u/winstation.c | 138 ++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 160 insertions(+), 120 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=2c1d00f142382f79fc70…
1
0
0
0
Jacek Caban : win32u: Factor out reg_open_hkcu_key.
by Alexandre Julliard
14 Oct '21
14 Oct '21
Module: wine Branch: master Commit: d841b31aeee36f40436feab4e606dca2f8474f16 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=d841b31aeee36f40436feab4…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu Oct 14 15:21:54 2021 +0200 win32u: Factor out reg_open_hkcu_key. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/win32u/font.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/dlls/win32u/font.c b/dlls/win32u/font.c index e35aeefe61f..1f9c2adc21c 100644 --- a/dlls/win32u/font.c +++ b/dlls/win32u/font.c @@ -49,6 +49,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(font); static HKEY wine_fonts_key; static HKEY wine_fonts_cache_key; +static HKEY hkcu_key; struct font_physdev { @@ -616,6 +617,12 @@ static HKEY reg_create_key( HKEY root, const WCHAR *name, ULONG name_len, return ret; } +static HKEY reg_open_hkcu_key( const char *name ) +{ + WCHAR nameW[128]; + return reg_open_key( hkcu_key, nameW, asciiz_to_unicode( nameW, name ) - sizeof(WCHAR) ); +} + static void set_reg_value( HKEY hkey, const WCHAR *name, UINT type, const void *value, DWORD count ) { unsigned int name_size = name ? lstrlenW( name ) * sizeof(WCHAR) : 0; @@ -643,8 +650,8 @@ static ULONG query_reg_value( HKEY hkey, const WCHAR *name, return size - FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data); } -static ULONG query_reg_ascii_value( HKEY hkey, const char *name, - KEY_VALUE_PARTIAL_INFORMATION *info, ULONG size ) +ULONG query_reg_ascii_value( HKEY hkey, const char *name, + KEY_VALUE_PARTIAL_INFORMATION *info, ULONG size ) { WCHAR nameW[64]; asciiz_to_unicode( nameW, name ); @@ -4371,7 +4378,7 @@ static BOOL get_key_value( HKEY key, const char *name, DWORD *value ) return !!count; } -static UINT init_font_options( HKEY hkcu ) +static UINT init_font_options(void) { char value_buffer[FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data[20 * sizeof(WCHAR)])]; KEY_VALUE_PARTIAL_INFORMATION *info = (void *)value_buffer; @@ -4379,9 +4386,6 @@ static UINT init_font_options( HKEY hkcu ) DWORD i, val, gamma = 1400; UINT dpi = 0; - static const WCHAR desktop_keyW[] = - { 'C','o','n','t','r','o','l',' ','P','a','n','e','l','\\','D','e','s','k','t','o','p' }; - if (query_reg_ascii_value( wine_fonts_key, "AntialiasFakeBoldOrItalic", info, sizeof(value_buffer) ) && info->Type == REG_SZ) { @@ -4389,7 +4393,7 @@ static UINT init_font_options( HKEY hkcu ) antialias_fakes = (wcschr( valsW, *(const WCHAR *)info->Data ) != NULL); } - if ((key = reg_open_key( hkcu, desktop_keyW, sizeof(desktop_keyW) ))) + if ((key = reg_open_hkcu_key( "Control Panel\\Desktop" ))) { /* FIXME: handle vertical orientations even though Windows doesn't */ if (get_key_value( key, "FontSmoothingOrientation", &val )) @@ -6355,7 +6359,7 @@ UINT font_init(void) { OBJECT_ATTRIBUTES attr = { sizeof(attr) }; UNICODE_STRING name; - HANDLE mutex, hkcu; + HANDLE mutex; DWORD disposition; UINT dpi = 0; @@ -6366,10 +6370,9 @@ UINT font_init(void) {'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\','F','o','n','t','s'}; static const WCHAR cacheW[] = {'C','a','c','h','e'}; - if (!(hkcu = open_hkcu())) return 0; - wine_fonts_key = reg_create_key( hkcu, wine_fonts_keyW, sizeof(wine_fonts_keyW), 0, NULL ); - if (wine_fonts_key) dpi = init_font_options( hkcu ); - NtClose( hkcu ); + if (!(hkcu_key = open_hkcu())) return 0; + wine_fonts_key = reg_create_key( hkcu_key, wine_fonts_keyW, sizeof(wine_fonts_keyW), 0, NULL ); + if (wine_fonts_key) dpi = init_font_options(); if (!dpi) return 96; update_codepage( dpi );
1
0
0
0
Jacek Caban : win32u: Move NtUserOpenDesktop implementation from user32.
by Alexandre Julliard
14 Oct '21
14 Oct '21
Module: wine Branch: master Commit: c07dcf59689c7b9422c85ab5007d3eb659ab807a URL:
https://source.winehq.org/git/wine.git/?a=commit;h=c07dcf59689c7b9422c85ab5…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu Oct 14 15:21:33 2021 +0200 win32u: Move NtUserOpenDesktop implementation from user32. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/user32/winstation.c | 25 +++++++------------------ dlls/win32u/syscall.c | 1 + dlls/win32u/win32u.spec | 2 +- dlls/win32u/winstation.c | 24 ++++++++++++++++++++++++ dlls/wow64win/syscall.h | 1 + dlls/wow64win/user.c | 13 +++++++++++++ include/ntuser.h | 1 + 7 files changed, 48 insertions(+), 19 deletions(-) diff --git a/dlls/user32/winstation.c b/dlls/user32/winstation.c index 98afc499234..122d8486e1f 100644 --- a/dlls/user32/winstation.c +++ b/dlls/user32/winstation.c @@ -290,24 +290,13 @@ HDESK WINAPI OpenDesktopA( LPCSTR name, DWORD flags, BOOL inherit, ACCESS_MASK a HDESK open_winstation_desktop( HWINSTA hwinsta, LPCWSTR name, DWORD flags, BOOL inherit, ACCESS_MASK access ) { - HANDLE ret = 0; - DWORD len = name ? lstrlenW(name) : 0; - if (len >= MAX_PATH) - { - SetLastError( ERROR_FILENAME_EXCED_RANGE ); - return 0; - } - SERVER_START_REQ( open_desktop ) - { - req->winsta = wine_server_obj_handle( hwinsta ); - req->flags = flags; - req->access = access; - req->attributes = OBJ_CASE_INSENSITIVE | (inherit ? OBJ_INHERIT : 0); - wine_server_add_data( req, name, len * sizeof(WCHAR) ); - if (!wine_server_call_err( req )) ret = wine_server_ptr_handle( reply->handle ); - } - SERVER_END_REQ; - return ret; + OBJECT_ATTRIBUTES attr; + UNICODE_STRING str; + + RtlInitUnicodeString( &str, name ); + InitializeObjectAttributes( &attr, &str, OBJ_CASE_INSENSITIVE, hwinsta, NULL ); + if (inherit) attr.Attributes |= OBJ_INHERIT; + return NtUserOpenDesktop( &attr, flags, access ); } diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c index b4d5d718bf5..12b895eff9a 100644 --- a/dlls/win32u/syscall.c +++ b/dlls/win32u/syscall.c @@ -101,6 +101,7 @@ static void * const syscalls[] = NtUserGetObjectInformation, NtUserGetProcessWindowStation, NtUserGetThreadDesktop, + NtUserOpenDesktop, NtUserOpenInputDesktop, NtUserOpenWindowStation, NtUserSetObjectInformation, diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index bb800830f3d..1c5a960e59c 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -1091,7 +1091,7 @@ @ stub NtUserNotifyProcessCreate @ stub NtUserNotifyWinEvent @ stub NtUserOpenClipboard -@ stub NtUserOpenDesktop +@ stdcall -syscall NtUserOpenDesktop(ptr long long) @ stdcall -syscall NtUserOpenInputDesktop(long long long) @ stub NtUserOpenThreadDesktop @ stdcall -syscall NtUserOpenWindowStation(ptr long) diff --git a/dlls/win32u/winstation.c b/dlls/win32u/winstation.c index 0d0eefcf629..aff16e2a873 100644 --- a/dlls/win32u/winstation.c +++ b/dlls/win32u/winstation.c @@ -159,6 +159,30 @@ HDESK WINAPI NtUserCreateDesktopEx( OBJECT_ATTRIBUTES *attr, UNICODE_STRING *dev return ret; } +/*********************************************************************** + * NtUserOpenDesktop (win32u.@) + */ +HDESK WINAPI NtUserOpenDesktop( OBJECT_ATTRIBUTES *attr, DWORD flags, ACCESS_MASK access ) +{ + HANDLE ret = 0; + if (attr->ObjectName->Length >= MAX_PATH * sizeof(WCHAR)) + { + SetLastError( ERROR_FILENAME_EXCED_RANGE ); + return 0; + } + SERVER_START_REQ( open_desktop ) + { + req->winsta = wine_server_obj_handle( attr->RootDirectory ); + req->flags = flags; + req->access = access; + req->attributes = attr->Attributes; + wine_server_add_data( req, attr->ObjectName->Buffer, attr->ObjectName->Length ); + if (!wine_server_call_err( req )) ret = wine_server_ptr_handle( reply->handle ); + } + SERVER_END_REQ; + return ret; + } + /*********************************************************************** * NtUserCloseDesktop (win32u.@) */ diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h index a1dc08103d4..1d74d55e032 100644 --- a/dlls/wow64win/syscall.h +++ b/dlls/wow64win/syscall.h @@ -87,6 +87,7 @@ SYSCALL_ENTRY( NtUserCreateWindowStation ) \ SYSCALL_ENTRY( NtUserGetProcessWindowStation ) \ SYSCALL_ENTRY( NtUserGetThreadDesktop ) \ + SYSCALL_ENTRY( NtUserOpenDesktop ) \ SYSCALL_ENTRY( NtUserOpenInputDesktop ) \ SYSCALL_ENTRY( NtUserOpenWindowStation ) \ SYSCALL_ENTRY( NtUserSetObjectInformation ) \ diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index b20ff3f887b..b497b0edbdf 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -92,6 +92,19 @@ NTSTATUS WINAPI wow64_NtUserCreateDesktopEx( UINT *args ) return HandleToUlong( ret ); } +NTSTATUS WINAPI wow64_NtUserOpenDesktop( UINT *args ) +{ + OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args ); + DWORD flags = get_ulong( &args ); + ACCESS_MASK access = get_ulong( &args ); + + struct object_attr64 attr; + HANDLE ret; + + ret = NtUserOpenDesktop( objattr_32to64( &attr, attr32 ), flags, access ); + return HandleToUlong( ret ); +} + NTSTATUS WINAPI wow64_NtUserCloseDesktop( UINT *args ) { HDESK handle = get_handle( &args ); diff --git a/include/ntuser.h b/include/ntuser.h index 8687a6bbc59..daac994c84d 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -36,6 +36,7 @@ HWINSTA WINAPI NtUserGetProcessWindowStation(void); HDESK WINAPI NtUserGetThreadDesktop( DWORD thread ); HWINSTA WINAPI NtUserOpenWindowStation( OBJECT_ATTRIBUTES *attr, ACCESS_MASK access ); BOOL WINAPI NtUserSetObjectInformation( HANDLE handle, INT index, void *info, DWORD len ); +HDESK WINAPI NtUserOpenDesktop( OBJECT_ATTRIBUTES *attr, DWORD flags, ACCESS_MASK access ); HDESK WINAPI NtUserOpenInputDesktop( DWORD flags, BOOL inherit, ACCESS_MASK access ); BOOL WINAPI NtUserSetProcessWindowStation( HWINSTA handle ); BOOL WINAPI NtUserSetThreadDesktop( HDESK handle );
1
0
0
0
Jacek Caban : win32u: Move NtUserCreateDesktopEx implementation from user32.
by Alexandre Julliard
14 Oct '21
14 Oct '21
Module: wine Branch: master Commit: 50013758ff3caedb1b39f11d8a9313f95866d266 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=50013758ff3caedb1b39f11d…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu Oct 14 15:21:15 2021 +0200 win32u: Move NtUserCreateDesktopEx implementation from user32. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/user32/winstation.c | 27 ++++++++------------------- dlls/win32u/syscall.c | 1 + dlls/win32u/win32u.spec | 2 +- dlls/win32u/winstation.c | 32 ++++++++++++++++++++++++++++++++ dlls/wow64win/syscall.h | 1 + dlls/wow64win/user.c | 19 +++++++++++++++++++ include/ntuser.h | 4 ++++ 7 files changed, 66 insertions(+), 20 deletions(-) diff --git a/dlls/user32/winstation.c b/dlls/user32/winstation.c index ab1beed3c32..98afc499234 100644 --- a/dlls/user32/winstation.c +++ b/dlls/user32/winstation.c @@ -253,31 +253,20 @@ HDESK WINAPI CreateDesktopA( LPCSTR name, LPCSTR device, LPDEVMODEA devmode, HDESK WINAPI CreateDesktopW( LPCWSTR name, LPCWSTR device, LPDEVMODEW devmode, DWORD flags, ACCESS_MASK access, LPSECURITY_ATTRIBUTES sa ) { - HANDLE ret; - DWORD len = name ? lstrlenW(name) : 0; + OBJECT_ATTRIBUTES attr; + UNICODE_STRING str; if (device || devmode) { SetLastError( ERROR_INVALID_PARAMETER ); return 0; } - if (len >= MAX_PATH) - { - SetLastError( ERROR_FILENAME_EXCED_RANGE ); - return 0; - } - SERVER_START_REQ( create_desktop ) - { - req->flags = flags; - req->access = access; - req->attributes = OBJ_CASE_INSENSITIVE | OBJ_OPENIF | - ((sa && sa->bInheritHandle) ? OBJ_INHERIT : 0); - wine_server_add_data( req, name, len * sizeof(WCHAR) ); - wine_server_call_err( req ); - ret = wine_server_ptr_handle( reply->handle ); - } - SERVER_END_REQ; - return ret; + + RtlInitUnicodeString( &str, name ); + InitializeObjectAttributes( &attr, &str, OBJ_CASE_INSENSITIVE | OBJ_OPENIF, + get_winstations_dir_handle(), NULL ); + if (sa && sa->bInheritHandle) attr.Attributes |= OBJ_INHERIT; + return NtUserCreateDesktopEx( &attr, NULL, devmode, flags, access, 0 ); } diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c index e8c904f9f02..b4d5d718bf5 100644 --- a/dlls/win32u/syscall.c +++ b/dlls/win32u/syscall.c @@ -96,6 +96,7 @@ static void * const syscalls[] = NtGdiTransformPoints, NtUserCloseDesktop, NtUserCloseWindowStation, + NtUserCreateDesktopEx, NtUserCreateWindowStation, NtUserGetObjectInformation, NtUserGetProcessWindowStation, diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 860b3626931..bb800830f3d 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -809,7 +809,7 @@ @ stub NtUserCreateActivationObject @ stub NtUserCreateCaret @ stub NtUserCreateDCompositionHwndTarget -@ stub NtUserCreateDesktopEx +@ stdcall -syscall NtUserCreateDesktopEx(ptr ptr ptr long long long) @ stub NtUserCreateEmptyCursorObject @ stub NtUserCreateInputContext @ stub NtUserCreateLocalMemHandle diff --git a/dlls/win32u/winstation.c b/dlls/win32u/winstation.c index bd8420df05f..0d0eefcf629 100644 --- a/dlls/win32u/winstation.c +++ b/dlls/win32u/winstation.c @@ -127,6 +127,38 @@ BOOL WINAPI NtUserSetProcessWindowStation( HWINSTA handle ) return ret; } +/*********************************************************************** + * NtUserCreateDesktopEx (win32u.@) + */ +HDESK WINAPI NtUserCreateDesktopEx( OBJECT_ATTRIBUTES *attr, UNICODE_STRING *device, + DEVMODEW *devmode, DWORD flags, ACCESS_MASK access, + ULONG heap_size ) +{ + HANDLE ret; + + if ((device && device->Length) || devmode) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + if (attr->ObjectName->Length >= MAX_PATH * sizeof(WCHAR)) + { + SetLastError( ERROR_FILENAME_EXCED_RANGE ); + return 0; + } + SERVER_START_REQ( create_desktop ) + { + req->flags = flags; + req->access = access; + req->attributes = attr->Attributes; + wine_server_add_data( req, attr->ObjectName->Buffer, attr->ObjectName->Length ); + wine_server_call_err( req ); + ret = wine_server_ptr_handle( reply->handle ); + } + SERVER_END_REQ; + return ret; +} + /*********************************************************************** * NtUserCloseDesktop (win32u.@) */ diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h index 371ce3665fd..a1dc08103d4 100644 --- a/dlls/wow64win/syscall.h +++ b/dlls/wow64win/syscall.h @@ -83,6 +83,7 @@ SYSCALL_ENTRY( NtGdiTransformPoints ) \ SYSCALL_ENTRY( NtUserCloseDesktop ) \ SYSCALL_ENTRY( NtUserCloseWindowStation ) \ + SYSCALL_ENTRY( NtUserCreateDesktopEx ) \ SYSCALL_ENTRY( NtUserCreateWindowStation ) \ SYSCALL_ENTRY( NtUserGetProcessWindowStation ) \ SYSCALL_ENTRY( NtUserGetThreadDesktop ) \ diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 80e85f8a631..b20ff3f887b 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -73,6 +73,25 @@ NTSTATUS WINAPI wow64_NtUserSetProcessWindowStation( UINT *args ) return NtUserSetProcessWindowStation( handle ); } +NTSTATUS WINAPI wow64_NtUserCreateDesktopEx( UINT *args ) +{ + OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args ); + UNICODE_STRING32 *device32 = get_ptr( &args ); + DEVMODEW *devmode = get_ptr( &args ); + DWORD flags = get_ulong( &args ); + ACCESS_MASK access = get_ulong( &args ); + ULONG heap_size = get_ulong( &args ); + + struct object_attr64 attr; + UNICODE_STRING device; + HANDLE ret; + + ret = NtUserCreateDesktopEx( objattr_32to64( &attr, attr32 ), + unicode_str_32to64( &device, device32 ), + devmode, flags, access, heap_size ); + return HandleToUlong( ret ); +} + NTSTATUS WINAPI wow64_NtUserCloseDesktop( UINT *args ) { HDESK handle = get_handle( &args ); diff --git a/include/ntuser.h b/include/ntuser.h index 648d4a3350d..8687a6bbc59 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -20,10 +20,14 @@ #define _NTUSER_ #include <winuser.h> +#include <wingdi.h> #include <winternl.h> BOOL WINAPI NtUserCloseDesktop( HDESK handle ); BOOL WINAPI NtUserCloseWindowStation( HWINSTA handle ); +HDESK WINAPI NtUserCreateDesktopEx( OBJECT_ATTRIBUTES *attr, UNICODE_STRING *device, + DEVMODEW *devmode, DWORD flags, ACCESS_MASK access, + ULONG heap_size ); HWINSTA WINAPI NtUserCreateWindowStation( OBJECT_ATTRIBUTES *attr, ACCESS_MASK mask, ULONG arg3, ULONG arg4, ULONG arg5, ULONG arg6, ULONG arg7 ); BOOL WINAPI NtUserGetObjectInformation( HANDLE handle, INT index, void *info,
1
0
0
0
Jacek Caban : win32u: Move NtUserOpenWindowStation implementation from user32.
by Alexandre Julliard
14 Oct '21
14 Oct '21
Module: wine Branch: master Commit: fd840680abada377cf0f2c054a33d4d3c2ff5436 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=fd840680abada377cf0f2c05…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu Oct 14 15:20:56 2021 +0200 win32u: Move NtUserOpenWindowStation implementation from user32. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/user32/winstation.c | 33 +++++++++++---------------------- dlls/win32u/syscall.c | 1 + dlls/win32u/win32u.spec | 2 +- dlls/win32u/winstation.c | 19 +++++++++++++++++++ dlls/wow64win/syscall.h | 1 + dlls/wow64win/user.c | 10 ++++++++++ include/ntuser.h | 1 + 7 files changed, 44 insertions(+), 23 deletions(-) diff --git a/dlls/user32/winstation.c b/dlls/user32/winstation.c index c619d3d4658..ab1beed3c32 100644 --- a/dlls/user32/winstation.c +++ b/dlls/user32/winstation.c @@ -163,28 +163,17 @@ HWINSTA WINAPI OpenWindowStationA( LPCSTR name, BOOL inherit, ACCESS_MASK access */ HWINSTA WINAPI OpenWindowStationW( LPCWSTR name, BOOL inherit, ACCESS_MASK access ) { - HANDLE ret = 0; - DWORD len = name ? lstrlenW(name) : 0; - if (len >= MAX_PATH) - { - SetLastError( ERROR_FILENAME_EXCED_RANGE ); - return 0; - } - if (!len) - { - name = get_winstation_default_name(); - len = lstrlenW( name ); - } - SERVER_START_REQ( open_winstation ) - { - req->access = access; - req->attributes = OBJ_CASE_INSENSITIVE | (inherit ? OBJ_INHERIT : 0); - req->rootdir = wine_server_obj_handle( get_winstations_dir_handle() ); - wine_server_add_data( req, name, len * sizeof(WCHAR) ); - if (!wine_server_call_err( req )) ret = wine_server_ptr_handle( reply->handle ); - } - SERVER_END_REQ; - return ret; + OBJECT_ATTRIBUTES attr; + UNICODE_STRING str; + + RtlInitUnicodeString( &str, name ); + if (!str.Length) RtlInitUnicodeString( &str, get_winstation_default_name() ); + + InitializeObjectAttributes( &attr, &str, OBJ_CASE_INSENSITIVE, + get_winstations_dir_handle(), NULL ); + if (inherit) attr.Attributes |= OBJ_INHERIT; + + return NtUserOpenWindowStation( &attr, access ); } diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c index fb1bcfef093..e8c904f9f02 100644 --- a/dlls/win32u/syscall.c +++ b/dlls/win32u/syscall.c @@ -101,6 +101,7 @@ static void * const syscalls[] = NtUserGetProcessWindowStation, NtUserGetThreadDesktop, NtUserOpenInputDesktop, + NtUserOpenWindowStation, NtUserSetObjectInformation, NtUserSetProcessWindowStation, NtUserSetThreadDesktop, diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 013e8b89694..860b3626931 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -1094,7 +1094,7 @@ @ stub NtUserOpenDesktop @ stdcall -syscall NtUserOpenInputDesktop(long long long) @ stub NtUserOpenThreadDesktop -@ stub NtUserOpenWindowStation +@ stdcall -syscall NtUserOpenWindowStation(ptr long) @ stub NtUserPaintDesktop @ stub NtUserPaintMenuBar @ stub NtUserPaintMonitor diff --git a/dlls/win32u/winstation.c b/dlls/win32u/winstation.c index a0afe3a9606..bd8420df05f 100644 --- a/dlls/win32u/winstation.c +++ b/dlls/win32u/winstation.c @@ -61,6 +61,25 @@ HWINSTA WINAPI NtUserCreateWindowStation( OBJECT_ATTRIBUTES *attr, ACCESS_MASK a return ret; } +/****************************************************************************** + * NtUserOpenWindowStation (win32u.@) + */ +HWINSTA WINAPI NtUserOpenWindowStation( OBJECT_ATTRIBUTES *attr, ACCESS_MASK access ) +{ + HANDLE ret = 0; + + SERVER_START_REQ( open_winstation ) + { + req->access = access; + req->attributes = attr->Attributes; + req->rootdir = wine_server_obj_handle( attr->RootDirectory ); + wine_server_add_data( req, attr->ObjectName->Buffer, attr->ObjectName->Length ); + if (!wine_server_call_err( req )) ret = wine_server_ptr_handle( reply->handle ); + } + SERVER_END_REQ; + return ret; +} + /*********************************************************************** * NtUserCloseWindowStation (win32u.@) */ diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h index 66b48f47154..371ce3665fd 100644 --- a/dlls/wow64win/syscall.h +++ b/dlls/wow64win/syscall.h @@ -87,6 +87,7 @@ SYSCALL_ENTRY( NtUserGetProcessWindowStation ) \ SYSCALL_ENTRY( NtUserGetThreadDesktop ) \ SYSCALL_ENTRY( NtUserOpenInputDesktop ) \ + SYSCALL_ENTRY( NtUserOpenWindowStation ) \ SYSCALL_ENTRY( NtUserSetObjectInformation ) \ SYSCALL_ENTRY( NtUserSetProcessWindowStation ) \ SYSCALL_ENTRY( NtUserSetThreadDesktop ) diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index bab04018163..80e85f8a631 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -44,6 +44,16 @@ NTSTATUS WINAPI wow64_NtUserCreateWindowStation( UINT *args ) arg3, arg4, arg5, arg6, arg7 )); } +NTSTATUS WINAPI wow64_NtUserOpenWindowStation( UINT *args ) +{ + OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args ); + ACCESS_MASK access = get_ulong( &args ); + + struct object_attr64 attr; + + return HandleToUlong( NtUserOpenWindowStation( objattr_32to64( &attr, attr32 ), access )); +} + NTSTATUS WINAPI wow64_NtUserCloseWindowStation( UINT *args ) { HWINSTA handle = get_handle( &args ); diff --git a/include/ntuser.h b/include/ntuser.h index c0976cac73d..648d4a3350d 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -30,6 +30,7 @@ BOOL WINAPI NtUserGetObjectInformation( HANDLE handle, INT index, void *info, DWORD len, DWORD *needed ); HWINSTA WINAPI NtUserGetProcessWindowStation(void); HDESK WINAPI NtUserGetThreadDesktop( DWORD thread ); +HWINSTA WINAPI NtUserOpenWindowStation( OBJECT_ATTRIBUTES *attr, ACCESS_MASK access ); BOOL WINAPI NtUserSetObjectInformation( HANDLE handle, INT index, void *info, DWORD len ); HDESK WINAPI NtUserOpenInputDesktop( DWORD flags, BOOL inherit, ACCESS_MASK access ); BOOL WINAPI NtUserSetProcessWindowStation( HWINSTA handle );
1
0
0
0
Jacek Caban : win32u: Move NtUserCreateWindowStation implementation from user32.
by Alexandre Julliard
14 Oct '21
14 Oct '21
Module: wine Branch: master Commit: 1d30bac773ba95fdb49ff4ca15ab5ea810f6a05f URL:
https://source.winehq.org/git/wine.git/?a=commit;h=1d30bac773ba95fdb49ff4ca…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu Oct 14 15:20:42 2021 +0200 win32u: Move NtUserCreateWindowStation implementation from user32. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/user32/winstation.c | 37 +++++++--------------- dlls/win32u/syscall.c | 1 + dlls/win32u/win32u.spec | 2 +- dlls/win32u/winstation.c | 28 +++++++++++++++++ dlls/wow64win/syscall.h | 1 + dlls/wow64win/user.c | 17 ++++++++++ dlls/wow64win/wow64win_private.h | 67 ++++++++++++++++++++++++++++++++++++++++ include/ntuser.h | 2 ++ 8 files changed, 128 insertions(+), 27 deletions(-) diff --git a/dlls/user32/winstation.c b/dlls/user32/winstation.c index e2c4f0f251f..c619d3d4658 100644 --- a/dlls/user32/winstation.c +++ b/dlls/user32/winstation.c @@ -125,33 +125,18 @@ HWINSTA WINAPI CreateWindowStationA( LPCSTR name, DWORD flags, ACCESS_MASK acces HWINSTA WINAPI CreateWindowStationW( LPCWSTR name, DWORD flags, ACCESS_MASK access, LPSECURITY_ATTRIBUTES sa ) { - HANDLE ret; - DWORD len = name ? lstrlenW(name) : 0; + OBJECT_ATTRIBUTES attr; + UNICODE_STRING str; - if (len >= MAX_PATH) - { - SetLastError( ERROR_FILENAME_EXCED_RANGE ); - return 0; - } - if (!len) - { - name = get_winstation_default_name(); - len = lstrlenW( name ); - } - SERVER_START_REQ( create_winstation ) - { - req->flags = 0; - req->access = access; - 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) ); - wine_server_call_err( req ); - ret = wine_server_ptr_handle( reply->handle ); - } - SERVER_END_REQ; - return ret; + RtlInitUnicodeString( &str, name ); + if (!str.Length) RtlInitUnicodeString( &str, get_winstation_default_name() ); + + InitializeObjectAttributes( &attr, &str, OBJ_CASE_INSENSITIVE, + get_winstations_dir_handle(), sa ); + if (!(flags & CWF_CREATE_ONLY)) attr.Attributes |= OBJ_OPENIF; + if (sa && sa->bInheritHandle) attr.Attributes |= OBJ_INHERIT; + + return NtUserCreateWindowStation( &attr, access, 0, 0, 0, 0, 0 ); } diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c index f54098c5d4f..fb1bcfef093 100644 --- a/dlls/win32u/syscall.c +++ b/dlls/win32u/syscall.c @@ -96,6 +96,7 @@ static void * const syscalls[] = NtGdiTransformPoints, NtUserCloseDesktop, NtUserCloseWindowStation, + NtUserCreateWindowStation, NtUserGetObjectInformation, NtUserGetProcessWindowStation, NtUserGetThreadDesktop, diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index c82e974be04..013e8b89694 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -816,7 +816,7 @@ @ stub NtUserCreatePalmRejectionDelayZone @ stub NtUserCreateWindowEx @ stub NtUserCreateWindowGroup -@ stub NtUserCreateWindowStation +@ stdcall -syscall NtUserCreateWindowStation(ptr long long long long long long) @ stub NtUserCtxDisplayIOCtl @ stub NtUserDdeInitialize @ stub NtUserDefSetText diff --git a/dlls/win32u/winstation.c b/dlls/win32u/winstation.c index e787cc3884c..a0afe3a9606 100644 --- a/dlls/win32u/winstation.c +++ b/dlls/win32u/winstation.c @@ -33,6 +33,34 @@ WINE_DEFAULT_DEBUG_CHANNEL(winstation); +/*********************************************************************** + * NtUserCreateWindowStation (win32u.@) + */ +HWINSTA WINAPI NtUserCreateWindowStation( OBJECT_ATTRIBUTES *attr, ACCESS_MASK access, ULONG arg3, + ULONG arg4, ULONG arg5, ULONG arg6, ULONG arg7 ) +{ + HANDLE ret; + + if (attr->ObjectName->Length >= MAX_PATH * sizeof(WCHAR)) + { + SetLastError( ERROR_FILENAME_EXCED_RANGE ); + return 0; + } + + SERVER_START_REQ( create_winstation ) + { + req->flags = 0; + req->access = access; + req->attributes = attr->Attributes; + req->rootdir = wine_server_obj_handle( attr->RootDirectory ); + wine_server_add_data( req, attr->ObjectName->Buffer, attr->ObjectName->Length ); + wine_server_call_err( req ); + ret = wine_server_ptr_handle( reply->handle ); + } + SERVER_END_REQ; + return ret; +} + /*********************************************************************** * NtUserCloseWindowStation (win32u.@) */ diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h index 303bdf08c57..66b48f47154 100644 --- a/dlls/wow64win/syscall.h +++ b/dlls/wow64win/syscall.h @@ -83,6 +83,7 @@ SYSCALL_ENTRY( NtGdiTransformPoints ) \ SYSCALL_ENTRY( NtUserCloseDesktop ) \ SYSCALL_ENTRY( NtUserCloseWindowStation ) \ + SYSCALL_ENTRY( NtUserCreateWindowStation ) \ SYSCALL_ENTRY( NtUserGetProcessWindowStation ) \ SYSCALL_ENTRY( NtUserGetThreadDesktop ) \ SYSCALL_ENTRY( NtUserOpenInputDesktop ) \ diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 59286969283..bab04018163 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -27,6 +27,23 @@ #include "ntuser.h" #include "wow64win_private.h" + +NTSTATUS WINAPI wow64_NtUserCreateWindowStation( UINT *args ) +{ + OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args ); + ACCESS_MASK access = get_ulong( &args ); + ULONG arg3 = get_ulong( &args ); + ULONG arg4 = get_ulong( &args ); + ULONG arg5 = get_ulong( &args ); + ULONG arg6 = get_ulong( &args ); + ULONG arg7 = get_ulong( &args ); + + struct object_attr64 attr; + + return HandleToUlong( NtUserCreateWindowStation( objattr_32to64( &attr, attr32 ), access, + arg3, arg4, arg5, arg6, arg7 )); +} + NTSTATUS WINAPI wow64_NtUserCloseWindowStation( UINT *args ) { HWINSTA handle = get_handle( &args ); diff --git a/dlls/wow64win/wow64win_private.h b/dlls/wow64win/wow64win_private.h index 3d32955a9d6..3a6156f41b2 100644 --- a/dlls/wow64win/wow64win_private.h +++ b/dlls/wow64win/wow64win_private.h @@ -27,6 +27,23 @@ ALL_WIN32_SYSCALLS #undef SYSCALL_ENTRY +struct object_attr64 +{ + OBJECT_ATTRIBUTES attr; + UNICODE_STRING str; + SECURITY_DESCRIPTOR sd; +}; + +typedef struct +{ + ULONG Length; + ULONG RootDirectory; + ULONG ObjectName; + ULONG Attributes; + ULONG SecurityDescriptor; + ULONG SecurityQualityOfService; +} OBJECT_ATTRIBUTES32; + static inline ULONG get_ulong( UINT **args ) { return *(*args)++; } static inline HANDLE get_handle( UINT **args ) { return LongToHandle( *(*args)++ ); } static inline void *get_ptr( UINT **args ) { return ULongToPtr( *(*args)++ ); } @@ -55,4 +72,54 @@ static inline void put_size( ULONG *size32, SIZE_T size ) if (size32) *size32 = min( size, MAXDWORD ); } +static inline UNICODE_STRING *unicode_str_32to64( UNICODE_STRING *str, const UNICODE_STRING32 *str32 ) +{ + if (!str32) return NULL; + str->Length = str32->Length; + str->MaximumLength = str32->MaximumLength; + str->Buffer = ULongToPtr( str32->Buffer ); + return str; +} + +static inline SECURITY_DESCRIPTOR *secdesc_32to64( SECURITY_DESCRIPTOR *out, const SECURITY_DESCRIPTOR *in ) +{ + /* relative descr has the same layout for 32 and 64 */ + const SECURITY_DESCRIPTOR_RELATIVE *sd = (const SECURITY_DESCRIPTOR_RELATIVE *)in; + + if (!in) return NULL; + out->Revision = sd->Revision; + out->Sbz1 = sd->Sbz1; + out->Control = sd->Control & ~SE_SELF_RELATIVE; + if (sd->Control & SE_SELF_RELATIVE) + { + if (sd->Owner) out->Owner = (PSID)((BYTE *)sd + sd->Owner); + if (sd->Group) out->Group = (PSID)((BYTE *)sd + sd->Group); + if ((sd->Control & SE_SACL_PRESENT) && sd->Sacl) out->Sacl = (PSID)((BYTE *)sd + sd->Sacl); + if ((sd->Control & SE_DACL_PRESENT) && sd->Dacl) out->Dacl = (PSID)((BYTE *)sd + sd->Dacl); + } + else + { + out->Owner = ULongToPtr( sd->Owner ); + out->Group = ULongToPtr( sd->Group ); + if (sd->Control & SE_SACL_PRESENT) out->Sacl = ULongToPtr( sd->Sacl ); + if (sd->Control & SE_DACL_PRESENT) out->Dacl = ULongToPtr( sd->Dacl ); + } + return out; +} + +static inline OBJECT_ATTRIBUTES *objattr_32to64( struct object_attr64 *out, const OBJECT_ATTRIBUTES32 *in ) +{ + memset( out, 0, sizeof(*out) ); + if (!in) return NULL; + if (in->Length != sizeof(*in)) return &out->attr; + + out->attr.Length = sizeof(out->attr); + out->attr.RootDirectory = LongToHandle( in->RootDirectory ); + out->attr.Attributes = in->Attributes; + out->attr.ObjectName = unicode_str_32to64( &out->str, ULongToPtr( in->ObjectName )); + out->attr.SecurityQualityOfService = ULongToPtr( in->SecurityQualityOfService ); + out->attr.SecurityDescriptor = secdesc_32to64( &out->sd, ULongToPtr( in->SecurityDescriptor )); + return &out->attr; +} + #endif /* __WOW64WIN_PRIVATE_H */ diff --git a/include/ntuser.h b/include/ntuser.h index e5d16afdd53..c0976cac73d 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -24,6 +24,8 @@ BOOL WINAPI NtUserCloseDesktop( HDESK handle ); BOOL WINAPI NtUserCloseWindowStation( HWINSTA handle ); +HWINSTA WINAPI NtUserCreateWindowStation( OBJECT_ATTRIBUTES *attr, ACCESS_MASK mask, ULONG arg3, + ULONG arg4, ULONG arg5, ULONG arg6, ULONG arg7 ); BOOL WINAPI NtUserGetObjectInformation( HANDLE handle, INT index, void *info, DWORD len, DWORD *needed ); HWINSTA WINAPI NtUserGetProcessWindowStation(void);
1
0
0
0
Alistair Leslie-Hughes : include: Use known variables names in SYSTEM_INTERRUPT_INFORMATION.
by Alexandre Julliard
14 Oct '21
14 Oct '21
Module: wine Branch: master Commit: 3adee2ce3aed9d0f4e1ae49fe310cc82d454faf9 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=3adee2ce3aed9d0f4e1ae49f…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Thu Oct 14 19:45:57 2021 +1100 include: Use known variables names in SYSTEM_INTERRUPT_INFORMATION. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- include/winternl.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/winternl.h b/include/winternl.h index 46ee508e89f..6b1c5b11b4f 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -2469,7 +2469,12 @@ typedef struct _SYSTEM_CACHE_INFORMATION { /* System Information Class 0x17 */ typedef struct _SYSTEM_INTERRUPT_INFORMATION { - BYTE Reserved1[24]; + ULONG ContextSwitches; + ULONG DpcCount; + ULONG DpcRate; + ULONG TimeIncrement; + ULONG DpcBypassCount; + ULONG ApcBypassCount; } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION; typedef struct _SYSTEM_CONFIGURATION_INFO {
1
0
0
0
Alistair Leslie-Hughes : dbghelp: Support UWOP_EPILOG in unwind.
by Alexandre Julliard
14 Oct '21
14 Oct '21
Module: wine Branch: master Commit: 40f0119739d36b03f4df5d525d098ec032f1a37b URL:
https://source.winehq.org/git/wine.git/?a=commit;h=40f0119739d36b03f4df5d52…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Thu Oct 14 19:45:56 2021 +1100 dbghelp: Support UWOP_EPILOG in unwind. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dbghelp/cpu_x86_64.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/dlls/dbghelp/cpu_x86_64.c b/dlls/dbghelp/cpu_x86_64.c index 8e8ac85dd2f..4fd8d76e010 100644 --- a/dlls/dbghelp/cpu_x86_64.c +++ b/dlls/dbghelp/cpu_x86_64.c @@ -209,6 +209,19 @@ static void dump_unwind_info(struct cpu_stack_walk* csw, ULONG64 base, RUNTIME_F case UWOP_PUSH_MACHFRAME: TRACE("PUSH_MACHFRAME %u\n", info->UnwindCode[i].u.OpInfo); break; + case UWOP_EPILOG: + if (info->Version == 2) + { + unsigned int offset; + if (info->UnwindCode[i].u.OpInfo) + offset = info->UnwindCode[i].u.CodeOffset; + else + offset = (info->UnwindCode[i+1].u.OpInfo << 8) + info->UnwindCode[i+1].u.CodeOffset; + TRACE("UWOP_EPILOG %u offset %u\n", info->UnwindCode[i].u.OpInfo, offset); + i += 1; + break; + } + /* Fall through */ default: FIXME("unknown code %u\n", info->UnwindCode[i].u.UnwindOp); break; @@ -490,7 +503,7 @@ static BOOL interpret_function_table_entry(struct cpu_stack_walk* csw, return FALSE; } - if (info->Version != 1) + if (info->Version != 1 && info->Version != 2) { WARN("unknown unwind info version %u at %lx\n", info->Version, base + function->UnwindData); return FALSE;
1
0
0
0
Rémi Bernon : joy.cpl: Better handle effect creation errors.
by Alexandre Julliard
14 Oct '21
14 Oct '21
Module: wine Branch: master Commit: 960bb3694143bfd4130229bc7ba7e3d315afa084 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=960bb3694143bfd4130229bc…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Thu Oct 14 09:39:55 2021 +0200 joy.cpl: Better handle effect creation errors. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=51873
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/joy.cpl/main.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dlls/joy.cpl/main.c b/dlls/joy.cpl/main.c index 4431669eee8..c96efb17aa3 100644 --- a/dlls/joy.cpl/main.c +++ b/dlls/joy.cpl/main.c @@ -867,6 +867,11 @@ static BOOL CALLBACK ff_effects_callback(const DIEFFECTINFOW *pdei, void *pvRef) hr = IDirectInputDevice2_CreateEffect( joystick->device, &pdei->guid, &dieffect, &joystick->effects[joystick->cur_effect].effect, NULL); + if (FAILED(hr)) + { + FIXME("Failed to create effect with type %s, hr %#x\n", debugstr_guid(&pdei->guid), hr); + return DIENUM_CONTINUE; + } joystick->effects[joystick->cur_effect].params = dieffect; joystick->effects[joystick->cur_effect].info = *pdei;
1
0
0
0
Rémi Bernon : joy.cpl: Consistently use the 32 buttons limit from DIJOYSTATE.
by Alexandre Julliard
14 Oct '21
14 Oct '21
Module: wine Branch: master Commit: f10171251024d779946b6d62ebbf59b26b938c9c URL:
https://source.winehq.org/git/wine.git/?a=commit;h=f10171251024d779946b6d62…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Thu Oct 14 09:39:54 2021 +0200 joy.cpl: Consistently use the 32 buttons limit from DIJOYSTATE. Based on a patch from Ivo Ivanov <logos128(a)gmail.com>. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=51873
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/joy.cpl/main.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dlls/joy.cpl/main.c b/dlls/joy.cpl/main.c index 1498021db66..4431669eee8 100644 --- a/dlls/joy.cpl/main.c +++ b/dlls/joy.cpl/main.c @@ -414,7 +414,7 @@ static INT_PTR CALLBACK list_dlgproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM * Joystick testing functions * */ -static void dump_joy_state(DIJOYSTATE* st, int num_buttons) +static void dump_joy_state(DIJOYSTATE* st) { int i; TRACE("Ax (% 5d,% 5d,% 5d)\n", st->lX,st->lY, st->lZ); @@ -423,7 +423,7 @@ static void dump_joy_state(DIJOYSTATE* st, int num_buttons) TRACE("Pov (% 5d,% 5d,% 5d,% 5d)\n", st->rgdwPOV[0], st->rgdwPOV[1], st->rgdwPOV[2], st->rgdwPOV[3]); TRACE("Buttons "); - for(i=0; i < num_buttons; i++) + for(i=0; i < TEST_MAX_BUTTONS; i++) TRACE(" %c",st->rgbButtons[i] ? 'x' : 'o'); TRACE("\n"); } @@ -474,10 +474,10 @@ static DWORD WINAPI input_thread(void *param) poll_input(&data->joysticks[data->chosen_joystick], &state); - dump_joy_state(&state, data->joysticks[data->chosen_joystick].num_buttons); + dump_joy_state(&state); /* Indicate pressed buttons */ - for (i = 0; i < data->joysticks[data->chosen_joystick].num_buttons; i++) + for (i = 0; i < TEST_MAX_BUTTONS; i++) SendMessageW(data->graphics.buttons[i], BM_SETSTATE, !!state.rgbButtons[i], 0); /* Indicate axis positions, axes showing are hardcoded for now */ @@ -766,7 +766,7 @@ static DWORD WINAPI ff_input_thread(void *param) SetWindowPos(data->graphics.ff_axis, 0, r.left, r.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE); - for (i=0; i < joy->num_buttons; i++) + for (i=0; i < TEST_MAX_BUTTONS; i++) if (state.rgbButtons[i]) { IDirectInputEffect_SetParameters(joy->effects[chosen_effect].effect, dieffect, flags);
1
0
0
0
← Newer
1
...
62
63
64
65
66
67
68
...
117
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
Results per page:
10
25
50
100
200