From 5087d8a8d91c5388c4d00e5149faa68e178dfeaa Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Wed, 23 Sep 2020 17:31:14 -0500 Subject: [PATCH] Rebase against 1a7b256f7c69c50c2a216317e03f9caeb268d0af. --- ...ement-some-processor-group-functions.patch | 26 +-- ...user32-Improve-GetKeyboardLayoutList.patch | 28 +-- patches/mfplat-streaming-support/definition | 1 + ...0001-ntdll-Fix-holes-in-ELF-mappings.patch | 10 +- ...mporary-signal-handler-during-proces.patch | 34 +-- ...andle-PAGE_WRITECOPY-protection.-try.patch | 16 +- patches/patchinstall.sh | 92 +------- ...ct-type-behavior-for-different-windo.patch | 28 +-- ...eference-to-the-parent-object-for-pi.patch | 219 ------------------ patches/server-Pipe_ObjectName/definition | 5 - ...per-function-set_sd_from_token_inter.patch | 34 +-- ...-handling-of-invert_y-in-DrawTextExW.patch | 20 +- ...nput-message-type-to-send_hardware_m.patch | 60 ++--- patches/ws2_32-TransmitFile/definition | 2 + staging/upstream-commit | 2 +- 15 files changed, 131 insertions(+), 446 deletions(-) delete mode 100644 patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch delete mode 100644 patches/server-Pipe_ObjectName/definition diff --git a/patches/kernel32-Processor_Group/0001-kernel32-Implement-some-processor-group-functions.patch b/patches/kernel32-Processor_Group/0001-kernel32-Implement-some-processor-group-functions.patch index d421f78b..380756c9 100644 --- a/patches/kernel32-Processor_Group/0001-kernel32-Implement-some-processor-group-functions.patch +++ b/patches/kernel32-Processor_Group/0001-kernel32-Implement-some-processor-group-functions.patch @@ -1,4 +1,4 @@ -From 95aeebee8fa45177e8b721aca8528d7b89c19054 Mon Sep 17 00:00:00 2001 +From c37ee83fb56f540a9fcb04c800ca3a6e94295e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 4 Feb 2017 16:20:37 +0100 Subject: [PATCH] kernel32: Implement some processor group functions. @@ -38,7 +38,7 @@ index 4998af04d9b..5ce8e24713b 100644 @ stdcall GetNamedPipeServerProcessId(long ptr) kernel32.GetNamedPipeServerProcessId @ stdcall GetNumaAvailableMemoryNodeEx(long ptr) kernel32.GetNumaAvailableMemoryNodeEx diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec -index 5671ae7e93d..188c62636e6 100644 +index 4b09f359b97..c1bb03080c7 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -719,7 +719,7 @@ @@ -51,10 +51,10 @@ index 5671ae7e93d..188c62636e6 100644 @ stdcall -import GetModuleFileNameW(long ptr long) @ stdcall -import GetModuleHandleA(str) diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c -index 0cf45faf0f3..afed492873c 100644 +index ff4e79ff2b7..c0d1d8b9294 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c -@@ -726,7 +726,9 @@ HRESULT WINAPI RegisterApplicationRecoveryCallback(APPLICATION_RECOVERY_CALLBACK +@@ -624,7 +624,9 @@ HRESULT WINAPI RegisterApplicationRecoveryCallback(APPLICATION_RECOVERY_CALLBACK */ WORD WINAPI GetActiveProcessorGroupCount(void) { @@ -65,7 +65,7 @@ index 0cf45faf0f3..afed492873c 100644 return 1; } -@@ -735,10 +737,14 @@ WORD WINAPI GetActiveProcessorGroupCount(void) +@@ -633,10 +635,14 @@ WORD WINAPI GetActiveProcessorGroupCount(void) */ DWORD WINAPI GetActiveProcessorCount(WORD group) { @@ -83,7 +83,7 @@ index 0cf45faf0f3..afed492873c 100644 } /*********************************************************************** -@@ -752,6 +758,18 @@ DWORD WINAPI GetMaximumProcessorCount(WORD group) +@@ -650,6 +656,18 @@ DWORD WINAPI GetMaximumProcessorCount(WORD group) return cpus; } @@ -103,10 +103,10 @@ index 0cf45faf0f3..afed492873c 100644 * GetFirmwareEnvironmentVariableA (KERNEL32.@) */ diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c -index 5bd7b71d63e..58ccbfbdacc 100644 +index 109322d6844..bdcbd4329b8 100644 --- a/dlls/kernel32/tests/process.c +++ b/dlls/kernel32/tests/process.c -@@ -93,6 +93,7 @@ static SIZE_T (WINAPI *pGetLargePageMinimum)(void); +@@ -90,6 +90,7 @@ static SIZE_T (WINAPI *pGetLargePageMinimum)(void); static BOOL (WINAPI *pInitializeProcThreadAttributeList)(struct _PROC_THREAD_ATTRIBUTE_LIST*, DWORD, DWORD, SIZE_T*); static BOOL (WINAPI *pUpdateProcThreadAttribute)(struct _PROC_THREAD_ATTRIBUTE_LIST*, DWORD, DWORD_PTR, void *,SIZE_T,void*,SIZE_T*); static void (WINAPI *pDeleteProcThreadAttributeList)(struct _PROC_THREAD_ATTRIBUTE_LIST*); @@ -114,7 +114,7 @@ index 5bd7b71d63e..58ccbfbdacc 100644 /* ############################### */ static char base[MAX_PATH]; -@@ -276,6 +277,7 @@ static BOOL init(void) +@@ -270,6 +271,7 @@ static BOOL init(void) pInitializeProcThreadAttributeList = (void *)GetProcAddress(hkernel32, "InitializeProcThreadAttributeList"); pUpdateProcThreadAttribute = (void *)GetProcAddress(hkernel32, "UpdateProcThreadAttribute"); pDeleteProcThreadAttributeList = (void *)GetProcAddress(hkernel32, "DeleteProcThreadAttributeList"); @@ -122,8 +122,8 @@ index 5bd7b71d63e..58ccbfbdacc 100644 return TRUE; } -@@ -4185,6 +4187,26 @@ void test_parent_process_attribute(unsigned int level, HANDLE read_pipe) - } +@@ -4139,6 +4141,26 @@ static void test_handle_list_attribute(BOOL child, HANDLE handle1, HANDLE handle + CloseHandle(pipe[1]); } +static void test_GetActiveProcessorCount(void) @@ -148,8 +148,8 @@ index 5bd7b71d63e..58ccbfbdacc 100644 + START_TEST(process) { - HANDLE job; -@@ -4296,6 +4318,7 @@ START_TEST(process) + HANDLE job, hproc, h, h2; +@@ -4254,6 +4276,7 @@ START_TEST(process) test_GetNumaProcessorNode(); test_session_info(); test_GetLogicalProcessorInformationEx(); diff --git a/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch b/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch index 8c23b8a3..29421d6f 100644 --- a/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch +++ b/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch @@ -1,4 +1,4 @@ -From 7595b344c4fc7d03f07a163b3f2f0b38123f7264 Mon Sep 17 00:00:00 2001 +From 5a1737e74415871fd5b0646ece31f191fa74bb69 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Tue, 9 Jul 2019 14:13:28 +1000 Subject: [PATCH] user32: Improve GetKeyboardLayoutList @@ -6,15 +6,15 @@ Subject: [PATCH] user32: Improve GetKeyboardLayoutList This function returns the current list of *installed* Keyboard layouts not the complete list from the registry. --- - dlls/user32/driver.c | 27 --------------------------- + dlls/user32/driver.c | 26 -------------------------- dlls/user32/tests/input.c | 35 +++++++++++++++++++++++++++++++++++ - 2 files changed, 35 insertions(+), 27 deletions(-) + 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c -index 6d916c7d65d..b9e0dc60e7c 100644 +index 8ff6b0a817e..ddf00cfd7b5 100644 --- a/dlls/user32/driver.c +++ b/dlls/user32/driver.c -@@ -210,12 +210,9 @@ static void CDECL nulldrv_Beep(void) +@@ -198,8 +198,6 @@ static void CDECL nulldrv_Beep(void) static UINT CDECL nulldrv_GetKeyboardLayoutList( INT size, HKL *layouts ) { @@ -23,16 +23,12 @@ index 6d916c7d65d..b9e0dc60e7c 100644 INT count = 0; ULONG_PTR baselayout; LANGID langid; -- static const WCHAR szKeyboardReg[] = {'S','y','s','t','e','m','\\','C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\','C','o','n','t','r','o','l','\\','K','e','y','b','o','a','r','d',' ','L','a','y','o','u','t','s',0}; - - baselayout = GetUserDefaultLCID(); - langid = PRIMARYLANGID(LANGIDFROMLCID(baselayout)); -@@ -224,30 +221,6 @@ static UINT CDECL nulldrv_GetKeyboardLayoutList( INT size, HKL *layouts ) +@@ -211,30 +209,6 @@ static UINT CDECL nulldrv_GetKeyboardLayoutList( INT size, HKL *layouts ) else baselayout |= baselayout << 16; - /* Enumerate the Registry */ -- rc = RegOpenKeyW(HKEY_LOCAL_MACHINE,szKeyboardReg,&hKeyKeyboard); +- rc = RegOpenKeyW(HKEY_LOCAL_MACHINE,L"System\\CurrentControlSet\\Control\\Keyboard Layouts",&hKeyKeyboard); - if (rc == ERROR_SUCCESS) - { - do { @@ -41,7 +37,7 @@ index 6d916c7d65d..b9e0dc60e7c 100644 - rc = RegEnumKeyW(hKeyKeyboard, count, szKeyName, 9); - if (rc == ERROR_SUCCESS) - { -- layout = (HKL)(ULONG_PTR)strtoulW(szKeyName,NULL,16); +- layout = (HKL)(ULONG_PTR)wcstoul(szKeyName,NULL,16); - if (baselayout != 0 && layout == (HKL)baselayout) - baselayout = 0; /* found in the registry do not add again */ - if (size && layouts) @@ -59,10 +55,10 @@ index 6d916c7d65d..b9e0dc60e7c 100644 if (baselayout != 0) { diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c -index bab0fd97536..ea0cac6d18a 100644 +index 1809c147cbd..fd8f26e9ee4 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c -@@ -3706,6 +3706,40 @@ static void test_UnregisterDeviceNotification(void) +@@ -3791,6 +3791,40 @@ static void test_UnregisterDeviceNotification(void) ok(ret == FALSE, "Unregistering NULL Device Notification returned: %d\n", ret); } @@ -103,7 +99,7 @@ index bab0fd97536..ea0cac6d18a 100644 START_TEST(input) { char **argv; -@@ -3741,6 +3775,7 @@ START_TEST(input) +@@ -3826,6 +3860,7 @@ START_TEST(input) test_GetRawInputBuffer(); test_RegisterRawInputDevices(); test_rawinput(argv[0]); @@ -112,5 +108,5 @@ index bab0fd97536..ea0cac6d18a 100644 if(pGetMouseMovePointsEx) test_GetMouseMovePointsEx(); -- -2.27.0 +2.28.0 diff --git a/patches/mfplat-streaming-support/definition b/patches/mfplat-streaming-support/definition index 46a40d0b..6fde82d1 100644 --- a/patches/mfplat-streaming-support/definition +++ b/patches/mfplat-streaming-support/definition @@ -1 +1,2 @@ Fixes: [49692] mfplat: Improved support for multiple video formats. +Disabled: true diff --git a/patches/ntdll-Builtin_Prot/0001-ntdll-Fix-holes-in-ELF-mappings.patch b/patches/ntdll-Builtin_Prot/0001-ntdll-Fix-holes-in-ELF-mappings.patch index 54e512b5..1376d9a2 100644 --- a/patches/ntdll-Builtin_Prot/0001-ntdll-Fix-holes-in-ELF-mappings.patch +++ b/patches/ntdll-Builtin_Prot/0001-ntdll-Fix-holes-in-ELF-mappings.patch @@ -1,4 +1,4 @@ -From 9e66f8a5f7579f0e7ef97ab4df66f91d8d8c0949 Mon Sep 17 00:00:00 2001 +From a1b46c58e7663a0c17d5dd2fbb3cc82fde40a06c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Thu, 1 Jun 2017 06:04:53 +0200 Subject: [PATCH] ntdll: Fix holes in ELF mappings. (v2) @@ -10,10 +10,10 @@ Based on a patch by Andrew Wesie. 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c -index 253d5e31e3d..c518a4f8141 100644 +index 209a2647d16..2fbb5922359 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c -@@ -1014,6 +1014,16 @@ static inline BOOL is_write_watch_range( const void *addr, size_t size ) +@@ -1021,6 +1021,16 @@ static inline BOOL is_write_watch_range( const void *addr, size_t size ) } @@ -30,7 +30,7 @@ index 253d5e31e3d..c518a4f8141 100644 /*********************************************************************** * find_view_range * -@@ -2985,6 +2995,19 @@ NTSTATUS virtual_handle_fault( void *addr, DWORD err, void *stack ) +@@ -3051,6 +3061,19 @@ NTSTATUS virtual_handle_fault( void *addr, DWORD err, void *stack ) /* ignore fault if page is writable now */ if (get_unix_prot( get_page_vprot( page ) ) & PROT_WRITE) ret = STATUS_SUCCESS; } @@ -47,7 +47,7 @@ index 253d5e31e3d..c518a4f8141 100644 + else + set_page_vprot_bits( page, page_size, 0, VPROT_READ | VPROT_EXEC ); + } - pthread_mutex_unlock( &virtual_mutex ); + mutex_unlock( &virtual_mutex ); return ret; } diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c diff --git a/patches/ntdll-WRITECOPY/0003-ntdll-Setup-a-temporary-signal-handler-during-proces.patch b/patches/ntdll-WRITECOPY/0003-ntdll-Setup-a-temporary-signal-handler-during-proces.patch index bc636435..bc314c03 100644 --- a/patches/ntdll-WRITECOPY/0003-ntdll-Setup-a-temporary-signal-handler-during-proces.patch +++ b/patches/ntdll-WRITECOPY/0003-ntdll-Setup-a-temporary-signal-handler-during-proces.patch @@ -1,4 +1,4 @@ -From 1703abc6afb86f5427ba73bcf6384bdea6d0eb69 Mon Sep 17 00:00:00 2001 +From 3ed31bd914d853f6e4b550db7ff0c68ab8918dad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 4 Oct 2014 02:53:22 +0200 Subject: [PATCH] ntdll: Setup a temporary signal handler during process @@ -15,10 +15,10 @@ Subject: [PATCH] ntdll: Setup a temporary signal handler during process 7 files changed, 74 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c -index 6f25f4ae87e..f9a26e6a531 100644 +index e7a7c96a974..0ffbab757a3 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c -@@ -1657,6 +1657,7 @@ void __wine_main( int argc, char *argv[], char *envp[] ) +@@ -1785,6 +1785,7 @@ void __wine_main( int argc, char *argv[], char *envp[] ) #endif virtual_init(); @@ -27,10 +27,10 @@ index 6f25f4ae87e..f9a26e6a531 100644 init_environment( argc, argv, envp ); diff --git a/dlls/ntdll/unix/signal_arm.c b/dlls/ntdll/unix/signal_arm.c -index 89baf6db3df..f5c683ec4e1 100644 +index e8971d22dbd..ca291456284 100644 --- a/dlls/ntdll/unix/signal_arm.c +++ b/dlls/ntdll/unix/signal_arm.c -@@ -979,6 +979,12 @@ void signal_init_process(void) +@@ -977,6 +977,12 @@ void signal_init_process(void) exit(1); } @@ -44,10 +44,10 @@ index 89baf6db3df..f5c683ec4e1 100644 /*********************************************************************** * init_thread_context diff --git a/dlls/ntdll/unix/signal_arm64.c b/dlls/ntdll/unix/signal_arm64.c -index cfe1c75b59f..c599ce8d308 100644 +index e08d6a2ee17..025fa63316a 100644 --- a/dlls/ntdll/unix/signal_arm64.c +++ b/dlls/ntdll/unix/signal_arm64.c -@@ -1074,6 +1074,13 @@ void signal_init_process(void) +@@ -1070,6 +1070,13 @@ void signal_init_process(void) exit(1); } @@ -62,10 +62,10 @@ index cfe1c75b59f..c599ce8d308 100644 * init_thread_context */ diff --git a/dlls/ntdll/unix/signal_i386.c b/dlls/ntdll/unix/signal_i386.c -index 5d4d1469472..73216888dd9 100644 +index e0ba27d3e94..dd9c8e255cc 100644 --- a/dlls/ntdll/unix/signal_i386.c +++ b/dlls/ntdll/unix/signal_i386.c -@@ -1809,6 +1809,30 @@ static BOOL handle_syscall_fault( ucontext_t *sigcontext, void *stack_ptr, +@@ -1865,6 +1865,30 @@ static BOOL handle_syscall_fault( ucontext_t *sigcontext, void *stack_ptr, } @@ -96,7 +96,7 @@ index 5d4d1469472..73216888dd9 100644 /********************************************************************** * segv_handler * -@@ -2368,6 +2392,34 @@ void signal_init_process(void) +@@ -2424,6 +2448,34 @@ void signal_init_process(void) exit(1); } @@ -132,10 +132,10 @@ index 5d4d1469472..73216888dd9 100644 /*********************************************************************** * init_thread_context diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c -index c74b8be32b8..d28b7cce8ee 100644 +index e11b2c70b59..1b45ca246d3 100644 --- a/dlls/ntdll/unix/signal_x86_64.c +++ b/dlls/ntdll/unix/signal_x86_64.c -@@ -2627,6 +2627,12 @@ void signal_init_process(void) +@@ -2680,6 +2680,12 @@ void signal_init_process(void) exit(1); } @@ -149,10 +149,10 @@ index c74b8be32b8..d28b7cce8ee 100644 /*********************************************************************** * init_thread_context diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h -index ce3c14d2594..44a2b5712f5 100644 +index 3d9dca3c51d..7b541dc6a31 100644 --- a/dlls/ntdll/unix/unix_private.h +++ b/dlls/ntdll/unix/unix_private.h -@@ -217,6 +217,7 @@ extern NTSTATUS signal_alloc_thread( TEB *teb ) DECLSPEC_HIDDEN; +@@ -215,6 +215,7 @@ extern NTSTATUS signal_alloc_thread( TEB *teb ) DECLSPEC_HIDDEN; extern void signal_free_thread( TEB *teb ) DECLSPEC_HIDDEN; extern void signal_init_thread( TEB *teb ) DECLSPEC_HIDDEN; extern void signal_init_process(void) DECLSPEC_HIDDEN; @@ -161,12 +161,12 @@ index ce3c14d2594..44a2b5712f5 100644 BOOL suspend, void *thunk, TEB *teb ) DECLSPEC_HIDDEN; extern void DECLSPEC_NORETURN signal_exit_thread( int status, void (*func)(int) ) DECLSPEC_HIDDEN; diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c -index 58c84caab5f..ad2f959d61c 100644 +index 94b3975a964..cf0c1598720 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c -@@ -2886,7 +2886,7 @@ NTSTATUS virtual_handle_fault( void *addr, DWORD err, void *stack ) +@@ -2967,7 +2967,7 @@ NTSTATUS virtual_handle_fault( void *addr, DWORD err, void *stack ) - pthread_mutex_lock( &virtual_mutex ); /* no need for signal masking inside signal handler */ + mutex_lock( &virtual_mutex ); /* no need for signal masking inside signal handler */ vprot = get_page_vprot( page ); - if (!is_inside_signal_stack( stack ) && (vprot & VPROT_GUARD)) + if (stack && !is_inside_signal_stack( stack ) && (vprot & VPROT_GUARD)) diff --git a/patches/ntdll-WRITECOPY/0004-ntdll-Properly-handle-PAGE_WRITECOPY-protection.-try.patch b/patches/ntdll-WRITECOPY/0004-ntdll-Properly-handle-PAGE_WRITECOPY-protection.-try.patch index 6d7f481f..4e67574d 100644 --- a/patches/ntdll-WRITECOPY/0004-ntdll-Properly-handle-PAGE_WRITECOPY-protection.-try.patch +++ b/patches/ntdll-WRITECOPY/0004-ntdll-Properly-handle-PAGE_WRITECOPY-protection.-try.patch @@ -1,4 +1,4 @@ -From c8020cc027be026da2aef0ed866a59629d4e053e Mon Sep 17 00:00:00 2001 +From 4a297f731112822e51086826f975bf5db9178e52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 4 Oct 2014 03:22:09 +0200 Subject: [PATCH] ntdll: Properly handle PAGE_WRITECOPY protection. (try 5) @@ -9,10 +9,10 @@ For now, only enable it when a special environment variable is set. 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c -index 563ed01deb5..79f6af38b00 100644 +index cf0c1598720..ff585c647bc 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c -@@ -490,6 +490,21 @@ static void reserve_area( void *addr, void *end ) +@@ -495,6 +495,21 @@ static void reserve_area( void *addr, void *end ) #endif /* __APPLE__ */ } @@ -34,7 +34,7 @@ index 563ed01deb5..79f6af38b00 100644 static void mmap_init( const struct preload_info *preload_info ) { -@@ -847,8 +862,19 @@ static int get_unix_prot( BYTE vprot ) +@@ -852,8 +867,19 @@ static int get_unix_prot( BYTE vprot ) { if (vprot & VPROT_READ) prot |= PROT_READ; if (vprot & VPROT_WRITE) prot |= PROT_WRITE | PROT_READ; @@ -55,7 +55,7 @@ index 563ed01deb5..79f6af38b00 100644 if (vprot & VPROT_WRITEWATCH) prot &= ~PROT_WRITE; } if (!prot) prot = PROT_NONE; -@@ -1577,7 +1603,7 @@ static void update_write_watches( void *base, size_t size, size_t accessed_size +@@ -1457,7 +1483,7 @@ static void update_write_watches( void *base, size_t size, size_t accessed_size { TRACE( "updating watch %p-%p-%p\n", base, (char *)base + accessed_size, (char *)base + size ); /* clear write watch flag on accessed pages */ @@ -64,7 +64,7 @@ index 563ed01deb5..79f6af38b00 100644 /* restore page protections on the entire range */ mprotect_range( base, size, 0, 0 ); } -@@ -2919,12 +2945,13 @@ NTSTATUS virtual_handle_fault( void *addr, DWORD err, void *stack ) +@@ -2985,12 +3011,13 @@ NTSTATUS virtual_handle_fault( void *addr, DWORD err, void *stack ) set_page_vprot_bits( page, page_size, 0, VPROT_WRITEWATCH ); mprotect_range( page, page_size, 0, 0 ); } @@ -80,9 +80,9 @@ index 563ed01deb5..79f6af38b00 100644 + /* ignore fault if page is writable now */ + if (get_unix_prot( get_page_vprot( page ) ) & PROT_WRITE) ret = STATUS_SUCCESS; } - pthread_mutex_unlock( &virtual_mutex ); + mutex_unlock( &virtual_mutex ); return ret; -@@ -3001,11 +3028,16 @@ static NTSTATUS check_write_access( void *base, size_t size, BOOL *has_write_wat +@@ -3067,11 +3094,16 @@ static NTSTATUS check_write_access( void *base, size_t size, BOOL *has_write_wat { BYTE vprot = get_page_vprot( addr + i ); if (vprot & VPROT_WRITEWATCH) *has_write_watch = TRUE; diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index ed362a4f..348efd87 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "36e6ea9767473204b0e1635a1d54af3868fa0188" + echo "0a49202109e29bd18daaf746cb9493e385511e13" } # Show version information @@ -147,7 +147,6 @@ patch_enable_all () enable_krnl386_exe16_GDT_LDT_Emulation="$1" enable_krnl386_exe16_Invalid_Console_Handles="$1" enable_loader_KeyboardLayouts="$1" - enable_mfplat_streaming_support="$1" enable_mmsystem_dll16_MIDIHDR_Refcount="$1" enable_mountmgr_DosDevices="$1" enable_mscoree_CorValidateImage="$1" @@ -328,7 +327,6 @@ patch_enable_all () enable_wpcap_Dynamic_Linking="$1" enable_ws2_32_APC_Performance="$1" enable_ws2_32_Connect_Time="$1" - enable_ws2_32_TransmitFile="$1" enable_ws2_32_getaddrinfo="$1" enable_ws2_32_getsockopt="$1" enable_wtsapi32_EnumerateProcesses="$1" @@ -535,9 +533,6 @@ patch_enable () loader-KeyboardLayouts) enable_loader_KeyboardLayouts="$2" ;; - mfplat-streaming-support) - enable_mfplat_streaming_support="$2" - ;; mmsystem.dll16-MIDIHDR_Refcount) enable_mmsystem_dll16_MIDIHDR_Refcount="$2" ;; @@ -1078,9 +1073,6 @@ patch_enable () ws2_32-Connect_Time) enable_ws2_32_Connect_Time="$2" ;; - ws2_32-TransmitFile) - enable_ws2_32_TransmitFile="$2" - ;; ws2_32-getaddrinfo) enable_ws2_32_getaddrinfo="$2" ;; @@ -2725,78 +2717,6 @@ if test "$enable_loader_KeyboardLayouts" -eq 1; then patch_apply loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch fi -# Patchset mfplat-streaming-support -# | -# | This patchset fixes the following Wine bugs: -# | * [#49692] mfplat: Improved support for multiple video formats. -# | -# | Modified files: -# | * configure.ac, dlls/mf/Makefile.in, dlls/mf/handler.c, dlls/mf/handler.h, dlls/mf/main.c, dlls/mf/sar.c, -# | dlls/mf/session.c, dlls/mf/tests/mf.c, dlls/mf/topology.c, dlls/mfplat/mediatype.c, dlls/mfplat/tests/mfplat.c, -# | dlls/mfplat/tests/test.mp4, dlls/mfreadwrite/reader.c, dlls/mfreadwrite/tests/mfplat.c, -# | dlls/mfreadwrite/tests/resource.rc, dlls/mfreadwrite/tests/test.mp4, dlls/winegstreamer/Makefile.in, -# | dlls/winegstreamer/audioconvert.c, dlls/winegstreamer/colorconvert.c, dlls/winegstreamer/gst_cbs.c, -# | dlls/winegstreamer/gst_cbs.h, dlls/winegstreamer/gst_private.h, dlls/winegstreamer/main.c, -# | dlls/winegstreamer/media_source.c, dlls/winegstreamer/mf_decode.c, dlls/winegstreamer/mfplat.c, -# | dlls/winegstreamer/winegstreamer_classes.idl, include/mfidl.idl, tools/make_makefiles, tools/makedep.c -# | -if test "$enable_mfplat_streaming_support" -eq 1; then - patch_apply mfplat-streaming-support/0001-winegstreamer-Add-a-GstPad-wrapping-the-media-source.patch - patch_apply mfplat-streaming-support/0002-winegstreamer-Use-decodebin-to-initialize-media-stre.patch - patch_apply mfplat-streaming-support/0003-winegstreamer-Implement-IMFMediaStream-GetStreamDesc.patch - patch_apply mfplat-streaming-support/0004-winegstreamer-Insert-parser-into-pipeline-to-rectify.patch - patch_apply mfplat-streaming-support/0005-winegstreamer-Insert-videoconvert-into-decoded-video.patch - patch_apply mfplat-streaming-support/0006-winegstreamer-Insert-audioconvert-into-decoded-audio.patch - patch_apply mfplat-streaming-support/0007-winegstreamer-Translate-H.264-caps-to-attributes.patch - patch_apply mfplat-streaming-support/0008-winegstreamer-Translate-WMV-caps-to-attributes.patch - patch_apply mfplat-streaming-support/0009-winegstreamer-Translate-AAC-caps-to-attributes.patch - patch_apply mfplat-streaming-support/0010-winegstreamer-Translate-MPEG-4-Section-2-caps-to-att.patch - patch_apply mfplat-streaming-support/0011-winegstreamer-Translate-WMA-caps-to-attributes.patch - patch_apply mfplat-streaming-support/0012-winegstreamer-Implement-IMFMediaSource-CreatePresent.patch - patch_apply mfplat-streaming-support/0013-winegstreamer-Introduce-IMFMediaType-GstCaps-convert.patch - patch_apply mfplat-streaming-support/0014-winegstreamer-Translate-H.264-attributes-to-caps.patch - patch_apply mfplat-streaming-support/0015-winegstreamer-Translate-WMV-attributes-to-caps.patch - patch_apply mfplat-streaming-support/0016-winegstreamer-Translate-AAC-attributes-to-caps.patch - patch_apply mfplat-streaming-support/0017-winegstreamer-Translate-MPEG-4-Section-2-attributes-.patch - patch_apply mfplat-streaming-support/0018-winegstreamer-Translate-WMA-attributes-to-caps.patch - patch_apply mfplat-streaming-support/0019-winegstreamer-Implement-IMFMediaSource-Start.patch - patch_apply mfplat-streaming-support/0020-winegstreamer-Implement-IMFMediaStream-RequestSample.patch - patch_apply mfplat-streaming-support/0021-winegstreamer-Implement-IMFMediaSource-GetCharacteri.patch - patch_apply mfplat-streaming-support/0022-winegstreamer-Calculate-the-MF_PD_DURATION-of-the-me.patch - patch_apply mfplat-streaming-support/0023-tools-Add-support-for-multiple-parent-directories.patch - patch_apply mfplat-streaming-support/0024-mf-Introduce-handler-helper.patch - patch_apply mfplat-streaming-support/0025-Introduce-IMFSample-GstBuffer-converter.patch - patch_apply mfplat-streaming-support/0026-winegstreamer-Implement-decoder-MFT-on-gstreamer.patch - patch_apply mfplat-streaming-support/0027-mfreadwrite-Select-all-streams-when-creating-a-sourc.patch - patch_apply mfplat-streaming-support/0028-Miscellaneous.patch - patch_apply mfplat-streaming-support/0029-WMV.patch - patch_apply mfplat-streaming-support/0030-mf-Ask-for-more-samples-from-upstream-node-when-upon.patch - patch_apply mfplat-streaming-support/0031-winegstreamer-Implement-IMFMedisStream-GetMediaSourc.patch - patch_apply mfplat-streaming-support/0032-Expose-PCM-output-type-on-AAC-decoder.patch - patch_apply mfplat-streaming-support/0033-mfplat-Add-I420-format-information.patch - patch_apply mfplat-streaming-support/0034-winegstreamer-Implement-Color-Converter-MFT.patch - patch_apply mfplat-streaming-support/0035-HACK-Set-BPS-to-16-for-output-template.patch - patch_apply mfplat-streaming-support/0036-Improve-tests.patch - patch_apply mfplat-streaming-support/0037-Revert-Improve-tests.patch - patch_apply mfplat-streaming-support/0038-Report-streams-backwards-and-only-select-one-of-each.patch - patch_apply mfplat-streaming-support/0039-winegstreamer-Implement-IMFMediaSource-Stop.patch - patch_apply mfplat-streaming-support/0040-winegstreamer-Introduce-MPEG-4-Section-2-video-decod.patch - patch_apply mfplat-streaming-support/0041-HACK-Switch-between-all-selection-streams-on-MF_SOUR.patch - patch_apply mfplat-streaming-support/0042-winegstreamer-Introduce-WMA-audio-decoder.patch - patch_apply mfplat-streaming-support/0043-Support-stereo-down-folding.patch - patch_apply mfplat-streaming-support/0044-winegstreamer-Implement-MF_SD_LANGUAGE.patch - patch_apply mfplat-streaming-support/0045-Revert-mf-topoloader-Add-a-structure-for-iterative-b.patch - patch_apply mfplat-streaming-support/0046-Revert-mf-topoloader-Clone-source-nodes-as-a-first-l.patch - patch_apply mfplat-streaming-support/0047-Revert-mf-topoloader-Switch-to-public-interface-for-.patch - patch_apply mfplat-streaming-support/0048-mf-Partially-implement-the-topology-loader.patch - patch_apply mfplat-streaming-support/0049-mf-Miscelaneous-fixes-to-topology-resolution.patch - patch_apply mfplat-streaming-support/0050-Rewrite-branch-resolver.patch - patch_apply mfplat-streaming-support/0051-mf-sar-Compare-against-native-media-type-in-IsMediaT.patch - patch_apply mfplat-streaming-support/0052-winegstreamer-Implement-audio-conversion-MFT.patch - patch_apply mfplat-streaming-support/0053-winegstreamer-Support-eAVEncH264VProfile_Constrained.patch - patch_apply mfplat-streaming-support/0054-winegstreamer-Support-older-versions.patch -fi - # Patchset mmsystem.dll16-MIDIHDR_Refcount # | # | This patchset fixes the following Wine bugs: @@ -5096,16 +5016,6 @@ if test "$enable_ws2_32_Connect_Time" -eq 1; then patch_apply ws2_32-Connect_Time/0001-ws2_32-Implement-returning-the-proper-time-with-SO_C.patch fi -# Patchset ws2_32-TransmitFile -# | -# | Modified files: -# | * dlls/ws2_32/socket.c, dlls/ws2_32/tests/sock.c, include/winsock.h, server/protocol.def, server/sock.c -# | -if test "$enable_ws2_32_TransmitFile" -eq 1; then - patch_apply ws2_32-TransmitFile/0001-ws2_32-Add-support-for-TF_DISCONNECT-to-TransmitFile.patch - patch_apply ws2_32-TransmitFile/0002-ws2_32-Add-support-for-TF_REUSE_SOCKET-to-TransmitFi.patch -fi - # Patchset ws2_32-getaddrinfo # | # | Modified files: diff --git a/patches/server-Object_Types/0010-ntdll-Mimic-object-type-behavior-for-different-windo.patch b/patches/server-Object_Types/0010-ntdll-Mimic-object-type-behavior-for-different-windo.patch index 95b16750..b44ca560 100644 --- a/patches/server-Object_Types/0010-ntdll-Mimic-object-type-behavior-for-different-windo.patch +++ b/patches/server-Object_Types/0010-ntdll-Mimic-object-type-behavior-for-different-windo.patch @@ -1,4 +1,4 @@ -From 65b7fe29b00024cfe5d7d9277927b76f8c4c98d4 Mon Sep 17 00:00:00 2001 +From 31de811f968861971bb6e014286cd34fb6c2f4c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Wed, 8 Mar 2017 19:39:29 +0100 Subject: [PATCH] ntdll: Mimic object type behavior for different windows @@ -11,7 +11,7 @@ Subject: [PATCH] ntdll: Mimic object type behavior for different windows 3 files changed, 82 insertions(+), 5 deletions(-) diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c -index abc8a8eef1c..1aa69393c9d 100644 +index 58fd9482720..7deb0b156d8 100644 --- a/dlls/ntdll/tests/om.c +++ b/dlls/ntdll/tests/om.c @@ -73,6 +73,7 @@ static NTSTATUS (WINAPI *pNtQuerySystemTime)( LARGE_INTEGER * ); @@ -22,7 +22,7 @@ index abc8a8eef1c..1aa69393c9d 100644 #define KEYEDEVENT_WAIT 0x0001 #define KEYEDEVENT_WAKE 0x0002 -@@ -1510,13 +1511,31 @@ static void test_query_object(void) +@@ -1508,13 +1509,31 @@ static void test_query_object(void) pNtClose(handle); } @@ -55,7 +55,7 @@ index abc8a8eef1c..1aa69393c9d 100644 buffer = HeapAlloc( GetProcessHeap(), 0, sizeof(OBJECT_TYPES_INFORMATION) ); ok( buffer != NULL, "Failed to allocate memory\n" ); -@@ -1544,11 +1563,54 @@ static void test_query_object_types(void) +@@ -1542,11 +1561,54 @@ static void test_query_object_types(void) ok( type->TypeName.Length == sizeof(typeW) && !strncmpW(typeW, type->TypeName.Buffer, 4), "Expected 'Type' as first type, got %s\n", wine_dbgstr_us(&type->TypeName) ); } @@ -110,7 +110,7 @@ index abc8a8eef1c..1aa69393c9d 100644 } static void test_type_mismatch(void) -@@ -2140,6 +2202,7 @@ START_TEST(om) +@@ -2138,6 +2200,7 @@ START_TEST(om) pRtlWaitOnAddress = (void *)GetProcAddress(hntdll, "RtlWaitOnAddress"); pRtlWakeAddressAll = (void *)GetProcAddress(hntdll, "RtlWakeAddressAll"); pRtlWakeAddressSingle = (void *)GetProcAddress(hntdll, "RtlWakeAddressSingle"); @@ -119,10 +119,10 @@ index abc8a8eef1c..1aa69393c9d 100644 test_case_sensitive(); test_namespace_pipe(); diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c -index 10aafef6b58..bd3e8e41267 100644 +index ece09c12f77..9a1659d2f66 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c -@@ -7436,7 +7436,10 @@ NTSTATUS WINAPI NtQueryObject( HANDLE handle, OBJECT_INFORMATION_CLASS info_clas +@@ -6591,7 +6591,10 @@ NTSTATUS WINAPI NtQueryObject( HANDLE handle, OBJECT_INFORMATION_CLASS info_clas } if (status == STATUS_SUCCESS) { @@ -135,11 +135,11 @@ index 10aafef6b58..bd3e8e41267 100644 } } diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c -index 552752b15d0..70c1661f9bb 100644 +index 6c8e50fb88f..201e66d1759 100644 --- a/dlls/ntdll/unix/system.c +++ b/dlls/ntdll/unix/system.c -@@ -1984,6 +1984,18 @@ static void get_timezone_info( RTL_DYNAMIC_TIME_ZONE_INFORMATION *tzi ) - pthread_mutex_unlock( &tz_mutex ); +@@ -2035,6 +2035,18 @@ static void get_timezone_info( RTL_DYNAMIC_TIME_ZONE_INFORMATION *tzi ) + mutex_unlock( &tz_mutex ); } +static DWORD translate_object_index(DWORD index) @@ -157,7 +157,7 @@ index 552752b15d0..70c1661f9bb 100644 /****************************************************************************** * NtQuerySystemInformation (NTDLL.@) -@@ -2384,7 +2396,7 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class, +@@ -2435,7 +2447,7 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class, shi->Handle[i].OwnerPid = handle_info[i].owner; shi->Handle[i].HandleValue = handle_info[i].handle; shi->Handle[i].AccessMask = handle_info[i].access; @@ -166,7 +166,7 @@ index 552752b15d0..70c1661f9bb 100644 /* FIXME: Fill out HandleFlags, ObjectPointer */ } } -@@ -2437,7 +2449,7 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class, +@@ -2488,7 +2500,7 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class, shi->Handle[i].UniqueProcessId = handle_info[i].owner; shi->Handle[i].HandleValue = handle_info[i].handle; shi->Handle[i].GrantedAccess = handle_info[i].access; @@ -175,7 +175,7 @@ index 552752b15d0..70c1661f9bb 100644 /* FIXME: Fill out remaining fields */ } } -@@ -2693,7 +2705,6 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class, +@@ -2724,7 +2736,6 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class, return ret; } @@ -184,5 +184,5 @@ index 552752b15d0..70c1661f9bb 100644 * NtQuerySystemInformationEx (NTDLL.@) */ -- -2.27.0 +2.28.0 diff --git a/patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch b/patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch deleted file mode 100644 index 763518d8..00000000 --- a/patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch +++ /dev/null @@ -1,219 +0,0 @@ -From 45e6befeba8145914fac0e1e9690026145e9ac25 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Mon, 17 Aug 2015 01:11:47 +0200 -Subject: [PATCH] server: Store a reference to the parent object for pipe - servers. (v2) - ---- - dlls/ntdll/tests/om.c | 3 --- - server/named_pipe.c | 44 ++++++++++++++++++++++++++++++++++++-------- - server/object.c | 22 ++++++++++++++-------- - server/object.h | 2 ++ - 4 files changed, 52 insertions(+), 19 deletions(-) - -diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c -index be137b8..1c65464 100644 ---- a/dlls/ntdll/tests/om.c -+++ b/dlls/ntdll/tests/om.c -@@ -1503,14 +1503,11 @@ static void test_query_object(void) - status = pNtQueryObject( handle, ObjectNameInformation, buffer, sizeof(buffer), &len ); - ok( status == STATUS_SUCCESS , "NtQueryObject returned %x\n", status ); - str = (UNICODE_STRING *)buffer; -- todo_wine - ok( len > sizeof(UNICODE_STRING), "unexpected len %u\n", len ); - str = (UNICODE_STRING *)buffer; - expected_len = sizeof(UNICODE_STRING) + str->Length + sizeof(WCHAR); -- todo_wine - ok( len == expected_len || broken(len == expected_len - sizeof(WCHAR)), /* NT4 */ - "unexpected len %u\n", len ); -- todo_wine - ok( len > sizeof(UNICODE_STRING) + sizeof("\\test_pipe") * sizeof(WCHAR), - "name too short %s\n", wine_dbgstr_w(str->Buffer) ); - trace( "got %s len %u\n", wine_dbgstr_w(str->Buffer), len ); -diff --git a/server/named_pipe.c b/server/named_pipe.c -index 141a052..62b6905 100644 ---- a/server/named_pipe.c -+++ b/server/named_pipe.c -@@ -159,6 +159,8 @@ static struct security_descriptor *pipe_server_get_sd( struct object *obj ); - static int pipe_server_set_sd( struct object *obj, const struct security_descriptor *sd, - unsigned int set_info ); - static void pipe_server_destroy( struct object *obj); -+static int pipe_server_link_name( struct object *obj, struct object_name *name, struct object *parent ); -+static void pipe_server_unlink_name( struct object *obj, struct object_name *name ); - static int pipe_server_ioctl( struct fd *fd, ioctl_code_t code, struct async *async ); - static void pipe_server_get_file_info( struct fd *fd, unsigned int info_class ); - -@@ -177,8 +179,8 @@ static const struct object_ops pipe_server_ops = - pipe_server_get_sd, /* get_sd */ - pipe_server_set_sd, /* set_sd */ - no_lookup_name, /* lookup_name */ -- no_link_name, /* link_name */ -- NULL, /* unlink_name */ -+ pipe_server_link_name, /* link_name */ -+ pipe_server_unlink_name, /* unlink_name */ - no_open_file, /* open_file */ - no_alloc_handle, /* alloc_handle */ - fd_close_handle, /* close_handle */ -@@ -205,6 +207,8 @@ static void pipe_client_dump( struct object *obj, int verbose ); - static struct security_descriptor *pipe_client_get_sd( struct object *obj ); - static int pipe_client_set_sd( struct object *obj, const struct security_descriptor *sd, - unsigned int set_info ); -+static int pipe_client_link_name( struct object *obj, struct object_name *name, struct object *parent ); -+static void pipe_client_unlink_name( struct object *obj, struct object_name *name ); - static void pipe_client_destroy( struct object *obj ); - static int pipe_client_ioctl( struct fd *fd, ioctl_code_t code, struct async *async ); - static void pipe_client_get_file_info( struct fd *fd, unsigned int info_class ); -@@ -224,8 +228,8 @@ static const struct object_ops pipe_client_ops = - pipe_client_get_sd, /* get_sd */ - pipe_client_set_sd, /* set_sd */ - no_lookup_name, /* lookup_name */ -- no_link_name, /* link_name */ -- NULL, /* unlink_name */ -+ pipe_client_link_name, /* link_name */ -+ pipe_client_unlink_name, /* unlink_name */ - no_open_file, /* open_file */ - no_alloc_handle, /* alloc_handle */ - fd_close_handle, /* close_handle */ -@@ -422,6 +426,17 @@ static void pipe_end_destroy( struct pipe_end *pipe_end ) - if (pipe_end->fd) release_object( pipe_end->fd ); - } - -+static int pipe_server_link_name( struct object *obj, struct object_name *name, struct object *parent ) -+{ -+ assert( parent->ops == &named_pipe_ops ); -+ name->parent = grab_object( parent ); -+ return 1; -+} -+ -+static void pipe_server_unlink_name( struct object *obj, struct object_name *name ) -+{ -+} -+ - static void pipe_server_destroy( struct object *obj) - { - struct pipe_server *server = (struct pipe_server *)obj; -@@ -444,6 +459,17 @@ static void pipe_server_destroy( struct object *obj) - release_object( server->pipe ); - } - -+static int pipe_client_link_name( struct object *obj, struct object_name *name, struct object *parent ) -+{ -+ assert( parent->ops == &named_pipe_ops ); -+ name->parent = grab_object( parent ); -+ return 1; -+} -+ -+static void pipe_client_unlink_name( struct object *obj, struct object_name *name ) -+{ -+} -+ - static void pipe_client_destroy( struct object *obj) - { - struct pipe_client *client = (struct pipe_client *)obj; -@@ -1109,9 +1135,10 @@ static void init_pipe_end( struct pipe_end *pipe_end, unsigned int pipe_flags, d - static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned int options, - unsigned int pipe_flags ) - { -+ static const struct unicode_str str = { NULL, 0 }; - struct pipe_server *server; - -- server = alloc_object( &pipe_server_ops ); -+ server = create_object( &pipe->obj, &pipe_server_ops, &str, NULL ); - if (!server) - return NULL; - -@@ -1135,12 +1162,13 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned - return server; - } - --static struct pipe_client *create_pipe_client( unsigned int flags, unsigned int pipe_flags, -+static struct pipe_client *create_pipe_client( struct named_pipe *pipe, unsigned int flags, unsigned int pipe_flags, - data_size_t buffer_size, unsigned int options ) - { -+ static const struct unicode_str str = { NULL, 0 }; - struct pipe_client *client; - -- client = alloc_object( &pipe_client_ops ); -+ client = create_object( &pipe->obj, &pipe_client_ops, &str, NULL ); - if (!client) - return NULL; - -@@ -1220,7 +1248,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc - return NULL; - } - -- if ((client = create_pipe_client( options, pipe->flags, pipe->outsize, options ))) -+ if ((client = create_pipe_client( pipe, options, pipe->flags, pipe->outsize, options ))) - { - if (server->state == ps_wait_open) - fd_async_wake_up( server->pipe_end.fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS ); -diff --git a/server/object.c b/server/object.c -index d0750c5..f40aebe 100644 ---- a/server/object.c -+++ b/server/object.c -@@ -176,7 +176,7 @@ WCHAR *get_object_full_name( struct object *obj, data_size_t *ret_len ) - while (ptr && ptr->name) - { - struct object_name *name = ptr->name; -- len += name->len + sizeof(WCHAR); -+ if (name->len) len += name->len + sizeof(WCHAR); - ptr = name->parent; - } - if (!len) return NULL; -@@ -186,9 +186,12 @@ WCHAR *get_object_full_name( struct object *obj, data_size_t *ret_len ) - while (obj && obj->name) - { - struct object_name *name = obj->name; -- memcpy( ret + len - name->len, name->name, name->len ); -- len -= name->len + sizeof(WCHAR); -- memcpy( ret + len, &backslash, sizeof(WCHAR) ); -+ if (name->len) -+ { -+ memcpy( ret + len - name->len, name->name, name->len ); -+ len -= name->len + sizeof(WCHAR); -+ memcpy( ret + len, &backslash, sizeof(WCHAR) ); -+ } - obj = name->parent; - } - return (WCHAR *)ret; -@@ -276,8 +279,8 @@ struct object *lookup_named_object( struct object *root, const struct unicode_st - return parent; - } - --static struct object *create_object( struct object *parent, const struct object_ops *ops, -- const struct unicode_str *name, const struct security_descriptor *sd ) -+void *create_object( struct object *parent, const struct object_ops *ops, -+ const struct unicode_str *name, const struct security_descriptor *sd ) - { - struct object *obj; - struct object_name *name_ptr; -@@ -372,8 +375,11 @@ static void dump_name( struct object *obj ) - - if (!name) return; - if (name->parent) dump_name( name->parent ); -- fputs( "\\\\", stderr ); -- dump_strW( name->name, name->len / sizeof(WCHAR), stderr, "[]" ); -+ if (name->len) -+ { -+ fputs( "\\\\", stderr ); -+ dump_strW( name->name, name->len / sizeof(WCHAR), stderr, "[]" ); -+ } - } - - /* dump the name of an object to stderr */ -diff --git a/server/object.h b/server/object.h -index 9ff123e..4a5d282 100644 ---- a/server/object.h -+++ b/server/object.h -@@ -135,6 +135,8 @@ extern WCHAR *get_object_full_name( struct object *obj, data_size_t *ret_len ); - extern void dump_object_name( struct object *obj ); - extern struct object *lookup_named_object( struct object *root, const struct unicode_str *name, - unsigned int attr, struct unicode_str *name_left ); -+extern void *create_object( struct object *parent, const struct object_ops *ops, -+ const struct unicode_str *name, const struct security_descriptor *sd ); - extern void *create_named_object( struct object *parent, const struct object_ops *ops, - const struct unicode_str *name, unsigned int attributes, - const struct security_descriptor *sd ); --- -1.9.1 - diff --git a/patches/server-Pipe_ObjectName/definition b/patches/server-Pipe_ObjectName/definition deleted file mode 100644 index b2cb7583..00000000 --- a/patches/server-Pipe_ObjectName/definition +++ /dev/null @@ -1,5 +0,0 @@ -Fixes: Report correct ObjectName for NamedPipe wineserver objects -# This was originally written for msys2's strace.exe. It was broken by -# 59dd8ba..6098af8. Since msys2 has been broken in Wine for a while now, this -# really isn't worth fixing. -Disabled: true diff --git a/patches/server-Stored_ACLs/0003-server-Add-a-helper-function-set_sd_from_token_inter.patch b/patches/server-Stored_ACLs/0003-server-Add-a-helper-function-set_sd_from_token_inter.patch index 2bc07715..43c5e3da 100644 --- a/patches/server-Stored_ACLs/0003-server-Add-a-helper-function-set_sd_from_token_inter.patch +++ b/patches/server-Stored_ACLs/0003-server-Add-a-helper-function-set_sd_from_token_inter.patch @@ -1,19 +1,19 @@ -From d294da0642e0fafe103120915f835d529840d233 Mon Sep 17 00:00:00 2001 +From 2756f2f11aaa25a9d31eee8eae603f278bbc20f1 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 30 Mar 2015 12:32:34 +0200 -Subject: server: Add a helper function set_sd_from_token_internal to merge two - security descriptors. +Subject: [PATCH] server: Add a helper function set_sd_from_token_internal to + merge two security descriptors. --- - server/object.c | 59 ++++++++++++++++++++++++++++++++++++--------------------- + server/object.c | 59 +++++++++++++++++++++++++++++++------------------ server/object.h | 3 +++ 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/server/object.c b/server/object.c -index 4455718aac..522035bcb8 100644 +index c4c62cb78ad..9342e94ae81 100644 --- a/server/object.c +++ b/server/object.c -@@ -535,8 +535,9 @@ struct security_descriptor *default_get_sd( struct object *obj ) +@@ -554,8 +554,9 @@ struct security_descriptor *default_get_sd( struct object *obj ) return obj->sd; } @@ -25,7 +25,7 @@ index 4455718aac..522035bcb8 100644 { struct security_descriptor new_sd, *new_sd_ptr; int present; -@@ -545,8 +546,6 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri +@@ -564,8 +565,6 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri ACL *replaced_sacl = NULL; char *ptr; @@ -34,7 +34,7 @@ index 4455718aac..522035bcb8 100644 new_sd.control = sd->control & ~SE_SELF_RELATIVE; if (set_info & OWNER_SECURITY_INFORMATION && sd->owner_len) -@@ -554,10 +553,10 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri +@@ -573,10 +572,10 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri owner = sd_get_owner( sd ); new_sd.owner_len = sd->owner_len; } @@ -48,7 +48,7 @@ index 4455718aac..522035bcb8 100644 } else if (token) { -@@ -571,10 +570,10 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri +@@ -590,10 +589,10 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri group = sd_get_group( sd ); new_sd.group_len = sd->group_len; } @@ -62,7 +62,7 @@ index 4455718aac..522035bcb8 100644 } else if (token) { -@@ -592,20 +591,20 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri +@@ -611,20 +610,20 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri else if (set_info & LABEL_SECURITY_INFORMATION && present) { const ACL *old_sacl = NULL; @@ -88,7 +88,7 @@ index 4455718aac..522035bcb8 100644 } else new_sd.sacl_len = 0; -@@ -619,12 +618,12 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri +@@ -638,12 +637,12 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri } else { @@ -104,7 +104,7 @@ index 4455718aac..522035bcb8 100644 } else if (token) { -@@ -640,7 +639,7 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri +@@ -659,7 +658,7 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri if (!ptr) { free( replaced_sacl ); @@ -113,7 +113,7 @@ index 4455718aac..522035bcb8 100644 } new_sd_ptr = (struct security_descriptor*)ptr; -@@ -655,9 +654,25 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri +@@ -674,9 +673,25 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri memcpy( ptr, dacl, new_sd.dacl_len ); free( replaced_sacl ); @@ -143,10 +143,10 @@ index 4455718aac..522035bcb8 100644 /** Set the security descriptor using the current primary token for defaults. */ diff --git a/server/object.h b/server/object.h -index b5c50e1cee..cfbd5e06bc 100644 +index 53e37b61a21..8203889323a 100644 --- a/server/object.h +++ b/server/object.h -@@ -156,6 +156,9 @@ extern struct fd *no_get_fd( struct object *obj ); +@@ -164,6 +164,9 @@ extern struct fd *no_get_fd( struct object *obj ); extern unsigned int no_map_access( struct object *obj, unsigned int access ); extern struct security_descriptor *default_get_sd( struct object *obj ); extern int default_set_sd( struct object *obj, const struct security_descriptor *sd, unsigned int set_info ); @@ -155,7 +155,7 @@ index b5c50e1cee..cfbd5e06bc 100644 + unsigned int set_info, struct token *token ); extern int set_sd_defaults_from_token( struct object *obj, const struct security_descriptor *sd, unsigned int set_info, struct token *token ); - extern struct object *no_lookup_name( struct object *obj, struct unicode_str *name, unsigned int attributes ); + extern WCHAR *no_get_full_name( struct object *obj, data_size_t *ret_len ); -- -2.13.1 +2.28.0 diff --git a/patches/user32-DrawTextExW/0001-user32-Fix-handling-of-invert_y-in-DrawTextExW.patch b/patches/user32-DrawTextExW/0001-user32-Fix-handling-of-invert_y-in-DrawTextExW.patch index 3799c09b..42fdc92d 100644 --- a/patches/user32-DrawTextExW/0001-user32-Fix-handling-of-invert_y-in-DrawTextExW.patch +++ b/patches/user32-DrawTextExW/0001-user32-Fix-handling-of-invert_y-in-DrawTextExW.patch @@ -1,17 +1,17 @@ -From 984661d3ad7f1a78cc5b69f81a45b949781ce791 Mon Sep 17 00:00:00 2001 +From 6e42e27181a16cc0b427e3504ec3ac8b7ab21f65 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Thu, 13 Nov 2014 06:43:43 +0100 -Subject: user32: Fix handling of invert_y in DrawTextExW. +Subject: [PATCH] user32: Fix handling of invert_y in DrawTextExW. --- dlls/user32/text.c | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/dlls/user32/text.c b/dlls/user32/text.c -index 66a35d2..2aa127a 100644 +index dd9d711cd48..647fff30c30 100644 --- a/dlls/user32/text.c +++ b/dlls/user32/text.c -@@ -911,6 +911,15 @@ INT WINAPI DrawTextExW( HDC hdc, LPWSTR str, INT i_count, +@@ -909,6 +909,15 @@ INT WINAPI DrawTextExW( HDC hdc, LPWSTR str, INT i_count, if (dtp && dtp->cbSize != sizeof(DRAWTEXTPARAMS)) return 0; @@ -26,8 +26,8 @@ index 66a35d2..2aa127a 100644 + if (count == -1) { - count = strlenW(str); -@@ -920,7 +929,7 @@ INT WINAPI DrawTextExW( HDC hdc, LPWSTR str, INT i_count, + count = lstrlenW(str); +@@ -918,7 +927,7 @@ INT WINAPI DrawTextExW( HDC hdc, LPWSTR str, INT i_count, { rect->right = rect->left; if( flags & DT_SINGLELINE) @@ -36,7 +36,7 @@ index 66a35d2..2aa127a 100644 else rect->bottom = rect->top; } -@@ -928,15 +937,6 @@ INT WINAPI DrawTextExW( HDC hdc, LPWSTR str, INT i_count, +@@ -926,15 +935,6 @@ INT WINAPI DrawTextExW( HDC hdc, LPWSTR str, INT i_count, } } @@ -52,7 +52,7 @@ index 66a35d2..2aa127a 100644 if (dtp) { lmargin = dtp->iLeftMargin; -@@ -983,9 +983,10 @@ INT WINAPI DrawTextExW( HDC hdc, LPWSTR str, INT i_count, +@@ -982,9 +982,10 @@ INT WINAPI DrawTextExW( HDC hdc, LPWSTR str, INT i_count, if (flags & DT_SINGLELINE) { @@ -66,7 +66,7 @@ index 66a35d2..2aa127a 100644 } if (!(flags & DT_CALCRECT)) -@@ -1050,10 +1051,7 @@ INT WINAPI DrawTextExW( HDC hdc, LPWSTR str, INT i_count, +@@ -1042,10 +1043,7 @@ INT WINAPI DrawTextExW( HDC hdc, LPWSTR str, INT i_count, else if (size.cx > max_width) max_width = size.cx; @@ -79,5 +79,5 @@ index 66a35d2..2aa127a 100644 dtp->uiLengthDrawn += len; } -- -2.1.3 +2.28.0 diff --git a/patches/user32-rawinput-hid/0004-server-Add-HID-input-message-type-to-send_hardware_m.patch b/patches/user32-rawinput-hid/0004-server-Add-HID-input-message-type-to-send_hardware_m.patch index a488a754..946a501a 100644 --- a/patches/user32-rawinput-hid/0004-server-Add-HID-input-message-type-to-send_hardware_m.patch +++ b/patches/user32-rawinput-hid/0004-server-Add-HID-input-message-type-to-send_hardware_m.patch @@ -1,4 +1,4 @@ -From f836f939423f02291ba1ee175542f195ec6eb182 Mon Sep 17 00:00:00 2001 +From 9b3b49acf05b15eb533beb846e920bfcbc49094c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Mon, 11 Nov 2019 18:35:18 +0100 Subject: [PATCH] server: Add HID input message type to send_hardware_message @@ -14,10 +14,10 @@ Subject: [PATCH] server: Add HID input message type to send_hardware_message 6 files changed, 143 insertions(+), 17 deletions(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c -index aadec28b559..a6e0b3cf94d 100644 +index 4434f4b0c2a..7ae865a135c 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c -@@ -3244,10 +3244,10 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) +@@ -3238,10 +3238,10 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) { req->win = wine_server_user_handle( hwnd ); req->flags = flags; @@ -29,7 +29,7 @@ index aadec28b559..a6e0b3cf94d 100644 req->input.mouse.x = input->u.mi.dx; req->input.mouse.y = input->u.mi.dy; req->input.mouse.data = input->u.mi.mouseData; -@@ -3256,6 +3256,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) +@@ -3250,6 +3250,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) req->input.mouse.info = input->u.mi.dwExtraInfo; break; case INPUT_KEYBOARD: @@ -37,7 +37,7 @@ index aadec28b559..a6e0b3cf94d 100644 req->input.kbd.vkey = input->u.ki.wVk; req->input.kbd.scan = input->u.ki.wScan; req->input.kbd.flags = input->u.ki.dwFlags; -@@ -3263,6 +3264,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) +@@ -3257,6 +3258,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) req->input.kbd.info = input->u.ki.dwExtraInfo; break; case INPUT_HARDWARE: @@ -46,10 +46,10 @@ index aadec28b559..a6e0b3cf94d 100644 req->input.hw.lparam = MAKELONG( input->u.hi.wParamL, input->u.hi.wParamH ); break; diff --git a/dlls/user32/rawinput.c b/dlls/user32/rawinput.c -index bcdb70bdb81..4914c67c98b 100644 +index ba11a121bc5..a6327b06422 100644 --- a/dlls/user32/rawinput.c +++ b/dlls/user32/rawinput.c -@@ -47,6 +47,7 @@ struct device +@@ -46,6 +46,7 @@ struct device { WCHAR *path; HANDLE file; @@ -57,7 +57,7 @@ index bcdb70bdb81..4914c67c98b 100644 RID_DEVICE_INFO info; PHIDP_PREPARSED_DATA data; }; -@@ -63,6 +64,8 @@ static CRITICAL_SECTION_DEBUG rawinput_devices_cs_debug = +@@ -62,6 +63,8 @@ static CRITICAL_SECTION_DEBUG rawinput_devices_cs_debug = }; static CRITICAL_SECTION rawinput_devices_cs = { &rawinput_devices_cs_debug, -1, 0, 0, 0, 0 }; @@ -66,7 +66,7 @@ index bcdb70bdb81..4914c67c98b 100644 static BOOL array_reserve(void **elements, unsigned int *capacity, unsigned int count, unsigned int size) { unsigned int new_capacity, max_capacity; -@@ -144,10 +147,43 @@ static struct device *add_device(HDEVINFO set, SP_DEVICE_INTERFACE_DATA *iface) +@@ -143,10 +146,43 @@ static struct device *add_device(HDEVINFO set, SP_DEVICE_INTERFACE_DATA *iface) device->path = path; device->file = file; device->info.cbSize = sizeof(RID_DEVICE_INFO); @@ -97,7 +97,7 @@ index bcdb70bdb81..4914c67c98b 100644 + + for (i = 0; i < rawinput_devices_count; ++i) + { -+ if (strcmpW(rawinput_devices[i].path, info->Name.Buffer) == 0) ++ if (!wcscmp(rawinput_devices[i].path, info->Name.Buffer)) + { + rawinput_devices[i].handle = device; + return &rawinput_devices[i]; @@ -110,7 +110,7 @@ index bcdb70bdb81..4914c67c98b 100644 static void find_devices(void) { static ULONGLONG last_check; -@@ -327,6 +363,22 @@ BOOL rawinput_from_hardware_message(RAWINPUT *rawinput, const struct hardware_ms +@@ -326,6 +362,22 @@ BOOL rawinput_from_hardware_message(RAWINPUT *rawinput, const struct hardware_ms rawinput->data.keyboard.Message = msg_data->rawinput.kbd.message; rawinput->data.keyboard.ExtraInformation = msg_data->info; } @@ -133,7 +133,7 @@ index bcdb70bdb81..4914c67c98b 100644 else { FIXME("Unhandled rawinput type %#x.\n", msg_data->rawinput.type); -@@ -525,7 +577,7 @@ UINT WINAPI DECLSPEC_HOTPATCH GetRawInputBuffer(RAWINPUT *data, UINT *data_size, +@@ -524,7 +576,7 @@ UINT WINAPI DECLSPEC_HOTPATCH GetRawInputBuffer(RAWINPUT *data, UINT *data_size, struct hardware_msg_data *msg_data; struct rawinput_thread_data *thread_data; RAWINPUT *rawinput; @@ -142,7 +142,7 @@ index bcdb70bdb81..4914c67c98b 100644 BOOL is_wow64; int i; -@@ -585,7 +637,10 @@ UINT WINAPI DECLSPEC_HOTPATCH GetRawInputBuffer(RAWINPUT *data, UINT *data_size, +@@ -584,7 +636,10 @@ UINT WINAPI DECLSPEC_HOTPATCH GetRawInputBuffer(RAWINPUT *data, UINT *data_size, data->header.dwSize - sizeof(RAWINPUTHEADER)); data->header.dwSize += overhead; data = NEXTRAWINPUTBLOCK(data); @@ -154,7 +154,7 @@ index bcdb70bdb81..4914c67c98b 100644 } if (count == 0 && next_size == 0) *data_size = 0; -@@ -660,6 +715,7 @@ UINT WINAPI GetRawInputDeviceInfoW(HANDLE handle, UINT command, void *data, UINT +@@ -657,6 +712,7 @@ UINT WINAPI GetRawInputDeviceInfoW(HANDLE handle, UINT command, void *data, UINT handle, command, data, data_size); if (!data_size) return ~0U; @@ -163,10 +163,10 @@ index bcdb70bdb81..4914c67c98b 100644 /* each case below must set: * *data_size: length (meaning defined by command) of data we want to copy diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h -index 8fa54b9229a..460f3aa1c3e 100644 +index 7761a1ceb4f..bf13e81762a 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h -@@ -386,4 +386,6 @@ static inline WCHAR *heap_strdupW(const WCHAR *src) +@@ -391,4 +391,6 @@ static inline WCHAR *heap_strdupW(const WCHAR *src) return dst; } @@ -174,7 +174,7 @@ index 8fa54b9229a..460f3aa1c3e 100644 + #endif /* __WINE_USER_PRIVATE_H */ diff --git a/server/protocol.def b/server/protocol.def -index 521e2a78fa9..651e6423e82 100644 +index 5aed1d19b8e..2efaa3336e4 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -312,6 +312,13 @@ struct hardware_msg_data @@ -234,7 +234,7 @@ index 521e2a78fa9..651e6423e82 100644 typedef union { -@@ -2301,6 +2320,7 @@ enum message_type +@@ -2048,6 +2067,7 @@ enum message_type user_handle_t win; /* window handle */ hw_input_t input; /* input data */ unsigned int flags; /* flags (see below) */ @@ -243,10 +243,10 @@ index 521e2a78fa9..651e6423e82 100644 int wait; /* do we need to wait for a reply? */ int prev_x; /* previous cursor position */ diff --git a/server/queue.c b/server/queue.c -index 3ad376b776b..baf19fa17a6 100644 +index 1cdecd9ef26..43e488eac70 100644 --- a/server/queue.c +++ b/server/queue.c -@@ -1588,7 +1588,7 @@ static int send_hook_ll_message( struct desktop *desktop, struct message *hardwa +@@ -1590,7 +1590,7 @@ static int send_hook_ll_message( struct desktop *desktop, struct message *hardwa struct msg_queue *queue; struct message *msg; timeout_t timeout = 2000 * -10000; /* FIXME: load from registry */ @@ -255,7 +255,7 @@ index 3ad376b776b..baf19fa17a6 100644 if (!(hook_thread = get_first_global_hook( id ))) return 0; if (!(queue = hook_thread->queue)) return 0; -@@ -1606,7 +1606,7 @@ static int send_hook_ll_message( struct desktop *desktop, struct message *hardwa +@@ -1608,7 +1608,7 @@ static int send_hook_ll_message( struct desktop *desktop, struct message *hardwa msg->data_size = hardware_msg->data_size; msg->result = NULL; @@ -264,7 +264,7 @@ index 3ad376b776b..baf19fa17a6 100644 { unsigned short vkey = input->kbd.vkey; if (input->kbd.flags & KEYEVENTF_UNICODE) vkey = VK_PACKET; -@@ -1642,6 +1642,8 @@ struct rawinput_message +@@ -1644,6 +1644,8 @@ struct rawinput_message struct desktop *desktop; struct hw_msg_source source; unsigned int time; @@ -273,7 +273,7 @@ index 3ad376b776b..baf19fa17a6 100644 struct hardware_msg_data data; const void *extra; data_size_t extra_len; -@@ -1651,6 +1653,7 @@ struct rawinput_message +@@ -1653,6 +1655,7 @@ struct rawinput_message static int queue_rawinput_message( struct process* process, void *arg ) { const struct rawinput_message* raw_msg = arg; @@ -281,7 +281,7 @@ index 3ad376b776b..baf19fa17a6 100644 const struct rawinput_device *device = NULL; struct desktop *target_desktop = NULL, *desktop = NULL; struct thread *target_thread = NULL, *foreground = NULL; -@@ -1662,6 +1665,8 @@ static int queue_rawinput_message( struct process* process, void *arg ) +@@ -1664,6 +1667,8 @@ static int queue_rawinput_message( struct process* process, void *arg ) device = process->rawinput_mouse; else if (raw_msg->data.rawinput.type == RIM_TYPEKEYBOARD) device = process->rawinput_kbd; @@ -290,7 +290,7 @@ index 3ad376b776b..baf19fa17a6 100644 if (!device) return 0; if (raw_msg->desktop) desktop = (struct desktop *)grab_object( raw_msg->desktop ); -@@ -1980,6 +1985,37 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ +@@ -1982,6 +1987,37 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ queue_hardware_message( desktop, msg, 1 ); } @@ -328,7 +328,7 @@ index 3ad376b776b..baf19fa17a6 100644 /* check message filter for a hardware message */ static int check_hw_message_filter( user_handle_t win, unsigned int msg_code, user_handle_t filter_win, unsigned int first, unsigned int last ) -@@ -2485,15 +2521,18 @@ DECL_HANDLER(send_hardware_message) +@@ -2487,15 +2523,18 @@ DECL_HANDLER(send_hardware_message) switch (req->input.type) { @@ -350,7 +350,7 @@ index 3ad376b776b..baf19fa17a6 100644 default: set_error( STATUS_INVALID_PARAMETER ); } -@@ -3265,20 +3304,23 @@ DECL_HANDLER(get_rawinput_buffer) +@@ -3267,20 +3306,23 @@ DECL_HANDLER(get_rawinput_buffer) { struct message *msg = LIST_ENTRY( ptr, struct message, entry ); struct hardware_msg_data *data = msg->data; @@ -378,10 +378,10 @@ index 3ad376b776b..baf19fa17a6 100644 } diff --git a/server/trace.c b/server/trace.c -index dfb39300668..3d2fc875176 100644 +index f217bb1fa90..687a9f8e5d9 100644 --- a/server/trace.c +++ b/server/trace.c -@@ -386,24 +386,28 @@ static void dump_hw_input( const char *prefix, const hw_input_t *input ) +@@ -399,24 +399,28 @@ static void dump_hw_input( const char *prefix, const hw_input_t *input ) { switch (input->type) { @@ -414,5 +414,5 @@ index dfb39300668..3d2fc875176 100644 fprintf( stderr, "%s{type=%04x}", prefix, input->type ); break; -- -2.27.0 +2.28.0 diff --git a/patches/ws2_32-TransmitFile/definition b/patches/ws2_32-TransmitFile/definition index f54cc82d..a2a8db04 100644 --- a/patches/ws2_32-TransmitFile/definition +++ b/patches/ws2_32-TransmitFile/definition @@ -1 +1,3 @@ # Fixes: [5048] Support for TransmitFile +# Broken nontrivially by db8a75312, and I'm working on a proper implementation for this. +Disabled: true diff --git a/staging/upstream-commit b/staging/upstream-commit index 9dddfd32..9a230ef5 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -666c5b6e20e3b9e1e34d10b88372406f494699f2 +1a7b256f7c69c50c2a216317e03f9caeb268d0af