From 41e15516bde2e7c96fdb229c17140bf52fb05403 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Wed, 10 Feb 2021 19:09:42 -0600 Subject: [PATCH] Rebase against 2d6b0b67d91b6433744ec859b10b8ee8eb4a37b3. --- ...1-cryptext-Implement-CryptExtOpenCER.patch | 26 +- ...entfd-descriptors-for-pseudo-fd-obje.patch | 22 +- patches/mfplat-streaming-support/definition | 2 + ...storing-DOS-attributes-in-NtCreateFi.patch | 41 ++- ...rt-for-deleting-junction-points-with.patch | 52 +-- ...roperly-handle-file-symlink-deletion.patch | 24 +- ...t-Win32-futexes-on-top-of-thread-ID-.patch | 24 +- ...t-the-critical-section-fast-path-on-.patch | 30 +- ...-the-direct-futex-path-for-condition.patch | 26 +- ...nt-SRW-locks-on-top-of-Win32-futexes.patch | 56 ++- ...opening-files-through-nt-device-path.patch | 30 +- ...NtQueryVirtualMemory-MemorySectionNa.patch | 273 -------------- ...tests-for-NtQueryVirtualMemory-Memor.patch | 61 --- ...uery-section-names-from-other-proces.patch | 57 --- ...ss-access-rights-in-get_mapping_file.patch | 26 -- patches/ntdll-NtQueryVirtualMemory/definition | 3 +- ...low-special-characters-in-pipe-names.patch | 18 +- patches/patchinstall.sh | 346 +----------------- ...ecurity-attributes-from-parent-direc.patch | 21 +- patches/server-Inherited_ACLs/definition | 2 + ...ly-store-the-full-security-descripto.patch | 38 +- ...e-security-attributes-with-extended-.patch | 8 +- patches/server-unix_name/definition | 2 + ...plement-NewMenu-with-new-folder-item.patch | 36 +- ...ement-file-operation-progress-dialog.patch | 42 +-- ...nput-message-type-to-send_hardware_m.patch | 50 +-- ...-WinRT-activatable-attribute-parsing.patch | 66 ---- ...pport-WinRT-static-attribute-parsing.patch | 78 ---- ...ows.Media.SpeechSynthesis.SpeechSynt.patch | 56 --- ...-widl-Support-WinRT-requires-keyword.patch | 209 ----------- patches/widl-winrt-support/definition | 2 + patches/windows.gaming.input-dll/definition | 2 + patches/windows.globalization-dll/definition | 2 + patches/windows.media.speech.dll/definition | 2 + .../definition | 2 + staging/upstream-commit | 2 +- 36 files changed, 318 insertions(+), 1419 deletions(-) delete mode 100644 patches/ntdll-NtQueryVirtualMemory/0003-ntdll-Implement-NtQueryVirtualMemory-MemorySectionNa.patch delete mode 100644 patches/ntdll-NtQueryVirtualMemory/0004-ntdll-tests-Add-tests-for-NtQueryVirtualMemory-Memor.patch delete mode 100644 patches/ntdll-NtQueryVirtualMemory/0006-ntdll-Allow-to-query-section-names-from-other-proces.patch delete mode 100644 patches/ntdll-NtQueryVirtualMemory/0010-server-Fix-process-access-rights-in-get_mapping_file.patch delete mode 100644 patches/widl-winrt-support/0012-widl-Support-WinRT-activatable-attribute-parsing.patch delete mode 100644 patches/widl-winrt-support/0013-widl-Support-WinRT-static-attribute-parsing.patch delete mode 100644 patches/widl-winrt-support/0014-include-Add-Windows.Media.SpeechSynthesis.SpeechSynt.patch delete mode 100644 patches/widl-winrt-support/0015-widl-Support-WinRT-requires-keyword.patch diff --git a/patches/cryptext-CryptExtOpenCER/0001-cryptext-Implement-CryptExtOpenCER.patch b/patches/cryptext-CryptExtOpenCER/0001-cryptext-Implement-CryptExtOpenCER.patch index 080d752f..2c69886d 100644 --- a/patches/cryptext-CryptExtOpenCER/0001-cryptext-Implement-CryptExtOpenCER.patch +++ b/patches/cryptext-CryptExtOpenCER/0001-cryptext-Implement-CryptExtOpenCER.patch @@ -1,4 +1,4 @@ -From 39c92b48498d080c4d90e9b8d16c580dd72b1941 Mon Sep 17 00:00:00 2001 +From 645cdde83d5430c5096fcb4ec4191aab7e8063ce Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 5 Jul 2019 13:20:23 +0800 Subject: [PATCH] cryptext: Implement CryptExtOpenCER. @@ -17,31 +17,31 @@ Signed-off-by: Dmitry Timoshkov create mode 100644 dlls/cryptext/tests/cryptext.c diff --git a/configure b/configure -index f1de2c4052..ed79a35e0e 100755 +index 8567a9ca4ef..9b4ff8a2d7a 100755 --- a/configure +++ b/configure -@@ -20063,6 +20063,7 @@ wine_fn_config_makefile dlls/crypt32/tests enable_tests +@@ -20276,6 +20276,7 @@ wine_fn_config_makefile dlls/crypt32/tests enable_tests wine_fn_config_makefile dlls/cryptdlg enable_cryptdlg wine_fn_config_makefile dlls/cryptdll enable_cryptdll wine_fn_config_makefile dlls/cryptext enable_cryptext +wine_fn_config_makefile dlls/cryptext/tests enable_tests wine_fn_config_makefile dlls/cryptnet enable_cryptnet wine_fn_config_makefile dlls/cryptnet/tests enable_tests - wine_fn_config_makefile dlls/cryptui enable_cryptui + wine_fn_config_makefile dlls/cryptsp enable_cryptsp diff --git a/configure.ac b/configure.ac -index a7c45ace73..e801c35c46 100644 +index 0549a9ee78a..b58b05d4dd7 100644 --- a/configure.ac +++ b/configure.ac -@@ -3049,6 +3049,7 @@ WINE_CONFIG_MAKEFILE(dlls/crypt32/tests) +@@ -3070,6 +3070,7 @@ WINE_CONFIG_MAKEFILE(dlls/crypt32/tests) WINE_CONFIG_MAKEFILE(dlls/cryptdlg) WINE_CONFIG_MAKEFILE(dlls/cryptdll) WINE_CONFIG_MAKEFILE(dlls/cryptext) +WINE_CONFIG_MAKEFILE(dlls/cryptext/tests) WINE_CONFIG_MAKEFILE(dlls/cryptnet) WINE_CONFIG_MAKEFILE(dlls/cryptnet/tests) - WINE_CONFIG_MAKEFILE(dlls/cryptui) + WINE_CONFIG_MAKEFILE(dlls/cryptsp) diff --git a/dlls/cryptext/Makefile.in b/dlls/cryptext/Makefile.in -index 9c9f84cee8..0e817ffda6 100644 +index 9c9f84cee87..0e817ffda6c 100644 --- a/dlls/cryptext/Makefile.in +++ b/dlls/cryptext/Makefile.in @@ -1,4 +1,5 @@ @@ -52,7 +52,7 @@ index 9c9f84cee8..0e817ffda6 100644 EXTRADLLFLAGS = -mno-cygwin diff --git a/dlls/cryptext/cryptext.spec b/dlls/cryptext/cryptext.spec -index 0dba38e393..911ab2f4ba 100644 +index 0dba38e3934..911ab2f4ba4 100644 --- a/dlls/cryptext/cryptext.spec +++ b/dlls/cryptext/cryptext.spec @@ -12,8 +12,8 @@ @@ -67,7 +67,7 @@ index 0dba38e393..911ab2f4ba 100644 @ stub CryptExtOpenCRLW @ stub CryptExtOpenCTL diff --git a/dlls/cryptext/cryptext_main.c b/dlls/cryptext/cryptext_main.c -index f7c7bd1f55..2a381782d6 100644 +index f7c7bd1f554..2a381782d68 100644 --- a/dlls/cryptext/cryptext_main.c +++ b/dlls/cryptext/cryptext_main.c @@ -22,10 +22,29 @@ @@ -151,7 +151,7 @@ index f7c7bd1f55..2a381782d6 100644 +} diff --git a/dlls/cryptext/tests/Makefile.in b/dlls/cryptext/tests/Makefile.in new file mode 100644 -index 0000000000..522fc60a4a +index 00000000000..522fc60a4af --- /dev/null +++ b/dlls/cryptext/tests/Makefile.in @@ -0,0 +1,4 @@ @@ -161,7 +161,7 @@ index 0000000000..522fc60a4a + cryptext.c diff --git a/dlls/cryptext/tests/cryptext.c b/dlls/cryptext/tests/cryptext.c new file mode 100644 -index 0000000000..cc62a772b5 +index 00000000000..cc62a772b59 --- /dev/null +++ b/dlls/cryptext/tests/cryptext.c @@ -0,0 +1,61 @@ @@ -227,5 +227,5 @@ index 0000000000..cc62a772b5 + test_CryptExtOpenCER(); +} -- -2.17.1 +2.20.1 diff --git a/patches/eventfd_synchronization/0046-server-Create-eventfd-descriptors-for-pseudo-fd-obje.patch b/patches/eventfd_synchronization/0046-server-Create-eventfd-descriptors-for-pseudo-fd-obje.patch index f15363ec..52825f0f 100644 --- a/patches/eventfd_synchronization/0046-server-Create-eventfd-descriptors-for-pseudo-fd-obje.patch +++ b/patches/eventfd_synchronization/0046-server-Create-eventfd-descriptors-for-pseudo-fd-obje.patch @@ -1,4 +1,4 @@ -From d70b0135dbcaa414f1252b4d0a0d0389cb751e29 Mon Sep 17 00:00:00 2001 +From 1a2cd66380cef9a1f8a7a03f98d5f7af7c889bea Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Sat, 7 Jul 2018 12:57:47 +0200 Subject: [PATCH] server: Create eventfd descriptors for pseudo-fd objects and @@ -11,7 +11,7 @@ Subject: [PATCH] server: Create eventfd descriptors for pseudo-fd objects and 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/server/fd.c b/server/fd.c -index aa629ff1824..be05795f822 100644 +index 38f3ab79226..252236fbb91 100644 --- a/server/fd.c +++ b/server/fd.c @@ -102,6 +102,7 @@ @@ -22,7 +22,7 @@ index aa629ff1824..be05795f822 100644 #include "winternl.h" #include "winioctl.h" -@@ -203,6 +204,7 @@ struct fd +@@ -205,6 +206,7 @@ struct fd struct completion *completion; /* completion object attached to this fd */ apc_param_t comp_key; /* completion key to set in completion events */ unsigned int comp_flags; /* completion flags */ @@ -30,7 +30,7 @@ index aa629ff1824..be05795f822 100644 }; static void fd_dump( struct object *obj, int verbose ); -@@ -1593,6 +1595,9 @@ static void fd_destroy( struct object *obj ) +@@ -1596,6 +1598,9 @@ static void fd_destroy( struct object *obj ) free( fd->unlink_name ); free( fd->unix_name ); } @@ -40,7 +40,7 @@ index aa629ff1824..be05795f822 100644 } /* check if the desired access is possible without violating */ -@@ -1708,6 +1713,7 @@ static struct fd *alloc_fd_object(void) +@@ -1713,6 +1718,7 @@ static struct fd *alloc_fd_object(void) fd->poll_index = -1; fd->completion = NULL; fd->comp_flags = 0; @@ -48,7 +48,7 @@ index aa629ff1824..be05795f822 100644 init_async_queue( &fd->read_q ); init_async_queue( &fd->write_q ); init_async_queue( &fd->wait_q ); -@@ -1746,11 +1752,15 @@ struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *use +@@ -1753,11 +1759,15 @@ struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *use fd->completion = NULL; fd->comp_flags = 0; fd->no_fd_status = STATUS_BAD_DEVICE_TYPE; @@ -64,7 +64,7 @@ index aa629ff1824..be05795f822 100644 return fd; } -@@ -2147,6 +2157,9 @@ void set_fd_signaled( struct fd *fd, int signaled ) +@@ -2202,6 +2212,9 @@ void set_fd_signaled( struct fd *fd, int signaled ) if (fd->comp_flags & FILE_SKIP_SET_EVENT_ON_HANDLE) return; fd->signaled = signaled; if (signaled) wake_up( fd->user, 0 ); @@ -74,7 +74,7 @@ index aa629ff1824..be05795f822 100644 } /* handler for close_handle that refuses to close fd-associated handles in other processes */ -@@ -2178,6 +2191,15 @@ int default_fd_signaled( struct object *obj, struct wait_queue_entry *entry ) +@@ -2233,6 +2246,15 @@ int default_fd_signaled( struct object *obj, struct wait_queue_entry *entry ) return ret; } @@ -91,11 +91,11 @@ index aa629ff1824..be05795f822 100644 { int events = 0; diff --git a/server/file.h b/server/file.h -index 686bae084c5..dab6d1506c3 100644 +index 3b70799a3ec..f332c685add 100644 --- a/server/file.h +++ b/server/file.h -@@ -102,6 +102,7 @@ extern void set_fd_signaled( struct fd *fd, int signaled ); - extern char *dup_fd_name( struct fd *root, const char *name ); +@@ -104,6 +104,7 @@ extern char *dup_fd_name( struct fd *root, const char *name ); + extern void get_nt_name( struct fd *fd, struct unicode_str *name ); extern int default_fd_signaled( struct object *obj, struct wait_queue_entry *entry ); +extern int default_fd_get_esync_fd( struct object *obj, enum esync_type *type ); diff --git a/patches/mfplat-streaming-support/definition b/patches/mfplat-streaming-support/definition index 00ba0f55..e6d0f574 100644 --- a/patches/mfplat-streaming-support/definition +++ b/patches/mfplat-streaming-support/definition @@ -1 +1,3 @@ Fixes: [49692] Multiple applications need a Media Foundation media source implementation +# Will need to be rewritten after winegstreamer is converted. +Disabled: true diff --git a/patches/ntdll-DOS_Attributes/0004-ntdll-Implement-storing-DOS-attributes-in-NtCreateFi.patch b/patches/ntdll-DOS_Attributes/0004-ntdll-Implement-storing-DOS-attributes-in-NtCreateFi.patch index a5da6caa..1bfdcfcb 100644 --- a/patches/ntdll-DOS_Attributes/0004-ntdll-Implement-storing-DOS-attributes-in-NtCreateFi.patch +++ b/patches/ntdll-DOS_Attributes/0004-ntdll-Implement-storing-DOS-attributes-in-NtCreateFi.patch @@ -1,12 +1,12 @@ -From 92aeb076183fd7311b5fa05b33af0304d897361d Mon Sep 17 00:00:00 2001 +From fb7e1b2b7cb08e5fd1f9be9064e7862588896f4b Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Wed, 20 Aug 2014 15:28:00 -0600 Subject: [PATCH] ntdll: Implement storing DOS attributes in NtCreateFile. --- - dlls/ntdll/tests/directory.c | 24 ++++++++--------- - dlls/ntdll/unix/file.c | 51 ++++++++++++++++++++++++++++++++---- - 2 files changed, 57 insertions(+), 18 deletions(-) + dlls/ntdll/tests/directory.c | 24 +++++++-------- + dlls/ntdll/unix/file.c | 59 ++++++++++++++++++++++++++++++------ + 2 files changed, 61 insertions(+), 22 deletions(-) diff --git a/dlls/ntdll/tests/directory.c b/dlls/ntdll/tests/directory.c index d21a2e64f8e..dc4f09729ac 100644 @@ -58,10 +58,10 @@ index d21a2e64f8e..dc4f09729ac 100644 } testfiles[i].nfound++; diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c -index 0a326a7a1bd..a72d95f8378 100644 +index ee6382611a9..a92c40ddd6a 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c -@@ -406,6 +406,26 @@ static int xattr_get( const char *path, const char *name, void *value, size_t si +@@ -409,6 +409,26 @@ static int xattr_get( const char *path, const char *name, void *value, size_t si #endif } @@ -88,7 +88,7 @@ index 0a326a7a1bd..a72d95f8378 100644 /* get space from the current directory data buffer, allocating a new one if necessary */ static void *get_dir_data_space( struct dir_data *data, unsigned int size ) { -@@ -3582,6 +3602,20 @@ void CDECL set_show_dot_files( BOOL enable ) +@@ -3620,6 +3640,20 @@ void CDECL set_show_dot_files( BOOL enable ) show_dot_files = enable; } @@ -109,27 +109,42 @@ index 0a326a7a1bd..a72d95f8378 100644 /****************************************************************************** * open_unix_file -@@ -3669,13 +3703,14 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU +@@ -3662,6 +3696,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU + ULONG attributes, ULONG sharing, ULONG disposition, + ULONG options, void *ea_buffer, ULONG ea_length ) + { ++ OBJECT_ATTRIBUTES nt_attr; + UNICODE_STRING nt_name = { 0 }; + char *unix_name; + BOOL created = FALSE; +@@ -3705,17 +3740,17 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU io->u.Status = STATUS_SUCCESS; } - if (io->u.Status == STATUS_SUCCESS) + if (io->u.Status != STATUS_SUCCESS) { -- io->u.Status = open_unix_file( handle, unix_name, access, attr, attributes, +- OBJECT_ATTRIBUTES nt_attr = *attr; +- +- if (nt_name.Buffer) nt_attr.ObjectName = &nt_name; +- io->u.Status = open_unix_file( handle, unix_name, access, &nt_attr, attributes, - sharing, disposition, options, ea_buffer, ea_length ); +- free( nt_name.Buffer ); - free( unix_name ); + WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status ); + return io->u.Status; } - else WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status ); + -+ io->u.Status = open_unix_file( handle, unix_name, access, attr, attributes, ++ nt_attr = *attr; ++ if (nt_name.Buffer) nt_attr.ObjectName = &nt_name; ++ io->u.Status = open_unix_file( handle, unix_name, access, &nt_attr, attributes, + sharing, disposition, options, ea_buffer, ea_length ); ++ free( nt_name.Buffer ); if (io->u.Status == STATUS_SUCCESS) { -@@ -3697,6 +3732,11 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU +@@ -3737,6 +3772,11 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU io->Information = FILE_OVERWRITTEN; break; } @@ -141,7 +156,7 @@ index 0a326a7a1bd..a72d95f8378 100644 } else if (io->u.Status == STATUS_TOO_MANY_OPENED_FILES) { -@@ -3704,6 +3744,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU +@@ -3744,6 +3784,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU if (!once++) ERR_(winediag)( "Too many open files, ulimit -n probably needs to be increased\n" ); } @@ -150,5 +165,5 @@ index 0a326a7a1bd..a72d95f8378 100644 } -- -2.28.0 +2.20.1 diff --git a/patches/ntdll-Junction_Points/0005-server-Add-support-for-deleting-junction-points-with.patch b/patches/ntdll-Junction_Points/0005-server-Add-support-for-deleting-junction-points-with.patch index 0b6ee456..143458b0 100644 --- a/patches/ntdll-Junction_Points/0005-server-Add-support-for-deleting-junction-points-with.patch +++ b/patches/ntdll-Junction_Points/0005-server-Add-support-for-deleting-junction-points-with.patch @@ -1,7 +1,7 @@ -From 660851a75e0f3cb8fb0c10441f9f87bed3bdd586 Mon Sep 17 00:00:00 2001 +From 43a042096de57734560d7745bce70c45722c44fa Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Thu, 16 Jan 2014 21:02:11 -0700 -Subject: server: Add support for deleting junction points with +Subject: [PATCH] server: Add support for deleting junction points with RemoveDirectory. Signed-off-by: Erich E. Hoover @@ -11,10 +11,10 @@ Signed-off-by: Erich E. Hoover 2 files changed, 61 insertions(+), 10 deletions(-) diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index 49e2771f587..68747b312b4 100644 +index 7ad25ffd239..5a2ac2114b0 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c -@@ -5191,7 +5191,7 @@ static void test_reparse_points(void) +@@ -5190,7 +5190,7 @@ static void test_reparse_points(void) REPARSE_GUID_DATA_BUFFER guid_buffer; static const WCHAR dotW[] = {'.',0}; REPARSE_DATA_BUFFER *buffer = NULL; @@ -23,7 +23,7 @@ index 49e2771f587..68747b312b4 100644 INT buffer_len, string_len; IO_STATUS_BLOCK iosb; UNICODE_STRING nameW; -@@ -5280,6 +5280,38 @@ static void test_reparse_points(void) +@@ -5279,6 +5279,38 @@ static void test_reparse_points(void) "Junction point folder's access time does not match.\n"); CloseHandle(handle); @@ -63,7 +63,7 @@ index 49e2771f587..68747b312b4 100644 /* Cleanup */ pRtlFreeUnicodeString(&nameW); diff --git a/server/fd.c b/server/fd.c -index edb59b0d540..622b3c246aa 100644 +index 2dcdd04a892..b67814c7a4f 100644 --- a/server/fd.c +++ b/server/fd.c @@ -169,7 +169,8 @@ struct closed_fd @@ -82,9 +82,9 @@ index edb59b0d540..622b3c246aa 100644 unsigned int sharing; /* file sharing mode */ + char *unlink_name; /* file name to unlink on close */ char *unix_name; /* unix file name */ - int unix_fd; /* unix file descriptor */ - unsigned int no_fd_status;/* status to return when unix_fd is -1 */ -@@ -1119,6 +1121,7 @@ static void inode_close_pending( struct inode *inode, int keep_unlinks ) + WCHAR *nt_name; /* NT file name */ + data_size_t nt_namelen; /* length of NT file name */ +@@ -1121,6 +1123,7 @@ static void inode_close_pending( struct inode *inode, int keep_unlinks ) if (!keep_unlinks || !fd->unlink) /* get rid of it unless there's an unlink pending on that file */ { list_remove( ptr ); @@ -92,7 +92,7 @@ index edb59b0d540..622b3c246aa 100644 free( fd->unix_name ); free( fd ); } -@@ -1153,12 +1156,13 @@ static void inode_destroy( struct object *obj ) +@@ -1155,12 +1158,13 @@ static void inode_destroy( struct object *obj ) { /* make sure it is still the same file */ struct stat st; @@ -109,7 +109,7 @@ index edb59b0d540..622b3c246aa 100644 free( fd->unix_name ); free( fd ); } -@@ -1578,6 +1582,7 @@ static void fd_destroy( struct object *obj ) +@@ -1581,6 +1585,7 @@ static void fd_destroy( struct object *obj ) else /* no inode, close it right away */ { if (fd->unix_fd != -1) close( fd->unix_fd ); @@ -117,24 +117,24 @@ index edb59b0d540..622b3c246aa 100644 free( fd->unix_name ); } } -@@ -1687,6 +1692,7 @@ static struct fd *alloc_fd_object(void) +@@ -1690,6 +1695,7 @@ static struct fd *alloc_fd_object(void) fd->options = 0; fd->sharing = 0; fd->unix_fd = -1; + fd->unlink_name = NULL; fd->unix_name = NULL; - fd->cacheable = 0; - fd->signaled = 1; -@@ -1722,6 +1728,7 @@ struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *use + fd->nt_name = NULL; + fd->nt_namelen = 0; +@@ -1727,6 +1733,7 @@ struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *use fd->access = 0; fd->options = options; fd->sharing = 0; + fd->unlink_name = NULL; fd->unix_name = NULL; - fd->unix_fd = -1; - fd->cacheable = 0; -@@ -1756,6 +1763,12 @@ struct fd *dup_fd_object( struct fd *orig, unsigned int access, unsigned int sha - strcpy( fd->unix_name, orig->unix_name ); + fd->nt_name = NULL; + fd->nt_namelen = 0; +@@ -1768,6 +1775,12 @@ struct fd *dup_fd_object( struct fd *orig, unsigned int access, unsigned int sha + fd->nt_namelen = orig->nt_namelen; } + if (orig->unlink_name) @@ -146,7 +146,7 @@ index edb59b0d540..622b3c246aa 100644 if (orig->inode) { struct closed_fd *closed = mem_alloc( sizeof(*closed) ); -@@ -1768,6 +1781,7 @@ struct fd *dup_fd_object( struct fd *orig, unsigned int access, unsigned int sha +@@ -1780,6 +1793,7 @@ struct fd *dup_fd_object( struct fd *orig, unsigned int access, unsigned int sha } closed->unix_fd = fd->unix_fd; closed->unlink = 0; @@ -154,7 +154,7 @@ index edb59b0d540..622b3c246aa 100644 closed->unix_name = fd->unix_name; fd->closed = closed; fd->inode = (struct inode *)grab_object( orig->inode ); -@@ -1909,18 +1923,19 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode, +@@ -1964,18 +1978,19 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam fd->unix_name = NULL; if ((path = dup_fd_name( root, name ))) { @@ -177,7 +177,7 @@ index edb59b0d540..622b3c246aa 100644 { unsigned int err; struct inode *inode = get_inode( st.st_dev, st.st_ino, fd->unix_fd ); -@@ -1938,6 +1953,9 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode, +@@ -1993,6 +2008,9 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam list_add_head( &inode->open, &fd->inode_entry ); closed_fd = NULL; @@ -187,10 +187,10 @@ index edb59b0d540..622b3c246aa 100644 /* check directory options */ if ((options & FILE_DIRECTORY_FILE) && !S_ISDIR(st.st_mode)) { -@@ -2563,10 +2581,11 @@ static void set_fd_name( struct fd *fd, struct fd *root, const char *nameptr, - fchmod( fd->unix_fd, st.st_mode ); - } +@@ -2610,10 +2628,11 @@ static void set_fd_name( struct fd *fd, struct fd *root, const char *nameptr, da + free( fd->nt_name ); + fd->nt_name = dup_nt_name( root, nt_name, &fd->nt_namelen ); + free( fd->unlink_name ); free( fd->unix_name ); + fd->closed->unlink_name = fd->unlink_name = name; @@ -202,5 +202,5 @@ index edb59b0d540..622b3c246aa 100644 return; -- -2.17.1 +2.20.1 diff --git a/patches/ntdll-Junction_Points/0018-server-Properly-handle-file-symlink-deletion.patch b/patches/ntdll-Junction_Points/0018-server-Properly-handle-file-symlink-deletion.patch index 34fbf513..f725110c 100644 --- a/patches/ntdll-Junction_Points/0018-server-Properly-handle-file-symlink-deletion.patch +++ b/patches/ntdll-Junction_Points/0018-server-Properly-handle-file-symlink-deletion.patch @@ -1,7 +1,7 @@ -From 39739eab0295b80aa081bda4899d7920a5690e09 Mon Sep 17 00:00:00 2001 +From c4916e098d2aefe4f078bc9c396015e15d6ed9d4 Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Sat, 30 Mar 2019 13:41:07 -0600 -Subject: server: Properly handle file symlink deletion. +Subject: [PATCH] server: Properly handle file symlink deletion. Signed-off-by: Erich E. Hoover --- @@ -10,10 +10,10 @@ Signed-off-by: Erich E. Hoover 2 files changed, 62 insertions(+), 8 deletions(-) diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index 8d61257e1e5..b9d9c817eaa 100644 +index e6c6807e0b2..0c7c5a1bf57 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c -@@ -5389,18 +5389,18 @@ static void test_reparse_points(void) +@@ -5386,18 +5386,18 @@ static void test_reparse_points(void) /* Check deleting a file symlink as if it were a directory */ bret = RemoveDirectoryW(reparse_path); @@ -39,11 +39,11 @@ index 8d61257e1e5..b9d9c817eaa 100644 /* Create a blank slate for directory symlink tests */ bret = CreateDirectoryW(reparse_path, NULL); diff --git a/server/fd.c b/server/fd.c -index d15e727d19f..0d8eece7bcb 100644 +index fe662ce6bb5..8613769c1bf 100644 --- a/server/fd.c +++ b/server/fd.c -@@ -1849,6 +1849,55 @@ char *dup_fd_name( struct fd *root, const char *name ) - return ret; +@@ -1902,6 +1902,55 @@ void get_nt_name( struct fd *fd, struct unicode_str *name ) + name->len = fd->nt_namelen; } +static void decode_symlink(char *name, int *is_dir) @@ -96,9 +96,9 @@ index d15e727d19f..0d8eece7bcb 100644 +} + /* open() wrapper that returns a struct fd with no fd user set */ - struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode, unsigned int access, - unsigned int sharing, unsigned int options ) -@@ -1948,6 +1997,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode, + struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_name, + int flags, mode_t *mode, unsigned int access, +@@ -2003,6 +2052,7 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam { unsigned int err; struct inode *inode = get_inode( st.st_dev, st.st_ino, fd->unix_fd ); @@ -106,7 +106,7 @@ index d15e727d19f..0d8eece7bcb 100644 if (!inode) { -@@ -1962,16 +2012,20 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode, +@@ -2017,16 +2067,20 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam list_add_head( &inode->open, &fd->inode_entry ); closed_fd = NULL; @@ -130,5 +130,5 @@ index d15e727d19f..0d8eece7bcb 100644 set_error( STATUS_FILE_IS_A_DIRECTORY ); goto error; -- -2.17.1 +2.20.1 diff --git a/patches/ntdll-NtAlertThreadByThreadId/0009-ntdll-Reimplement-Win32-futexes-on-top-of-thread-ID-.patch b/patches/ntdll-NtAlertThreadByThreadId/0009-ntdll-Reimplement-Win32-futexes-on-top-of-thread-ID-.patch index ab0f1af2..0545fc28 100644 --- a/patches/ntdll-NtAlertThreadByThreadId/0009-ntdll-Reimplement-Win32-futexes-on-top-of-thread-ID-.patch +++ b/patches/ntdll-NtAlertThreadByThreadId/0009-ntdll-Reimplement-Win32-futexes-on-top-of-thread-ID-.patch @@ -1,4 +1,4 @@ -From 846818cb0adabcc072f08b8816ac91019ef3150a Mon Sep 17 00:00:00 2001 +From 3544dcdce27e40469fe57ddbc9be2128cf13cee8 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Mon, 2 Nov 2020 20:24:07 -0600 Subject: [PATCH] ntdll: Reimplement Win32 futexes on top of thread-ID alerts. @@ -14,10 +14,10 @@ Signed-off-by: Zebediah Figura 6 files changed, 187 insertions(+), 173 deletions(-) diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h -index 41e8666a25c..8ba5c2e22fd 100644 +index 60b8ffc46d6..6d6b73effb4 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h -@@ -88,6 +88,8 @@ extern void init_directories(void) DECLSPEC_HIDDEN; +@@ -89,6 +89,8 @@ extern void init_directories(void) DECLSPEC_HIDDEN; extern struct _KUSER_SHARED_DATA *user_shared_data DECLSPEC_HIDDEN; @@ -261,10 +261,10 @@ index 8e5a3a3a3a3..3a74b55aa1e 100644 } diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c -index 43c769f2d2a..bb386648a70 100644 +index e8853415205..585b30ea21b 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c -@@ -1513,9 +1513,6 @@ static struct unix_funcs unix_funcs = +@@ -1582,9 +1582,6 @@ static struct unix_funcs unix_funcs = #endif DbgUiIssueRemoteBreakin, RtlGetSystemTimePrecise, @@ -275,7 +275,7 @@ index 43c769f2d2a..bb386648a70 100644 fast_RtlpUnWaitCriticalSection, fast_RtlDeleteCriticalSection, diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c -index 17c5921cdec..00e9eebe46e 100644 +index 569334580cd..39766a88e20 100644 --- a/dlls/ntdll/unix/sync.c +++ b/dlls/ntdll/unix/sync.c @@ -77,10 +77,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(sync); @@ -314,7 +314,7 @@ index 17c5921cdec..00e9eebe46e 100644 /* create a struct security_descriptor and contained information in one contiguous piece of memory */ NTSTATUS alloc_object_attributes( const OBJECT_ATTRIBUTES *attr, struct object_attributes **ret, data_size_t *ret_len ) -@@ -2679,71 +2657,6 @@ NTSTATUS CDECL fast_RtlWakeConditionVariable( RTL_CONDITION_VARIABLE *variable, +@@ -2839,71 +2817,6 @@ NTSTATUS CDECL fast_RtlWakeConditionVariable( RTL_CONDITION_VARIABLE *variable, return STATUS_SUCCESS; } @@ -386,7 +386,7 @@ index 17c5921cdec..00e9eebe46e 100644 #else NTSTATUS CDECL fast_RtlTryAcquireSRWLockExclusive( RTL_SRWLOCK *lock ) -@@ -2786,79 +2699,4 @@ NTSTATUS CDECL fast_wait_cv( RTL_CONDITION_VARIABLE *variable, const void *value +@@ -2946,79 +2859,4 @@ NTSTATUS CDECL fast_wait_cv( RTL_CONDITION_VARIABLE *variable, const void *value return STATUS_NOT_IMPLEMENTED; } @@ -467,15 +467,15 @@ index 17c5921cdec..00e9eebe46e 100644 - mutex_unlock( &addr_mutex ); -} diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h -index 0847c7e07ca..95ed792baee 100644 +index ed78d08559a..cd890152230 100644 --- a/dlls/ntdll/unixlib.h +++ b/dlls/ntdll/unixlib.h @@ -27,7 +27,7 @@ struct _DISPATCHER_CONTEXT; /* increment this when you change the function table */ --#define NTDLL_UNIXLIB_VERSION 107 -+#define NTDLL_UNIXLIB_VERSION 108 +-#define NTDLL_UNIXLIB_VERSION 108 ++#define NTDLL_UNIXLIB_VERSION 109 struct unix_funcs { @@ -491,5 +491,5 @@ index 0847c7e07ca..95ed792baee 100644 /* fast locks */ NTSTATUS (CDECL *fast_RtlpWaitForCriticalSection)( RTL_CRITICAL_SECTION *crit, int timeout ); -- -2.29.2 +2.20.1 diff --git a/patches/ntdll-NtAlertThreadByThreadId/0011-ntdll-Reimplement-the-critical-section-fast-path-on-.patch b/patches/ntdll-NtAlertThreadByThreadId/0011-ntdll-Reimplement-the-critical-section-fast-path-on-.patch index 6bc797b8..0b24fe18 100644 --- a/patches/ntdll-NtAlertThreadByThreadId/0011-ntdll-Reimplement-the-critical-section-fast-path-on-.patch +++ b/patches/ntdll-NtAlertThreadByThreadId/0011-ntdll-Reimplement-the-critical-section-fast-path-on-.patch @@ -1,4 +1,4 @@ -From 244f1f1aa95b7d7fbe1aa6d9f5247871e50cd62b Mon Sep 17 00:00:00 2001 +From c9d5f5826099aa1f80e1aa491912ac291115ebe0 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Mon, 31 Aug 2020 23:38:09 -0500 Subject: [PATCH] ntdll: Reimplement the critical section fast path on top of @@ -14,10 +14,10 @@ Signed-off-by: Zebediah Figura 5 files changed, 24 insertions(+), 131 deletions(-) diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c -index 41e95f9db4f..28bb184b665 100644 +index 66f807636c7..5bd093e42f5 100644 --- a/dlls/ntdll/sync.c +++ b/dlls/ntdll/sync.c -@@ -736,19 +736,26 @@ static inline HANDLE get_semaphore( RTL_CRITICAL_SECTION *crit ) +@@ -766,19 +766,26 @@ static inline HANDLE get_semaphore( RTL_CRITICAL_SECTION *crit ) static inline NTSTATUS wait_semaphore( RTL_CRITICAL_SECTION *crit, int timeout ) { @@ -52,7 +52,7 @@ index 41e95f9db4f..28bb184b665 100644 } /****************************************************************************** -@@ -838,8 +845,6 @@ NTSTATUS WINAPI RtlDeleteCriticalSection( RTL_CRITICAL_SECTION *crit ) +@@ -868,8 +875,6 @@ NTSTATUS WINAPI RtlDeleteCriticalSection( RTL_CRITICAL_SECTION *crit ) RtlFreeHeap( GetProcessHeap(), 0, crit->DebugInfo ); crit->DebugInfo = NULL; } @@ -61,7 +61,7 @@ index 41e95f9db4f..28bb184b665 100644 } else NtClose( crit->LockSemaphore ); crit->LockSemaphore = 0; -@@ -915,12 +920,18 @@ NTSTATUS WINAPI RtlpUnWaitCriticalSection( RTL_CRITICAL_SECTION *crit ) +@@ -945,12 +950,18 @@ NTSTATUS WINAPI RtlpUnWaitCriticalSection( RTL_CRITICAL_SECTION *crit ) NTSTATUS ret; /* debug info is cleared by MakeCriticalSectionGlobal */ @@ -83,10 +83,10 @@ index 41e95f9db4f..28bb184b665 100644 return ret; } diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c -index bb386648a70..b85b6633136 100644 +index 585b30ea21b..5784359668e 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c -@@ -1513,9 +1513,6 @@ static struct unix_funcs unix_funcs = +@@ -1582,9 +1582,6 @@ static struct unix_funcs unix_funcs = #endif DbgUiIssueRemoteBreakin, RtlGetSystemTimePrecise, @@ -97,10 +97,10 @@ index bb386648a70..b85b6633136 100644 fast_RtlAcquireSRWLockExclusive, fast_RtlTryAcquireSRWLockShared, diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c -index 00e9eebe46e..3bf43f80ce9 100644 +index 39766a88e20..8ff468d7a13 100644 --- a/dlls/ntdll/unix/sync.c +++ b/dlls/ntdll/unix/sync.c -@@ -2252,115 +2252,6 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG +@@ -2412,115 +2412,6 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG } @@ -217,10 +217,10 @@ index 00e9eebe46e..3bf43f80ce9 100644 /* Futex-based SRW lock implementation: diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h -index abc2f6d2bd4..a4f3fc33f5f 100644 +index 935a0a2894c..4686bf1b269 100644 --- a/dlls/ntdll/unix/unix_private.h +++ b/dlls/ntdll/unix/unix_private.h -@@ -93,9 +93,6 @@ extern void (WINAPI *pKiUserApcDispatcher)(CONTEXT*,ULONG_PTR,ULONG_PTR,ULON +@@ -97,9 +97,6 @@ extern void (WINAPI *pKiUserApcDispatcher)(CONTEXT*,ULONG_PTR,ULONG_PTR,ULON extern NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*) DECLSPEC_HIDDEN; extern void (WINAPI *pLdrInitializeThunk)(CONTEXT*,void**,ULONG_PTR,ULONG_PTR) DECLSPEC_HIDDEN; extern void (WINAPI *pRtlUserThreadStart)( PRTL_THREAD_START_ROUTINE entry, void *arg ) DECLSPEC_HIDDEN; @@ -231,15 +231,15 @@ index abc2f6d2bd4..a4f3fc33f5f 100644 extern NTSTATUS CDECL fast_RtlAcquireSRWLockExclusive( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN; extern NTSTATUS CDECL fast_RtlTryAcquireSRWLockShared( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN; diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h -index 95ed792baee..4487c825924 100644 +index cd890152230..99415e1c412 100644 --- a/dlls/ntdll/unixlib.h +++ b/dlls/ntdll/unixlib.h @@ -27,7 +27,7 @@ struct _DISPATCHER_CONTEXT; /* increment this when you change the function table */ --#define NTDLL_UNIXLIB_VERSION 108 -+#define NTDLL_UNIXLIB_VERSION 109 +-#define NTDLL_UNIXLIB_VERSION 109 ++#define NTDLL_UNIXLIB_VERSION 110 struct unix_funcs { @@ -254,5 +254,5 @@ index 95ed792baee..4487c825924 100644 NTSTATUS (CDECL *fast_RtlAcquireSRWLockExclusive)( RTL_SRWLOCK *lock ); NTSTATUS (CDECL *fast_RtlTryAcquireSRWLockShared)( RTL_SRWLOCK *lock ); -- -2.29.2 +2.20.1 diff --git a/patches/ntdll-NtAlertThreadByThreadId/0012-ntdll-Get-rid-of-the-direct-futex-path-for-condition.patch b/patches/ntdll-NtAlertThreadByThreadId/0012-ntdll-Get-rid-of-the-direct-futex-path-for-condition.patch index 1b669b2d..c6b441ea 100644 --- a/patches/ntdll-NtAlertThreadByThreadId/0012-ntdll-Get-rid-of-the-direct-futex-path-for-condition.patch +++ b/patches/ntdll-NtAlertThreadByThreadId/0012-ntdll-Get-rid-of-the-direct-futex-path-for-condition.patch @@ -1,4 +1,4 @@ -From 4d1cd1db8bafc0045a5d93154c89bc8edeccccda Mon Sep 17 00:00:00 2001 +From 9bd992e74a073a6ffce07463edeea29ad7aecaa5 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Mon, 31 Aug 2020 23:55:29 -0500 Subject: [PATCH] ntdll: Get rid of the direct futex path for condition @@ -14,7 +14,7 @@ Signed-off-by: Zebediah Figura 5 files changed, 9 insertions(+), 96 deletions(-) diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c -index 28bb184b665..0e86ecead3d 100644 +index 5bd093e42f5..42b62a2cd87 100644 --- a/dlls/ntdll/sync.c +++ b/dlls/ntdll/sync.c @@ -450,11 +450,8 @@ void WINAPI RtlInitializeConditionVariable( RTL_CONDITION_VARIABLE *variable ) @@ -80,10 +80,10 @@ index 28bb184b665..0e86ecead3d 100644 if (flags & RTL_CONDITION_VARIABLE_LOCKMODE_SHARED) RtlAcquireSRWLockShared( lock ); diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c -index b85b6633136..ad242b91800 100644 +index 5784359668e..2269a9f62c9 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c -@@ -1519,8 +1519,6 @@ static struct unix_funcs unix_funcs = +@@ -1588,8 +1588,6 @@ static struct unix_funcs unix_funcs = fast_RtlAcquireSRWLockShared, fast_RtlReleaseSRWLockExclusive, fast_RtlReleaseSRWLockShared, @@ -93,7 +93,7 @@ index b85b6633136..ad242b91800 100644 ntdll_ceil, ntdll_cos, diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c -index 3bf43f80ce9..07e7939fc59 100644 +index 8ff468d7a13..ca4b5b22f53 100644 --- a/dlls/ntdll/unix/sync.c +++ b/dlls/ntdll/unix/sync.c @@ -166,23 +166,6 @@ static int *get_futex(void **ptr) @@ -120,7 +120,7 @@ index 3bf43f80ce9..07e7939fc59 100644 #endif -@@ -2504,50 +2487,6 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock ) +@@ -2664,50 +2647,6 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock ) return STATUS_SUCCESS; } @@ -171,7 +171,7 @@ index 3bf43f80ce9..07e7939fc59 100644 #else NTSTATUS CDECL fast_RtlTryAcquireSRWLockExclusive( RTL_SRWLOCK *lock ) -@@ -2580,14 +2519,4 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock ) +@@ -2740,14 +2679,4 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock ) return STATUS_NOT_IMPLEMENTED; } @@ -187,10 +187,10 @@ index 3bf43f80ce9..07e7939fc59 100644 - #endif diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h -index a4f3fc33f5f..d82b8c90e84 100644 +index 4686bf1b269..0da243799f1 100644 --- a/dlls/ntdll/unix/unix_private.h +++ b/dlls/ntdll/unix/unix_private.h -@@ -99,10 +99,7 @@ extern NTSTATUS CDECL fast_RtlTryAcquireSRWLockShared( RTL_SRWLOCK *lock ) DECLS +@@ -103,10 +103,7 @@ extern NTSTATUS CDECL fast_RtlTryAcquireSRWLockShared( RTL_SRWLOCK *lock ) DECLS extern NTSTATUS CDECL fast_RtlAcquireSRWLockShared( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN; extern NTSTATUS CDECL fast_RtlReleaseSRWLockExclusive( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN; extern NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN; @@ -202,15 +202,15 @@ index a4f3fc33f5f..d82b8c90e84 100644 extern NTSTATUS CDECL get_initial_environment( WCHAR **wargv[], WCHAR *env, SIZE_T *size ) DECLSPEC_HIDDEN; extern NTSTATUS CDECL get_startup_info( startup_info_t *info, SIZE_T *total_size, SIZE_T *info_size ) DECLSPEC_HIDDEN; diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h -index 4487c825924..0d056ef2b80 100644 +index 99415e1c412..bd74bf8267a 100644 --- a/dlls/ntdll/unixlib.h +++ b/dlls/ntdll/unixlib.h @@ -27,7 +27,7 @@ struct _DISPATCHER_CONTEXT; /* increment this when you change the function table */ --#define NTDLL_UNIXLIB_VERSION 109 -+#define NTDLL_UNIXLIB_VERSION 110 +-#define NTDLL_UNIXLIB_VERSION 110 ++#define NTDLL_UNIXLIB_VERSION 111 struct unix_funcs { @@ -225,5 +225,5 @@ index 4487c825924..0d056ef2b80 100644 /* math functions */ double (CDECL *atan)( double d ); -- -2.29.2 +2.20.1 diff --git a/patches/ntdll-NtAlertThreadByThreadId/0013-ntdll-Reimplement-SRW-locks-on-top-of-Win32-futexes.patch b/patches/ntdll-NtAlertThreadByThreadId/0013-ntdll-Reimplement-SRW-locks-on-top-of-Win32-futexes.patch index 1dad57dc..6da6ec83 100644 --- a/patches/ntdll-NtAlertThreadByThreadId/0013-ntdll-Reimplement-SRW-locks-on-top-of-Win32-futexes.patch +++ b/patches/ntdll-NtAlertThreadByThreadId/0013-ntdll-Reimplement-SRW-locks-on-top-of-Win32-futexes.patch @@ -1,19 +1,19 @@ -From 55ef726442489ed42eba1981fe038b95f910d511 Mon Sep 17 00:00:00 2001 +From 5fde43f2d58b318d8e9c8a85dd21dc61fbeb0d95 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Sun, 22 Nov 2020 20:51:10 -0600 Subject: [PATCH] ntdll: Reimplement SRW locks on top of Win32 futexes. Signed-off-by: Zebediah Figura --- - dlls/ntdll/sync.c | 316 +++++++++++++++------------------ + dlls/ntdll/sync.c | 312 +++++++++++++++------------------ dlls/ntdll/unix/loader.c | 6 - dlls/ntdll/unix/sync.c | 309 -------------------------------- dlls/ntdll/unix/unix_private.h | 6 - dlls/ntdll/unixlib.h | 10 +- - 5 files changed, 143 insertions(+), 504 deletions(-) + 5 files changed, 141 insertions(+), 502 deletions(-) diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c -index 0e86ecead3d..34b076d6b71 100644 +index 42b62a2cd87..d4944951dc6 100644 --- a/dlls/ntdll/sync.c +++ b/dlls/ntdll/sync.c @@ -161,127 +161,23 @@ DWORD WINAPI RtlRunOnceExecuteOnce( RTL_RUN_ONCE *once, PRTL_RUN_ONCE_INIT_FN fu @@ -120,7 +120,8 @@ index 0e86ecead3d..34b076d6b71 100644 -} - -static inline void srwlock_leave_exclusive( RTL_SRWLOCK *lock, unsigned int val ) --{ ++struct srw_lock + { - /* Used when a thread leaves an exclusive section. If there are other - * exclusive access threads they are processed first, followed by - * the shared waiters. */ @@ -133,7 +134,8 @@ index 0e86ecead3d..34b076d6b71 100644 - NtReleaseKeyedEvent( 0, srwlock_key_shared(lock), FALSE, NULL ); - } -} -- ++ short exclusive_waiters; + -static inline void srwlock_leave_shared( RTL_SRWLOCK *lock, unsigned int val ) -{ - /* Wake up one exclusive thread as soon as the last shared access thread @@ -141,10 +143,6 @@ index 0e86ecead3d..34b076d6b71 100644 - if ((val & SRWLOCK_MASK_EXCLUSIVE_QUEUE) && !(val & SRWLOCK_MASK_SHARED_QUEUE)) - NtReleaseKeyedEvent( 0, srwlock_key_exclusive(lock), FALSE, NULL ); -} -+struct srw_lock -+{ -+ short exclusive_waiters; -+ + /* Number of shared owners, or -1 if owned exclusive. + * + * Sadly Windows has no equivalent to FUTEX_WAIT_BITSET, so in order to wake @@ -274,11 +272,11 @@ index 0e86ecead3d..34b076d6b71 100644 + { + old.s = *u.s; + new = old; ++ ++ if (old.s.owners != -1) ERR("Lock %p is not owned exclusive!\n", lock); - srwlock_leave_exclusive( lock, srwlock_unlock_exclusive( (unsigned int *)&lock->Ptr, - - SRWLOCK_RES_EXCLUSIVE ) - SRWLOCK_RES_EXCLUSIVE ); -+ if (old.s.owners != -1) ERR("Lock %p is not owned exclusive!\n", lock); -+ + new.s.owners = 0; + } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l); + @@ -302,12 +300,12 @@ index 0e86ecead3d..34b076d6b71 100644 + { + old.s = *u.s; + new = old; ++ ++ if (old.s.owners == -1) ERR("Lock %p is owned exclusive!\n", lock); ++ else if (!old.s.owners) ERR("Lock %p is not owned shared!\n", lock); - srwlock_leave_shared( lock, srwlock_lock_exclusive( (unsigned int *)&lock->Ptr, - - SRWLOCK_RES_SHARED ) - SRWLOCK_RES_SHARED ); -+ if (old.s.owners == -1) ERR("Lock %p is owned exclusive!\n", lock); -+ else if (!old.s.owners) ERR("Lock %p is not owned shared!\n", lock); -+ + --new.s.owners; + } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l); + @@ -331,7 +329,9 @@ index 0e86ecead3d..34b076d6b71 100644 + { + old.s = *u.s; + new.s = old.s; -+ + +- return InterlockedCompareExchange( (int *)&lock->Ptr, SRWLOCK_MASK_IN_EXCLUSIVE | +- SRWLOCK_RES_EXCLUSIVE, 0 ) == 0; + if (!old.s.owners) + { + /* Not locked exclusive or shared. We can try to grab it. */ @@ -343,9 +343,7 @@ index 0e86ecead3d..34b076d6b71 100644 + ret = FALSE; + } + } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l); - -- return InterlockedCompareExchange( (int *)&lock->Ptr, SRWLOCK_MASK_IN_EXCLUSIVE | -- SRWLOCK_RES_EXCLUSIVE, 0 ) == 0; ++ + return ret; } @@ -393,10 +391,10 @@ index 0e86ecead3d..34b076d6b71 100644 /*********************************************************************** diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c -index ad242b91800..11b94972c3d 100644 +index 2269a9f62c9..d8f1a00ade7 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c -@@ -1513,12 +1513,6 @@ static struct unix_funcs unix_funcs = +@@ -1582,12 +1582,6 @@ static struct unix_funcs unix_funcs = #endif DbgUiIssueRemoteBreakin, RtlGetSystemTimePrecise, @@ -410,7 +408,7 @@ index ad242b91800..11b94972c3d 100644 ntdll_ceil, ntdll_cos, diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c -index 07e7939fc59..97781a3f0ae 100644 +index ca4b5b22f53..4e4345098ca 100644 --- a/dlls/ntdll/unix/sync.c +++ b/dlls/ntdll/unix/sync.c @@ -114,8 +114,6 @@ static inline ULONGLONG monotonic_counter(void) @@ -456,7 +454,7 @@ index 07e7939fc59..97781a3f0ae 100644 #endif -@@ -2233,290 +2211,3 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG +@@ -2393,290 +2371,3 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG return NtWaitForSingleObject( ntdll_get_thread_data()->tid_alert_event, FALSE, timeout ); #endif } @@ -748,10 +746,10 @@ index 07e7939fc59..97781a3f0ae 100644 - -#endif diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h -index d82b8c90e84..1cf917ab89d 100644 +index 0da243799f1..c1ddb47a611 100644 --- a/dlls/ntdll/unix/unix_private.h +++ b/dlls/ntdll/unix/unix_private.h -@@ -93,12 +93,6 @@ extern void (WINAPI *pKiUserApcDispatcher)(CONTEXT*,ULONG_PTR,ULONG_PTR,ULON +@@ -97,12 +97,6 @@ extern void (WINAPI *pKiUserApcDispatcher)(CONTEXT*,ULONG_PTR,ULONG_PTR,ULON extern NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*) DECLSPEC_HIDDEN; extern void (WINAPI *pLdrInitializeThunk)(CONTEXT*,void**,ULONG_PTR,ULONG_PTR) DECLSPEC_HIDDEN; extern void (WINAPI *pRtlUserThreadStart)( PRTL_THREAD_START_ROUTINE entry, void *arg ) DECLSPEC_HIDDEN; @@ -765,15 +763,15 @@ index d82b8c90e84..1cf917ab89d 100644 extern NTSTATUS CDECL get_initial_environment( WCHAR **wargv[], WCHAR *env, SIZE_T *size ) DECLSPEC_HIDDEN; diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h -index 0d056ef2b80..4c2693b3f6c 100644 +index bd74bf8267a..534d22483e7 100644 --- a/dlls/ntdll/unixlib.h +++ b/dlls/ntdll/unixlib.h @@ -27,7 +27,7 @@ struct _DISPATCHER_CONTEXT; /* increment this when you change the function table */ --#define NTDLL_UNIXLIB_VERSION 110 -+#define NTDLL_UNIXLIB_VERSION 111 +-#define NTDLL_UNIXLIB_VERSION 111 ++#define NTDLL_UNIXLIB_VERSION 112 struct unix_funcs { @@ -793,5 +791,5 @@ index 0d056ef2b80..4c2693b3f6c 100644 double (CDECL *atan)( double d ); double (CDECL *ceil)( double d ); -- -2.29.2 +2.20.1 diff --git a/patches/ntdll-NtDevicePath/0001-ntdll-Implement-opening-files-through-nt-device-path.patch b/patches/ntdll-NtDevicePath/0001-ntdll-Implement-opening-files-through-nt-device-path.patch index ad814a42..94b492ab 100644 --- a/patches/ntdll-NtDevicePath/0001-ntdll-Implement-opening-files-through-nt-device-path.patch +++ b/patches/ntdll-NtDevicePath/0001-ntdll-Implement-opening-files-through-nt-device-path.patch @@ -1,15 +1,15 @@ -From ee7a43bf36722acba4c870409fc15ea5bdf4a80b Mon Sep 17 00:00:00 2001 +From 6147ac6f68fe96fd53d52b11e16dafbec37b128d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Fri, 26 May 2017 05:17:17 +0200 Subject: [PATCH] ntdll: Implement opening files through nt device paths. --- dlls/ntdll/tests/file.c | 25 +++++++- - dlls/ntdll/unix/file.c | 122 +++++++++++++++++++++++++++++++++++++++- - 2 files changed, 145 insertions(+), 2 deletions(-) + dlls/ntdll/unix/file.c | 124 +++++++++++++++++++++++++++++++++++++++- + 2 files changed, 146 insertions(+), 3 deletions(-) diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index 6164b0c4bde..6610edbd042 100644 +index 839046a7488..8756c18c9e8 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c @@ -135,18 +135,22 @@ static void WINAPI apc( void *arg, IO_STATUS_BLOCK *iosb, ULONG reserved ) @@ -36,7 +36,7 @@ index 6164b0c4bde..6610edbd042 100644 OBJECT_ATTRIBUTES attr; IO_STATUS_BLOCK io; UNICODE_STRING nameW; -@@ -327,6 +331,25 @@ static void create_file_test(void) +@@ -326,6 +330,25 @@ static void create_file_test(void) status = pNtQueryFullAttributesFile( &attr, &info ); ok( status == STATUS_OBJECT_NAME_INVALID, "query %s failed %x\n", wine_dbgstr_w(nameW.Buffer), status ); @@ -63,19 +63,21 @@ index 6164b0c4bde..6610edbd042 100644 static void open_file_test(void) diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c -index b6529241739..74f3f707444 100644 +index 5ab24e2c334..5ad856dbebf 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c -@@ -3250,7 +3250,7 @@ static NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, char * +@@ -3282,8 +3282,8 @@ static NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, char * * element doesn't have to exist; in that case STATUS_NO_SUCH_FILE is * returned, but the unix name is still filled in properly. */ --NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret, UINT disposition ) -+static NTSTATUS nt_to_unix_file_name_internal( const UNICODE_STRING *nameW, char **unix_name_ret, UINT disposition ) +-NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret, +- UNICODE_STRING *nt_name, UINT disposition ) ++static NTSTATUS nt_to_unix_file_name_internal( const UNICODE_STRING *nameW, char **unix_name_ret, ++ UNICODE_STRING *nt_name, UINT disposition ) { static const WCHAR unixW[] = {'u','n','i','x'}; static const WCHAR pipeW[] = {'p','i','p','e'}; -@@ -3387,6 +3387,126 @@ NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, char *nam +@@ -3421,6 +3421,126 @@ NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, char *nam return status; } @@ -154,7 +156,7 @@ index b6529241739..74f3f707444 100644 + * returned, but the unix name is still filled in properly. + */ +NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret, -+ UINT disposition ) ++ UNICODE_STRING *nt_name, UINT disposition ) +{ + static const WCHAR systemrootW[] = {'\\','S','y','s','t','e','m','R','o','o','t','\\',0}; + static const WCHAR dosprefixW[] = {'\\','?','?','\\'}; @@ -177,7 +179,7 @@ index b6529241739..74f3f707444 100644 + prefix = user_shared_data->NtSystemRoot; + } + else -+ return nt_to_unix_file_name_internal( nameW, unix_name_ret, disposition ); ++ return nt_to_unix_file_name_internal( nameW, unix_name_ret, nt_name, disposition ); + + name_len = sizeof(dosprefixW) + wcslen(prefix) * sizeof(WCHAR) + + nameW->Length - offset * sizeof(WCHAR) + sizeof(WCHAR); @@ -194,7 +196,7 @@ index b6529241739..74f3f707444 100644 + + dospathW.Buffer = name; + dospathW.Length = wcslen( name ) * sizeof(WCHAR); -+ status = nt_to_unix_file_name_internal( &dospathW, unix_name_ret, disposition ); ++ status = nt_to_unix_file_name_internal( &dospathW, unix_name_ret, nt_name, disposition ); + + free( name ); + return status; @@ -203,5 +205,5 @@ index b6529241739..74f3f707444 100644 /****************************************************************** * unix_to_nt_file_name -- -2.27.0 +2.20.1 diff --git a/patches/ntdll-NtQueryVirtualMemory/0003-ntdll-Implement-NtQueryVirtualMemory-MemorySectionNa.patch b/patches/ntdll-NtQueryVirtualMemory/0003-ntdll-Implement-NtQueryVirtualMemory-MemorySectionNa.patch deleted file mode 100644 index 48414af0..00000000 --- a/patches/ntdll-NtQueryVirtualMemory/0003-ntdll-Implement-NtQueryVirtualMemory-MemorySectionNa.patch +++ /dev/null @@ -1,273 +0,0 @@ -From d945688dd6b41731ea1ea515556e78d8de73979f Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Sun, 28 May 2017 05:19:30 +0200 -Subject: [PATCH] ntdll: Implement NtQueryVirtualMemory(MemorySectionName). - (v3) - -Contains several improvements by Sebastian Lackner . ---- - dlls/ntdll/unix/file.c | 2 +- - dlls/ntdll/unix/process.c | 2 +- - dlls/ntdll/unix/unix_private.h | 2 + - dlls/ntdll/unix/virtual.c | 101 ++++++++++++++++++++++++++++++++- - dlls/psapi/tests/psapi_main.c | 8 +-- - server/mapping.c | 29 ++++++++++ - server/protocol.def | 9 +++ - 7 files changed, 143 insertions(+), 10 deletions(-) - -diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c -index 6a47422ac7f..82f314691c0 100644 ---- a/dlls/ntdll/unix/file.c -+++ b/dlls/ntdll/unix/file.c -@@ -2014,7 +2014,7 @@ static NTSTATUS fill_file_info( const struct stat *st, ULONG attr, void *ptr, - } - - --static NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name, BOOL nofollow ) -+NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name, BOOL nofollow ) - { - data_size_t size = 1024; - NTSTATUS ret; -diff --git a/dlls/ntdll/unix/process.c b/dlls/ntdll/unix/process.c -index a094c607da4..90617594411 100644 ---- a/dlls/ntdll/unix/process.c -+++ b/dlls/ntdll/unix/process.c -@@ -478,7 +478,7 @@ static ULONG get_env_size( const RTL_USER_PROCESS_PARAMETERS *params, char **win - * - * Simplified version of RtlDosPathNameToNtPathName_U. - */ --static WCHAR *get_nt_pathname( const UNICODE_STRING *str ) -+WCHAR *get_nt_pathname( const UNICODE_STRING *str ) - { - static const WCHAR ntprefixW[] = {'\\','?','?','\\',0}; - static const WCHAR uncprefixW[] = {'U','N','C','\\',0}; -diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h -index 6b7b8a4ce7c..3371a2ffaf0 100644 ---- a/dlls/ntdll/unix/unix_private.h -+++ b/dlls/ntdll/unix/unix_private.h -@@ -108,6 +108,7 @@ extern void CDECL get_initial_directory( UNICODE_STRING *dir ) DECLSPEC_HIDDEN; - extern void CDECL get_initial_console( RTL_USER_PROCESS_PARAMETERS *params ) DECLSPEC_HIDDEN; - extern USHORT * CDECL get_unix_codepage_data(void) DECLSPEC_HIDDEN; - extern void CDECL get_locales( WCHAR *sys, WCHAR *user ) DECLSPEC_HIDDEN; -+extern WCHAR *get_nt_pathname( const UNICODE_STRING *str ) DECLSPEC_HIDDEN; - extern void CDECL virtual_release_address_space(void) DECLSPEC_HIDDEN; - - extern NTSTATUS CDECL unwind_builtin_dll( ULONG type, struct _DISPATCHER_CONTEXT *dispatch, -@@ -161,6 +162,7 @@ extern unsigned int server_queue_process_apc( HANDLE process, const apc_call_t * - apc_result_t *result ) DECLSPEC_HIDDEN; - extern int server_get_unix_fd( HANDLE handle, unsigned int wanted_access, int *unix_fd, - int *needs_close, enum server_fd_type *type, unsigned int *options ) DECLSPEC_HIDDEN; -+extern NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name, BOOL nofollow ) DECLSPEC_HIDDEN; - extern size_t server_init_process(void) DECLSPEC_HIDDEN; - extern void server_init_process_done(void) DECLSPEC_HIDDEN; - extern void server_init_thread( void *entry_point, BOOL *suspend ) DECLSPEC_HIDDEN; -diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c -index a136390c994..457bd45e516 100644 ---- a/dlls/ntdll/unix/virtual.c -+++ b/dlls/ntdll/unix/virtual.c -@@ -4042,6 +4042,103 @@ static NTSTATUS get_working_set_ex( HANDLE process, LPCVOID addr, - return STATUS_SUCCESS; - } - -+/* get file name for mapped section */ -+static NTSTATUS get_section_name( HANDLE process, LPCVOID addr, -+ MEMORY_SECTION_NAME *info, -+ SIZE_T len, SIZE_T *res_len ) -+{ -+ UNICODE_STRING nt_name, dos_path_name; -+ WCHAR *nt_nameW; -+ char *unix_name; -+ data_size_t size = 1024; -+ WCHAR *name = NULL; -+ NTSTATUS status; -+ HANDLE mapping; -+ -+ if (!addr || !info || !res_len) return STATUS_INVALID_PARAMETER; -+ -+ SERVER_START_REQ( get_mapping_file ) -+ { -+ req->process = wine_server_obj_handle( process ); -+ req->addr = wine_server_client_ptr( addr ); -+ status = wine_server_call( req ); -+ mapping = wine_server_ptr_handle( reply->handle ); -+ } -+ SERVER_END_REQ; -+ -+ memset( &nt_name, 0, sizeof(nt_name) ); -+ -+ if (!status && mapping) -+ { -+ status = server_get_unix_name( mapping, &unix_name, FALSE ); -+ NtClose( mapping ); -+ if (!status) -+ { -+ status = unix_to_nt_file_name( unix_name, &nt_nameW ); -+ free( unix_name ); -+ } -+ if (!status) -+ { -+ nt_name.Buffer = nt_nameW; -+ goto found; -+ } -+ if (status == STATUS_OBJECT_TYPE_MISMATCH) status = STATUS_FILE_INVALID; -+ return status; -+ } -+ -+ for (;;) -+ { -+ if (!(name = malloc( (size + 1) * sizeof(WCHAR) ))) -+ return STATUS_NO_MEMORY; -+ -+ SERVER_START_REQ( get_dll_info ) -+ { -+ req->handle = wine_server_obj_handle( process ); -+ req->base_address = (ULONG_PTR)addr; -+ wine_server_set_reply( req, name, size * sizeof(WCHAR) ); -+ status = wine_server_call( req ); -+ size = reply->filename_len / sizeof(WCHAR); -+ } -+ SERVER_END_REQ; -+ -+ if (!status) -+ { -+ name[size] = 0; -+ break; -+ } -+ free( name ); -+ if (status == STATUS_DLL_NOT_FOUND) return STATUS_INVALID_ADDRESS; -+ if (status != STATUS_BUFFER_TOO_SMALL) return status; -+ } -+ -+ dos_path_name.Buffer = name; -+ dos_path_name.Length = size * sizeof(WCHAR); -+ -+ if (!(nt_name.Buffer = get_nt_pathname( &dos_path_name ))) -+ { -+ free( name ); -+ return STATUS_INVALID_PARAMETER; -+ } -+found: -+ nt_name.Length = wcslen( nt_name.Buffer ) * sizeof(WCHAR); -+ *res_len = sizeof(MEMORY_SECTION_NAME) + nt_name.Length + sizeof(WCHAR); -+ if (len >= *res_len) -+ { -+ info->SectionFileName.Length = nt_name.Length; -+ info->SectionFileName.MaximumLength = nt_name.Length + sizeof(WCHAR); -+ info->SectionFileName.Buffer = (WCHAR *)(info + 1); -+ memcpy(info->SectionFileName.Buffer, nt_name.Buffer, nt_name.Length); -+ info->SectionFileName.Buffer[ nt_name.Length / sizeof(WCHAR) ] = 0; -+ } -+ else -+ status = (len < sizeof(MEMORY_SECTION_NAME)) ? STATUS_INFO_LENGTH_MISMATCH : STATUS_BUFFER_OVERFLOW; -+ -+ free( name ); -+ free( nt_name.Buffer ); -+ return status; -+} -+ -+ - #define UNIMPLEMENTED_INFO_CLASS(c) \ - case c: \ - FIXME("(process=%p,addr=%p) Unimplemented information class: " #c "\n", process, addr); \ -@@ -4066,8 +4163,10 @@ NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr, - case MemoryWorkingSetExInformation: - return get_working_set_ex( process, addr, buffer, len, res_len ); - -+ case MemorySectionName: -+ return get_section_name( process, addr, buffer, len, res_len ); -+ - UNIMPLEMENTED_INFO_CLASS(MemoryWorkingSetList); -- UNIMPLEMENTED_INFO_CLASS(MemorySectionName); - UNIMPLEMENTED_INFO_CLASS(MemoryBasicVlmInformation); - - default: -diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c -index be12af58311..3e211a771f9 100644 ---- a/dlls/psapi/tests/psapi_main.c -+++ b/dlls/psapi/tests/psapi_main.c -@@ -384,14 +384,7 @@ static BOOL nt_get_mapped_file_name(HANDLE process, LPVOID addr, LPWSTR name, DW - - ret_len = 0xdeadbeef; - status = pNtQueryVirtualMemory(process, addr, MemorySectionName, buf, buf_len, &ret_len); --todo_wine - ok(!status, "NtQueryVirtualMemory error %x\n", status); -- /* FIXME: remove once Wine is fixed */ -- if (status) -- { -- HeapFree(GetProcessHeap(), 0, buf); -- return FALSE; -- } - - section_name = (MEMORY_SECTION_NAME *)buf; - ok(ret_len == section_name->SectionFileName.MaximumLength + sizeof(*section_name), "got %lu, %u\n", -@@ -513,6 +506,7 @@ todo_wine { - { - ok(memcmp(map_nameW, nt_map_name, lstrlenW(map_nameW)) == 0, "map name does not start with a device name: %s\n", map_name); - WideCharToMultiByte(CP_ACP, 0, map_nameW, -1, map_name, MAX_PATH, NULL, NULL); -+todo_wine - ok(memcmp(map_name, device_name, strlen(device_name)) == 0, "map name does not start with a device name: %s\n", map_name); - } - -diff --git a/server/mapping.c b/server/mapping.c -index 9e481646f2f..399d0c76918 100644 ---- a/server/mapping.c -+++ b/server/mapping.c -@@ -1178,6 +1178,35 @@ DECL_HANDLER(unmap_view) - if (view) free_memory_view( view ); - } - -+/* get file handle from mapping by address */ -+DECL_HANDLER(get_mapping_file) -+{ -+ struct memory_view *view; -+ struct process *process; -+ struct file *file; -+ -+ if (!(process = get_process_from_handle( req->process, 0 ))) return; -+ -+ LIST_FOR_EACH_ENTRY( view, &process->views, struct memory_view, entry ) -+ if (req->addr >= view->base && req->addr < view->base + view->size) break; -+ -+ if (&view->entry == &process->views) -+ { -+ set_error( STATUS_NOT_MAPPED_VIEW ); -+ release_object( process ); -+ return; -+ } -+ -+ if (view->fd && (file = create_file_for_fd_obj( view->fd, GENERIC_READ, -+ FILE_SHARE_READ | FILE_SHARE_WRITE ))) -+ { -+ reply->handle = alloc_handle( process, file, GENERIC_READ, 0 ); -+ release_object( file ); -+ } -+ -+ release_object( process ); -+} -+ - /* get a range of committed pages in a file mapping */ - DECL_HANDLER(get_mapping_committed_range) - { -diff --git a/server/protocol.def b/server/protocol.def -index 957ef25f967..4888cb63506 100644 ---- a/server/protocol.def -+++ b/server/protocol.def -@@ -1539,6 +1539,15 @@ enum server_fd_type - @END - - -+/* Get file for a mapping */ -+@REQ(get_mapping_file) -+ obj_handle_t process; /* process handle */ -+ client_ptr_t addr; /* arbitrary address in view */ -+@REPLY -+ obj_handle_t handle; /* handle to file */ -+@END -+ -+ - /* Get a range of committed pages in a file mapping */ - @REQ(get_mapping_committed_range) - client_ptr_t base; /* view base address */ --- -2.29.2 - diff --git a/patches/ntdll-NtQueryVirtualMemory/0004-ntdll-tests-Add-tests-for-NtQueryVirtualMemory-Memor.patch b/patches/ntdll-NtQueryVirtualMemory/0004-ntdll-tests-Add-tests-for-NtQueryVirtualMemory-Memor.patch deleted file mode 100644 index 4dc960a4..00000000 --- a/patches/ntdll-NtQueryVirtualMemory/0004-ntdll-tests-Add-tests-for-NtQueryVirtualMemory-Memor.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 3c24fb315d12b0f5f052cfe5d885947adc5be75c Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Sun, 28 May 2017 10:30:43 +0200 -Subject: [PATCH] ntdll/tests: Add tests for - NtQueryVirtualMemory(MemorySectionName). - ---- - dlls/ntdll/tests/info.c | 30 ++++++++++++++++++++++++++++++ - 1 file changed, 30 insertions(+) - -diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c -index 974db1badf09..ff2d388399da 100644 ---- a/dlls/ntdll/tests/info.c -+++ b/dlls/ntdll/tests/info.c -@@ -2239,6 +2239,8 @@ static void test_queryvirtualmemory(void) - char stackbuf[42]; - HMODULE module; - void *user_shared_data = (void *)0x7ffe0000; -+ char buffer_name[sizeof(MEMORY_SECTION_NAME) + MAX_PATH * sizeof(WCHAR)]; -+ MEMORY_SECTION_NAME *msn = (MEMORY_SECTION_NAME *)buffer_name; - - module = GetModuleHandleA( "ntdll.dll" ); - status = pNtQueryVirtualMemory(NtCurrentProcess(), module, MemoryBasicInformation, &mbi, sizeof(MEMORY_BASIC_INFORMATION), &readcount); -@@ -2321,6 +2323,34 @@ static void test_queryvirtualmemory(void) - /* check error code when len is less than MEMORY_BASIC_INFORMATION size */ - status = pNtQueryVirtualMemory(NtCurrentProcess(), GetProcessHeap(), MemoryBasicInformation, &mbi, sizeof(MEMORY_BASIC_INFORMATION) - 1, &readcount); - ok(status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); -+ -+ module = GetModuleHandleA( "ntdll.dll" ); -+ memset(msn, 0, sizeof(*msn)); -+ readcount = 0; -+ status = pNtQueryVirtualMemory(NtCurrentProcess(), module, MemorySectionName, msn, sizeof(*msn), &readcount); -+ ok( status == STATUS_BUFFER_OVERFLOW, "Expected STATUS_BUFFER_OVERFLOW, got %08x\n", status); -+ ok( readcount > 0, "Expected readcount to be > 0\n"); -+ -+ module = GetModuleHandleA( "ntdll.dll" ); -+ memset(msn, 0, sizeof(*msn)); -+ readcount = 0; -+ status = pNtQueryVirtualMemory(NtCurrentProcess(), module, MemorySectionName, msn, sizeof(*msn) - 1, &readcount); -+ ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); -+ ok( readcount > 0, "Expected readcount to be > 0\n"); -+ -+ module = GetModuleHandleA( "ntdll.dll" ); -+ memset(msn, 0x55, sizeof(*msn)); -+ memset(buffer_name, 0x77, sizeof(buffer_name)); -+ readcount = 0; -+ status = pNtQueryVirtualMemory(NtCurrentProcess(), module, MemorySectionName, msn, sizeof(buffer_name), &readcount); -+ ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); -+ ok( readcount > 0, "Expected readcount to be > 0\n"); -+ -+ memset(msn, 0, sizeof(*msn)); -+ readcount = 0; -+ status = pNtQueryVirtualMemory(NtCurrentProcess(), &buffer_name, MemorySectionName, msn, sizeof(buffer_name), &readcount); -+ ok( status == STATUS_INVALID_ADDRESS, "Expected STATUS_INVALID_ADDRESS, got %08x\n", status); -+ ok( readcount == 0 || broken(readcount != 0) /* wow64 */, "Expected readcount to be 0\n"); - } - - static void test_affinity(void) --- -2.29.2 - diff --git a/patches/ntdll-NtQueryVirtualMemory/0006-ntdll-Allow-to-query-section-names-from-other-proces.patch b/patches/ntdll-NtQueryVirtualMemory/0006-ntdll-Allow-to-query-section-names-from-other-proces.patch deleted file mode 100644 index 8d015dd4..00000000 --- a/patches/ntdll-NtQueryVirtualMemory/0006-ntdll-Allow-to-query-section-names-from-other-proces.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 6c2aad105cc878f2a0c3777a9a72fa63361d1ce8 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Sun, 28 May 2017 05:44:38 +0200 -Subject: [PATCH] ntdll: Allow to query section names from other processes. - (v2) - ---- - dlls/psapi/tests/psapi_main.c | 19 +++++++++++++++++++ - 1 file changed, 19 insertions(+) - -diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c -index 3e211a771f93..40fd08e6adbc 100644 ---- a/dlls/psapi/tests/psapi_main.c -+++ b/dlls/psapi/tests/psapi_main.c -@@ -410,6 +410,10 @@ static void test_GetMappedFileName(void) - char temp_path[MAX_PATH], file_name[MAX_PATH], map_name[MAX_PATH], device_name[MAX_PATH], drive[3]; - WCHAR map_nameW[MAX_PATH], nt_map_name[MAX_PATH]; - HANDLE hfile, hmap; -+ HANDLE current_process; -+ -+ DuplicateHandle( GetCurrentProcess(), GetCurrentProcess(), -+ GetCurrentProcess(), ¤t_process, 0, 0, DUPLICATE_SAME_ACCESS ); - - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(NULL, hMod, szMapPath, sizeof(szMapPath)); -@@ -510,6 +514,20 @@ todo_wine - ok(memcmp(map_name, device_name, strlen(device_name)) == 0, "map name does not start with a device name: %s\n", map_name); - } - -+ SetLastError(0xdeadbeef); -+ ret = GetMappedFileNameW(current_process, base, map_nameW, sizeof(map_nameW)/sizeof(map_nameW[0])); -+todo_wine { -+ ok(ret, "GetMappedFileNameW error %d\n", GetLastError()); -+ ok(ret > strlen(device_name), "map_name should be longer than device_name\n"); -+} -+ if (nt_get_mapped_file_name(current_process, base, nt_map_name, sizeof(nt_map_name)/sizeof(nt_map_name[0]))) -+ { -+ ok(memcmp(map_nameW, nt_map_name, lstrlenW(map_nameW)) == 0, "map name does not start with a device name: %s\n", map_name); -+ WideCharToMultiByte(CP_ACP, 0, map_nameW, -1, map_name, MAX_PATH, NULL, NULL); -+todo_wine -+ ok(memcmp(map_name, device_name, strlen(device_name)) == 0, "map name does not start with a device name: %s\n", map_name); -+ } -+ - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(GetCurrentProcess(), base + 0x2000, map_name, sizeof(map_name)); - todo_wine { -@@ -555,6 +573,7 @@ todo_wine - todo_wine - ok(GetLastError() == ERROR_FILE_INVALID, "expected ERROR_FILE_INVALID, got %d\n", GetLastError()); - -+ CloseHandle(current_process); - UnmapViewOfFile(base); - CloseHandle(hmap); - } --- -2.29.2 - diff --git a/patches/ntdll-NtQueryVirtualMemory/0010-server-Fix-process-access-rights-in-get_mapping_file.patch b/patches/ntdll-NtQueryVirtualMemory/0010-server-Fix-process-access-rights-in-get_mapping_file.patch deleted file mode 100644 index af0b8aa3..00000000 --- a/patches/ntdll-NtQueryVirtualMemory/0010-server-Fix-process-access-rights-in-get_mapping_file.patch +++ /dev/null @@ -1,26 +0,0 @@ -From e2a538dcaee4c59055b877b63d143a93a6e6abdb Mon Sep 17 00:00:00 2001 -From: Paul Gofman -Date: Tue, 15 Dec 2020 00:20:43 +0300 -Subject: [PATCH] server: Fix process access rights in get_mapping_file - handler. - ---- - server/mapping.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/server/mapping.c b/server/mapping.c -index d5f889771e50..3df9fb97a1c5 100644 ---- a/server/mapping.c -+++ b/server/mapping.c -@@ -1146,7 +1146,7 @@ DECL_HANDLER(get_mapping_file) - struct process *process; - struct file *file; - -- if (!(process = get_process_from_handle( req->process, 0 ))) return; -+ if (!(process = get_process_from_handle( req->process, PROCESS_QUERY_INFORMATION ))) return; - - LIST_FOR_EACH_ENTRY( view, &process->views, struct memory_view, entry ) - if (req->addr >= view->base && req->addr < view->base + view->size) break; --- -2.29.2 - diff --git a/patches/ntdll-NtQueryVirtualMemory/definition b/patches/ntdll-NtQueryVirtualMemory/definition index 1d59ce18..d96ba412 100644 --- a/patches/ntdll-NtQueryVirtualMemory/definition +++ b/patches/ntdll-NtQueryVirtualMemory/definition @@ -3,4 +3,5 @@ Fixes: [27248] Implement K32GetMappedFileName Depends: ntdll-NtDevicePath Depends: ntdll-ForceBottomUpAlloc Depends: ntdll-Junction_Points - +# In the process of upstreaming. +Disabled: true diff --git a/patches/ntdll-Pipe_SpecialCharacters/0001-ntdll-Allow-special-characters-in-pipe-names.patch b/patches/ntdll-Pipe_SpecialCharacters/0001-ntdll-Allow-special-characters-in-pipe-names.patch index 192ec010..bb23e5d8 100644 --- a/patches/ntdll-Pipe_SpecialCharacters/0001-ntdll-Allow-special-characters-in-pipe-names.patch +++ b/patches/ntdll-Pipe_SpecialCharacters/0001-ntdll-Allow-special-characters-in-pipe-names.patch @@ -1,4 +1,4 @@ -From 56459884534d5b0acb6a410d2ba04f6f3aa15ded Mon Sep 17 00:00:00 2001 +From 24d4c486c981d7e7542a37b2916cb147f3467c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sun, 27 Jul 2014 03:35:42 +0200 Subject: [PATCH] ntdll: Allow special characters in pipe names. @@ -10,7 +10,7 @@ Based on patch by Valentyn Pavliuchenko. 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c -index 3c7ca06a045..453dcc80b7b 100644 +index 91f6df34f81..8437264ae43 100644 --- a/dlls/kernel32/tests/pipe.c +++ b/dlls/kernel32/tests/pipe.c @@ -30,6 +30,7 @@ @@ -21,7 +21,7 @@ index 3c7ca06a045..453dcc80b7b 100644 #define NB_SERVER_LOOPS 8 -@@ -674,6 +675,15 @@ static void test_CreateNamedPipe(int pipemode) +@@ -673,6 +674,15 @@ static void test_CreateNamedPipe(int pipemode) CloseHandle(hnp); @@ -38,18 +38,18 @@ index 3c7ca06a045..453dcc80b7b 100644 } diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c -index a0ad361fcbb..3c4670e114c 100644 +index 6337433ed80..5ab24e2c334 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c -@@ -3282,6 +3282,7 @@ static NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, char * - NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret, UINT disposition ) +@@ -3286,6 +3286,7 @@ NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret + UNICODE_STRING *nt_name, UINT disposition ) { static const WCHAR unixW[] = {'u','n','i','x'}; + static const WCHAR pipeW[] = {'p','i','p','e'}; static const WCHAR invalid_charsW[] = { INVALID_NT_CHARS, 0 }; NTSTATUS status = STATUS_SUCCESS; -@@ -3292,6 +3293,7 @@ NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret +@@ -3296,6 +3297,7 @@ NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret WCHAR prefix[MAX_DIR_ENTRY_LEN + 1]; BOOLEAN check_case = FALSE; BOOLEAN is_unix = FALSE; @@ -57,7 +57,7 @@ index a0ad361fcbb..3c4670e114c 100644 name = nameW->Buffer; name_len = nameW->Length / sizeof(WCHAR); -@@ -3325,13 +3327,17 @@ NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret +@@ -3329,13 +3331,17 @@ NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret name += prefix_len; name_len -= prefix_len; @@ -80,5 +80,5 @@ index a0ad361fcbb..3c4670e114c 100644 else { -- -2.27.0 +2.20.1 diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 010879ef..b2d97c5f 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "7a9745022b1bfcc235b922be98a8fdc91976c587" + echo "2d6b0b67d91b6433744ec859b10b8ee8eb4a37b3" } # Show version information @@ -142,7 +142,6 @@ patch_enable_all () enable_krnl386_exe16_Invalid_Console_Handles="$1" enable_libs_Unicode_Collation="$1" enable_loader_KeyboardLayouts="$1" - enable_mfplat_streaming_support="$1" enable_mmsystem_dll16_MIDIHDR_Refcount="$1" enable_mountmgr_DosDevices="$1" enable_mscoree_CorValidateImage="$1" @@ -171,7 +170,6 @@ patch_enable_all () enable_ntdll_NtDevicePath="$1" enable_ntdll_NtQueryEaFile="$1" enable_ntdll_NtQuerySection="$1" - enable_ntdll_NtQueryVirtualMemory="$1" enable_ntdll_NtSetLdtEntries="$1" enable_ntdll_Pipe_SpecialCharacters="$1" enable_ntdll_ProcessQuotaLimits="$1" @@ -208,13 +206,11 @@ patch_enable_all () enable_riched20_IText_Interface="$1" enable_server_FileEndOfFileInformation="$1" enable_server_File_Permissions="$1" - enable_server_Inherited_ACLs="$1" enable_server_Key_State="$1" enable_server_PeekMessage="$1" enable_server_Realtime_Priority="$1" enable_server_Signal_Thread="$1" enable_server_Stored_ACLs="$1" - enable_server_unix_name="$1" enable_setupapi_DiskSpaceList="$1" enable_setupapi_SPFILENOTIFY_FILEINCABINET="$1" enable_shdocvw_ParseURLFromOutsideSource_Tests="$1" @@ -260,11 +256,6 @@ patch_enable_all () enable_uxtheme_CloseThemeClass="$1" enable_version_VerQueryValue="$1" enable_widl_SLTG_Typelib_Support="$1" - enable_widl_winrt_support="$1" - enable_windows_gaming_input_dll="$1" - enable_windows_globalization_dll="$1" - enable_windows_media_speech_dll="$1" - enable_windows_networking_connectivity_dll="$1" enable_windowscodecs_GIF_Encoder="$1" enable_windowscodecs_TIFF_Support="$1" enable_wine_inf_Directory_ContextMenuHandlers="$1" @@ -507,9 +498,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" ;; @@ -594,9 +582,6 @@ patch_enable () ntdll-NtQuerySection) enable_ntdll_NtQuerySection="$2" ;; - ntdll-NtQueryVirtualMemory) - enable_ntdll_NtQueryVirtualMemory="$2" - ;; ntdll-NtSetLdtEntries) enable_ntdll_NtSetLdtEntries="$2" ;; @@ -705,9 +690,6 @@ patch_enable () server-File_Permissions) enable_server_File_Permissions="$2" ;; - server-Inherited_ACLs) - enable_server_Inherited_ACLs="$2" - ;; server-Key_State) enable_server_Key_State="$2" ;; @@ -723,9 +705,6 @@ patch_enable () server-Stored_ACLs) enable_server_Stored_ACLs="$2" ;; - server-unix_name) - enable_server_unix_name="$2" - ;; setupapi-DiskSpaceList) enable_setupapi_DiskSpaceList="$2" ;; @@ -861,21 +840,6 @@ patch_enable () widl-SLTG_Typelib_Support) enable_widl_SLTG_Typelib_Support="$2" ;; - widl-winrt-support) - enable_widl_winrt_support="$2" - ;; - windows.gaming.input-dll) - enable_windows_gaming_input_dll="$2" - ;; - windows.globalization-dll) - enable_windows_globalization_dll="$2" - ;; - windows.media.speech.dll) - enable_windows_media_speech_dll="$2" - ;; - windows.networking.connectivity.dll) - enable_windows_networking_connectivity_dll="$2" - ;; windowscodecs-GIF_Encoder) enable_windowscodecs_GIF_Encoder="$2" ;; @@ -1416,34 +1380,6 @@ if test "$enable_wineboot_ProxySettings" -eq 1; then enable_wineboot_drivers_etc_Stubs=1 fi -if test "$enable_windows_networking_connectivity_dll" -eq 1; then - if test "$enable_windows_globalization_dll" -gt 1; then - abort "Patchset windows.globalization-dll disabled, but windows.networking.connectivity.dll depends on that." - fi - enable_windows_globalization_dll=1 -fi - -if test "$enable_windows_globalization_dll" -eq 1; then - if test "$enable_windows_gaming_input_dll" -gt 1; then - abort "Patchset windows.gaming.input-dll disabled, but windows.globalization-dll depends on that." - fi - enable_windows_gaming_input_dll=1 -fi - -if test "$enable_windows_gaming_input_dll" -eq 1; then - if test "$enable_windows_media_speech_dll" -gt 1; then - abort "Patchset windows.media.speech.dll disabled, but windows.gaming.input-dll depends on that." - fi - enable_windows_media_speech_dll=1 -fi - -if test "$enable_windows_media_speech_dll" -eq 1; then - if test "$enable_widl_winrt_support" -gt 1; then - abort "Patchset widl-winrt-support disabled, but windows.media.speech.dll depends on that." - fi - enable_widl_winrt_support=1 -fi - if test "$enable_user32_window_activation" -eq 1; then if test "$enable_user32_recursive_activation" -gt 1; then abort "Patchset user32-recursive-activation disabled, but user32-window-activation depends on that." @@ -1497,13 +1433,6 @@ if test "$enable_shell32_Progress_Dialog" -eq 1; then enable_shell32_SHFileOperation_Move=1 fi -if test "$enable_server_Inherited_ACLs" -eq 1; then - if test "$enable_server_Stored_ACLs" -gt 1; then - abort "Patchset server-Stored_ACLs disabled, but server-Inherited_ACLs depends on that." - fi - enable_server_Stored_ACLs=1 -fi - if test "$enable_server_Stored_ACLs" -eq 1; then if test "$enable_ntdll_DOS_Attributes" -gt 1; then abort "Patchset ntdll-DOS_Attributes disabled, but server-Stored_ACLs depends on that." @@ -1543,21 +1472,6 @@ if test "$enable_nvcuvid_CUDA_Video_Support" -eq 1; then enable_nvapi_Stub_DLL=1 fi -if test "$enable_ntdll_NtQueryVirtualMemory" -eq 1; then - if test "$enable_ntdll_ForceBottomUpAlloc" -gt 1; then - abort "Patchset ntdll-ForceBottomUpAlloc disabled, but ntdll-NtQueryVirtualMemory depends on that." - fi - if test "$enable_ntdll_Junction_Points" -gt 1; then - abort "Patchset ntdll-Junction_Points disabled, but ntdll-NtQueryVirtualMemory depends on that." - fi - if test "$enable_ntdll_NtDevicePath" -gt 1; then - abort "Patchset ntdll-NtDevicePath disabled, but ntdll-NtQueryVirtualMemory depends on that." - fi - enable_ntdll_ForceBottomUpAlloc=1 - enable_ntdll_Junction_Points=1 - enable_ntdll_NtDevicePath=1 -fi - if test "$enable_ntdll_NtDevicePath" -eq 1; then if test "$enable_ntdll_Pipe_SpecialCharacters" -gt 1; then abort "Patchset ntdll-Pipe_SpecialCharacters disabled, but ntdll-NtDevicePath depends on that." @@ -2871,70 +2785,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] Multiple applications need a Media Foundation media source implementation -# | -# | Modified files: -# | * dlls/mf/Makefile.in, dlls/mf/handler.c, dlls/mf/handler.h, dlls/mf/main.c, dlls/mf/session.c, dlls/mf/tests/mf.c, -# | dlls/mfreadwrite/reader.c, 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/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/0003-winegstreamer-Implement-Process-Input-Output-for-aud.patch - patch_apply mfplat-streaming-support/0004-winegstreamer-Implement-Get-Input-Output-StreamInfo-.patch - patch_apply mfplat-streaming-support/0005-winegstreamer-Implement-Get-Attributes-functions-for.patch - patch_apply mfplat-streaming-support/0007-winegstreamer-Introduce-color-conversion-transform.patch - patch_apply mfplat-streaming-support/0008-winegstreamer-Register-the-color-conversion-transfor.patch - patch_apply mfplat-streaming-support/0009-winegstreamer-Implement-GetInputAvailableType-for-co.patch - patch_apply mfplat-streaming-support/0010-winegstreamer-Implement-SetInputType-for-color-conve.patch - patch_apply mfplat-streaming-support/0011-winegstreamer-Implement-GetOutputAvailableType-for-c.patch - patch_apply mfplat-streaming-support/0012-winegstreamer-Implement-SetOutputType-for-color-conv.patch - patch_apply mfplat-streaming-support/0013-winegstreamer-Implement-Process-Input-Output-for-col.patch - patch_apply mfplat-streaming-support/0014-winegstreamer-Implement-ProcessMessage-for-color-con.patch - patch_apply mfplat-streaming-support/0015-winegstreamer-Implement-Get-Input-Output-StreamInfo-.patch - patch_apply mfplat-streaming-support/0016-winegstreamer-Implement-Get-Attributes-functions-for.patch - patch_apply mfplat-streaming-support/0017-winegstreamer-Implement-Get-Input-Output-CurrentType.patch - patch_apply mfplat-streaming-support/0018-winegstreamer-Implement-IMFMediaSource-Stop.patch - patch_apply mfplat-streaming-support/0019-winegstreamer-Set-MF_MT_ALL_SAMPLES_INDEPENDENT-attr.patch - patch_apply mfplat-streaming-support/0020-mf-Add-invalid-connect-method-test.patch - patch_apply mfplat-streaming-support/0021-Allow-for-compressed-types.patch - patch_apply mfplat-streaming-support/0022-mf-session-Unconditionally-deliver-NULL-EOS-samples.patch - patch_apply mfplat-streaming-support/0023-mf-session-Request-more-samples-when-a-transform-nee.patch - patch_apply mfplat-streaming-support/0024-HACK-Flush-decoder-when-changing-times.patch - patch_apply mfplat-streaming-support/0025-winegstreamer-Add-IMFSeekInfo-GetNearestKeyFrames-st.patch - patch_apply mfplat-streaming-support/0026-winegstreamer-Fixup-raw-audio-caps-to-be-compatible-.patch - patch_apply mfplat-streaming-support/0027-winegstreamer-Set-MF_PD_MIME_TYPE-on-source-s-presen.patch - patch_apply mfplat-streaming-support/0028-winegstreamer-Insert-parser-into-pipeline-to-rectify.patch - patch_apply mfplat-streaming-support/0029-winegstreamer-Translate-H.264-caps-to-attributes.patch - patch_apply mfplat-streaming-support/0030-winegstreamer-Translate-WMV-caps-to-attributes.patch - patch_apply mfplat-streaming-support/0031-winegstreamer-Translate-AAC-caps-to-attributes.patch - patch_apply mfplat-streaming-support/0032-winegstreamer-Translate-MPEG-4-Section-2-caps-to-att.patch - patch_apply mfplat-streaming-support/0033-winegstreamer-Translate-WMA-caps-to-attributes.patch - patch_apply mfplat-streaming-support/0034-winegstreamer-Translate-H.264-attributes-to-caps.patch - patch_apply mfplat-streaming-support/0035-winegstreamer-Translate-WMV-attributes-to-caps.patch - patch_apply mfplat-streaming-support/0036-winegstreamer-Translate-AAC-attributes-to-caps.patch - patch_apply mfplat-streaming-support/0037-winegstreamer-Translate-MPEG-4-Section-2-attributes-.patch - patch_apply mfplat-streaming-support/0038-winegstreamer-Translate-WMA-attributes-to-caps.patch - patch_apply mfplat-streaming-support/0039-tools-Add-support-for-multiple-parent-directories.patch - patch_apply mfplat-streaming-support/0040-mf-Introduce-handler-helper.patch - patch_apply mfplat-streaming-support/0041-winegstreamer-Implement-decoder-MFT-on-gstreamer.patch - patch_apply mfplat-streaming-support/0042-mfreadwrite-Select-all-streams-when-creating-a-sourc.patch - patch_apply mfplat-streaming-support/0043-Miscellaneous.patch - patch_apply mfplat-streaming-support/0044-WMV.patch - patch_apply mfplat-streaming-support/0045-Expose-PCM-output-type-on-AAC-decoder.patch - patch_apply mfplat-streaming-support/0048-Report-streams-backwards-and-only-select-one-of-each.patch - patch_apply mfplat-streaming-support/0049-winegstreamer-Introduce-MPEG-4-Section-2-video-decod.patch - patch_apply mfplat-streaming-support/0050-winegstreamer-Introduce-WMA-audio-decoder.patch - patch_apply mfplat-streaming-support/0051-winegstreamer-Implement-MF_SD_LANGUAGE.patch - patch_apply mfplat-streaming-support/0052-winegstreamer-Force-audio-mpeg-to-decode-in-source.patch - patch_apply mfplat-streaming-support/0060-winegstreamer-Support-eAVEncH264VProfile_Constrained.patch -fi - # Patchset mmsystem.dll16-MIDIHDR_Refcount # | # | This patchset fixes the following Wine bugs: @@ -3270,32 +3120,6 @@ if test "$enable_ntdll_NtQuerySection" -eq 1; then patch_apply ntdll-NtQuerySection/0002-kernel32-tests-Add-tests-for-NtQuerySection.patch fi -# Patchset ntdll-NtQueryVirtualMemory -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * ntdll-ForceBottomUpAlloc, ntdll-DOS_Attributes, ntdll-NtQueryEaFile, ntdll-Junction_Points, ntdll- -# | Pipe_SpecialCharacters, ntdll-NtDevicePath -# | -# | This patchset fixes the following Wine bugs: -# | * [#23999] Implement MemorySectionName class in NtQueryVirtualMemory -# | * [#27248] Implement K32GetMappedFileName -# | -# | Modified files: -# | * dlls/kernelbase/debug.c, dlls/ntdll/tests/info.c, dlls/ntdll/unix/file.c, dlls/ntdll/unix/process.c, -# | dlls/ntdll/unix/unix_private.h, dlls/ntdll/unix/virtual.c, dlls/psapi/tests/psapi_main.c, server/mapping.c, -# | server/protocol.def -# | -if test "$enable_ntdll_NtQueryVirtualMemory" -eq 1; then - patch_apply ntdll-NtQueryVirtualMemory/0003-ntdll-Implement-NtQueryVirtualMemory-MemorySectionNa.patch - patch_apply ntdll-NtQueryVirtualMemory/0004-ntdll-tests-Add-tests-for-NtQueryVirtualMemory-Memor.patch - patch_apply ntdll-NtQueryVirtualMemory/0005-ntdll-tests-Add-test-to-ensure-section-name-is-full-.patch - patch_apply ntdll-NtQueryVirtualMemory/0006-ntdll-Allow-to-query-section-names-from-other-proces.patch - patch_apply ntdll-NtQueryVirtualMemory/0007-kernel32-Implement-K32GetMappedFileName.-v2.patch - patch_apply ntdll-NtQueryVirtualMemory/0008-ntdll-Resolve-drive-symlinks-before-returning-sectio.patch - patch_apply ntdll-NtQueryVirtualMemory/0009-ntdll-Fixup-builtin-dll-names-in-get_section_name.patch - patch_apply ntdll-NtQueryVirtualMemory/0010-server-Fix-process-access-rights-in-get_mapping_file.patch -fi - # Patchset ntdll-NtSetLdtEntries # | # | Modified files: @@ -3672,6 +3496,20 @@ if test "$enable_server_File_Permissions" -eq 1; then patch_apply server-File_Permissions/0008-server-Improve-mapping-of-DACL-to-file-permissions.patch fi +# Patchset server-Key_State +# | +# | This patchset fixes the following Wine bugs: +# | * [#31899] Implement locking and synchronization of key states +# | * [#35907] Fix caps lock state issues with multiple processes +# | +# | Modified files: +# | * server/queue.c +# | +if test "$enable_server_Key_State" -eq 1; then + patch_apply server-Key_State/0001-server-Introduce-a-helper-function-to-update-the-thr.patch + patch_apply server-Key_State/0002-server-Implement-locking-and-synchronization-of-keys.patch +fi + # Patchset server-Stored_ACLs # | # | This patchset has the following (direct or indirect) dependencies: @@ -3693,44 +3531,6 @@ if test "$enable_server_Stored_ACLs" -eq 1; then patch_apply server-Stored_ACLs/0007-server-Retrieve-file-security-attributes-with-extend.patch fi -# Patchset server-Inherited_ACLs -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * ntdll-DOS_Attributes, ntdll-NtQueryEaFile, ntdll-Junction_Points, server-File_Permissions, server-Stored_ACLs -# | -# | Modified files: -# | * dlls/advapi32/tests/security.c, server/file.c -# | -if test "$enable_server_Inherited_ACLs" -eq 1; then - patch_apply server-Inherited_ACLs/0001-server-Inherit-security-attributes-from-parent-direc.patch -fi - -# Patchset server-Key_State -# | -# | This patchset fixes the following Wine bugs: -# | * [#31899] Implement locking and synchronization of key states -# | * [#35907] Fix caps lock state issues with multiple processes -# | -# | Modified files: -# | * server/queue.c -# | -if test "$enable_server_Key_State" -eq 1; then - patch_apply server-Key_State/0001-server-Introduce-a-helper-function-to-update-the-thr.patch - patch_apply server-Key_State/0002-server-Implement-locking-and-synchronization-of-keys.patch -fi - -# Patchset server-unix_name -# | -# | This patchset fixes the following Wine bugs: -# | * [#46070] Basemark Web 3.0 Desktop Launcher crashes -# | -# | Modified files: -# | * server/fd.c, server/file.c, server/file.h -# | -if test "$enable_server_unix_name" -eq 1; then - patch_apply server-unix_name/0001-server-Try-to-retrieve-the-unix-name-on-handles-crea.patch -fi - # Patchset setupapi-DiskSpaceList # | # | This patchset fixes the following Wine bugs: @@ -4358,122 +4158,6 @@ if test "$enable_version_VerQueryValue" -eq 1; then patch_apply version-VerQueryValue/0001-version-Test-for-VerQueryValueA-try-2.patch fi -# Patchset widl-winrt-support -# | -# | This patchset fixes the following Wine bugs: -# | * [#49998] widl - Support WinRT idls -# | -# | Modified files: -# | * include/windows.foundation.idl, include/windows.media.speechsynthesis.idl, tools/widl/expr.c, tools/widl/hash.c, -# | tools/widl/hash.h, tools/widl/header.c, tools/widl/parser.l, tools/widl/parser.y, tools/widl/typegen.c, -# | tools/widl/typelib.c, tools/widl/typetree.c, tools/widl/typetree.h, tools/widl/utils.c, tools/widl/utils.h, -# | tools/widl/widltypes.h -# | -if test "$enable_widl_winrt_support" -eq 1; then - patch_apply widl-winrt-support/0012-widl-Support-WinRT-activatable-attribute-parsing.patch - patch_apply widl-winrt-support/0013-widl-Support-WinRT-static-attribute-parsing.patch - patch_apply widl-winrt-support/0014-include-Add-Windows.Media.SpeechSynthesis.SpeechSynt.patch - patch_apply widl-winrt-support/0015-widl-Support-WinRT-requires-keyword.patch - patch_apply widl-winrt-support/0016-widl-Support-WinRT-parameterized-type-parsing.patch - patch_apply widl-winrt-support/0017-widl-Introduce-new-strappend-helper.patch - patch_apply widl-winrt-support/0018-widl-Support-WinRT-parameterized-interface-type.patch - patch_apply widl-winrt-support/0019-widl-Support-WinRT-delegate-type.patch - patch_apply widl-winrt-support/0020-widl-Support-WinRT-parameterized-delegate-type.patch - patch_apply widl-winrt-support/0021-widl-Compute-signatures-for-parameterized-types.patch - patch_apply widl-winrt-support/0022-widl-Compute-uuids-for-parameterized-types.patch - patch_apply widl-winrt-support/0023-widl-Generate-helper-macros-for-WinRT-implementation.patch - patch_apply widl-winrt-support/0024-include-Add-IVectorView-HSTRING-declaration-to-windo.patch - patch_apply widl-winrt-support/0025-widl-Never-use-the-namespace-ABI-prefix-for-global-t.patch - patch_apply widl-winrt-support/0026-widl-Precompute-qualified-type-names-and-use-them-fo.patch - patch_apply widl-winrt-support/0027-widl-Define-the-C-type-name-as-an-alias-for-the-C-qu.patch -fi - -# Patchset windows.media.speech.dll -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * widl-winrt-support -# | -# | This patchset fixes the following Wine bugs: -# | * [#49740] windows.media.speech: New DLL -# | -# | Modified files: -# | * configure.ac, dlls/windows.media.speech.dll/Makefile.in, dlls/windows.media.speech.dll/windows.media.speech.spec, -# | dlls/windows.media.speech.dll/windows.media.speech_main.c, loader/wine.inf.in -# | -if test "$enable_windows_media_speech_dll" -eq 1; then - patch_apply windows.media.speech.dll/0001-windows.media.speech-Add-stub-dll.patch - patch_apply windows.media.speech.dll/0002-windows.media.speech-Implement-IInstalledVoicesStati.patch - patch_apply windows.media.speech.dll/0003-windows.media.speech-Implement-IInstalledVoicesStati.patch - patch_apply windows.media.speech.dll/0004-windows.media.speech-Fake-empty-IInstalledVoicesStat.patch -fi - -# Patchset windows.gaming.input-dll -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * widl-winrt-support, windows.media.speech.dll -# | -# | This patchset fixes the following Wine bugs: -# | * [#49756] windows.gaming.input: New DLL -# | -# | Modified files: -# | * configure.ac, dlls/windows.gaming.input.dll/Makefile.in, dlls/windows.gaming.input.dll/windows.gaming.input.spec, -# | dlls/windows.gaming.input.dll/windows.gaming.input_main.c, include/Makefile.in, include/asyncinfo.idl, -# | include/windows.foundation.idl, include/windows.gaming.input.forcefeedback.idl, include/windows.gaming.input.idl, -# | include/windows.system.idl, loader/wine.inf.in -# | -if test "$enable_windows_gaming_input_dll" -eq 1; then - patch_apply windows.gaming.input-dll/0001-windows.gaming.input-Add-stub-dll.patch - patch_apply windows.gaming.input-dll/0002-windows.gaming.input-Implement-IGamepadStatics-stubs.patch - patch_apply windows.gaming.input-dll/0003-windows.gaming.input-Implement-IGamepadStatics-Gamep.patch - patch_apply windows.gaming.input-dll/0004-windows.gaming.input-Fake-empty-IGamepadStatics-Game.patch - patch_apply windows.gaming.input-dll/0005-windows.gaming.input-Fake-IEventHandler_Gamepad-supp.patch - patch_apply windows.gaming.input-dll/0006-windows.gaming.input-Implement-IRawGameControllerSta.patch - patch_apply windows.gaming.input-dll/0007-windows.gaming.input-Implement-IRawGameControllerSta.patch - patch_apply windows.gaming.input-dll/0008-windows.gaming.input-Fake-empty-IRawGameControllerSt.patch - patch_apply windows.gaming.input-dll/0009-windows.gaming.input-Fake-IEventHandler_RawGameContr.patch -fi - -# Patchset windows.globalization-dll -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * widl-winrt-support, windows.media.speech.dll, windows.gaming.input-dll -# | -# | This patchset fixes the following Wine bugs: -# | * [#49740] windows.globalization: New DLL -# | * [#49998] windows.globalization: New DLL -# | -# | Modified files: -# | * configure.ac, dlls/windows.globalization.dll/Makefile.in, dlls/windows.globalization.dll/windows.globalization.spec, -# | dlls/windows.globalization.dll/windows.globalization_main.c, include/Makefile.in, include/windows.globalization.idl, -# | include/windows.system.userprofile.idl, loader/wine.inf.in -# | -if test "$enable_windows_globalization_dll" -eq 1; then - patch_apply windows.globalization-dll/0001-windows.globalization-Add-stub-dll.patch - patch_apply windows.globalization-dll/0002-windows.globalization-Implement-IGlobalizationPrefer.patch - patch_apply windows.globalization-dll/0003-windows.globalization-Implement-IGlobalizationPrefer.patch - patch_apply windows.globalization-dll/0004-windows.globalization-Implement-IGlobalizationPrefer.patch - patch_apply windows.globalization-dll/0005-windows.globalization-Fake-empty-IGlobalizationPrefe.patch -fi - -# Patchset windows.networking.connectivity.dll -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * widl-winrt-support, windows.media.speech.dll, windows.gaming.input-dll, windows.globalization-dll -# | -# | This patchset fixes the following Wine bugs: -# | * [#46534] windows.networking.connectivity: New DLL -# | -# | Modified files: -# | * configure.ac, dlls/windows.networking.connectivity.dll/Makefile.in, -# | dlls/windows.networking.connectivity.dll/windows.networking.connectivity.spec, -# | dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c, loader/wine.inf.in -# | -if test "$enable_windows_networking_connectivity_dll" -eq 1; then - patch_apply windows.networking.connectivity.dll/0001-windows.networking.connectivity-Add-stub-dll.patch - patch_apply windows.networking.connectivity.dll/0002-windows.networking.connectivity-Implement-IActivatio.patch - patch_apply windows.networking.connectivity.dll/0003-windows.networking.connectivity-Implement-INetworkIn.patch -fi - # Patchset windowscodecs-GIF_Encoder # | # | Modified files: diff --git a/patches/server-Inherited_ACLs/0001-server-Inherit-security-attributes-from-parent-direc.patch b/patches/server-Inherited_ACLs/0001-server-Inherit-security-attributes-from-parent-direc.patch index b8f5c896..b6a49f8f 100644 --- a/patches/server-Inherited_ACLs/0001-server-Inherit-security-attributes-from-parent-direc.patch +++ b/patches/server-Inherited_ACLs/0001-server-Inherit-security-attributes-from-parent-direc.patch @@ -1,4 +1,4 @@ -From 2964ee0ea43ead52e9b34da5f9cc97792c41010b Mon Sep 17 00:00:00 2001 +From 88c10b2fa313a63dcfbe54ba687e89e1ed5c1b02 Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Fri, 18 Apr 2014 14:08:36 -0600 Subject: [PATCH] server: Inherit security attributes from parent directories @@ -10,10 +10,10 @@ Subject: [PATCH] server: Inherit security attributes from parent directories 2 files changed, 142 insertions(+), 4 deletions(-) diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c -index 9b2193f6232..21cd746fd2a 100644 +index d2ce3803bf6..7794e6735f3 100644 --- a/dlls/advapi32/tests/security.c +++ b/dlls/advapi32/tests/security.c -@@ -3661,7 +3661,7 @@ static void test_CreateDirectoryA(void) +@@ -3647,7 +3647,7 @@ static void test_CreateDirectoryA(void) (PSID *)&owner, NULL, &pDacl, NULL, &pSD); ok(error == ERROR_SUCCESS, "Failed to get permissions on file\n"); test_inherited_dacl(pDacl, admin_sid, user_sid, INHERITED_ACE, @@ -22,7 +22,7 @@ index 9b2193f6232..21cd746fd2a 100644 LocalFree(pSD); CloseHandle(hTemp); -@@ -3728,7 +3728,7 @@ static void test_CreateDirectoryA(void) +@@ -3714,7 +3714,7 @@ static void test_CreateDirectoryA(void) (PSID *)&owner, NULL, &pDacl, NULL, &pSD); ok(error == ERROR_SUCCESS, "Failed to get permissions on file\n"); test_inherited_dacl(pDacl, admin_sid, user_sid, INHERITED_ACE, @@ -31,7 +31,7 @@ index 9b2193f6232..21cd746fd2a 100644 LocalFree(pSD); CloseHandle(hTemp); -@@ -3793,7 +3793,7 @@ static void test_CreateDirectoryA(void) +@@ -3779,7 +3779,7 @@ static void test_CreateDirectoryA(void) ok(error == ERROR_SUCCESS, "Failed to get permissions on file\n"); test_inherited_dacl(pDacl, admin_sid, user_sid, OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE | INHERITED_ACE, @@ -40,7 +40,7 @@ index 9b2193f6232..21cd746fd2a 100644 LocalFree(pSD); bret = RemoveDirectoryA(tmpfile); ok(bret == TRUE, "RemoveDirectoryA failed with error %u\n", GetLastError()); -@@ -3873,7 +3873,7 @@ static void test_CreateDirectoryA(void) +@@ -3859,7 +3859,7 @@ static void test_CreateDirectoryA(void) ok(error == ERROR_SUCCESS, "Failed to get permissions on file\n"); test_inherited_dacl(pDacl, admin_sid, user_sid, OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE | INHERITED_ACE, @@ -50,7 +50,7 @@ index 9b2193f6232..21cd746fd2a 100644 CloseHandle(hTemp); diff --git a/server/file.c b/server/file.c -index fce2ab0a5b6..85940727347 100644 +index 3911a2c9baf..cb8cd2bc398 100644 --- a/server/file.c +++ b/server/file.c @@ -105,6 +105,8 @@ struct file @@ -62,7 +62,7 @@ index fce2ab0a5b6..85940727347 100644 static void file_dump( struct object *obj, int verbose ); static struct fd *file_get_fd( struct object *obj ); static struct security_descriptor *file_get_sd( struct object *obj ); -@@ -311,11 +313,142 @@ static void set_xattr_sd( int fd, const struct security_descriptor *sd ) +@@ -311,12 +313,143 @@ static void set_xattr_sd( int fd, const struct security_descriptor *sd ) xattr_fset( fd, WINE_XATTR_SD, buffer, len ); } @@ -197,6 +197,7 @@ index fce2ab0a5b6..85940727347 100644 +} + static struct object *create_file( struct fd *root, const char *nameptr, data_size_t len, + struct unicode_str nt_name, unsigned int access, unsigned int sharing, int create, unsigned int options, unsigned int attrs, const struct security_descriptor *sd ) @@ -205,7 +206,7 @@ index fce2ab0a5b6..85940727347 100644 struct object *obj = NULL; struct fd *fd; int flags; -@@ -344,6 +477,10 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si +@@ -345,6 +478,10 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si default: set_error( STATUS_INVALID_PARAMETER ); goto done; } @@ -216,7 +217,7 @@ index fce2ab0a5b6..85940727347 100644 if (sd) { const SID *owner = sd_get_owner( sd ); -@@ -382,6 +519,7 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si +@@ -383,6 +520,7 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si release_object( fd ); done: diff --git a/patches/server-Inherited_ACLs/definition b/patches/server-Inherited_ACLs/definition index 4dd0f1e9..a69f07cf 100644 --- a/patches/server-Inherited_ACLs/definition +++ b/patches/server-Inherited_ACLs/definition @@ -1,2 +1,4 @@ Depends: server-Stored_ACLs Fixes: Support for inherited file ACLs +#Badly broken by bb00942671. +Disabled: true diff --git a/patches/server-Stored_ACLs/0004-server-Temporarily-store-the-full-security-descripto.patch b/patches/server-Stored_ACLs/0004-server-Temporarily-store-the-full-security-descripto.patch index 22df46e4..1ebe5697 100644 --- a/patches/server-Stored_ACLs/0004-server-Temporarily-store-the-full-security-descripto.patch +++ b/patches/server-Stored_ACLs/0004-server-Temporarily-store-the-full-security-descripto.patch @@ -1,4 +1,4 @@ -From c169fefc2fcc307cce858096028fb98f2f162959 Mon Sep 17 00:00:00 2001 +From c048391956675382e7cd22ad3d28e34ab011c542 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 30 Mar 2015 12:50:21 +0200 Subject: [PATCH] server: Temporarily store the full security descriptor for @@ -12,10 +12,10 @@ Subject: [PATCH] server: Temporarily store the full security descriptor for 4 files changed, 74 insertions(+), 41 deletions(-) diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c -index dc1ca2d3769..4fe854668c5 100644 +index b4b5a1cd02b..4a414d0019a 100644 --- a/dlls/advapi32/tests/security.c +++ b/dlls/advapi32/tests/security.c -@@ -3682,7 +3682,6 @@ static void test_CreateDirectoryA(void) +@@ -3677,7 +3677,6 @@ static void test_CreateDirectoryA(void) ok(error == ERROR_SUCCESS, "GetNamedSecurityInfo failed with error %d\n", error); bret = GetAclInformation(pDacl, &acl_size, sizeof(acl_size), AclSizeInformation); ok(bret, "GetAclInformation failed\n"); @@ -23,7 +23,7 @@ index dc1ca2d3769..4fe854668c5 100644 ok(acl_size.AceCount == 0, "GetAclInformation returned unexpected entry count (%d != 0).\n", acl_size.AceCount); LocalFree(pSD); -@@ -3693,7 +3692,6 @@ static void test_CreateDirectoryA(void) +@@ -3688,7 +3687,6 @@ static void test_CreateDirectoryA(void) ok(error == ERROR_SUCCESS, "GetNamedSecurityInfo failed with error %d\n", error); bret = GetAclInformation(pDacl, &acl_size, sizeof(acl_size), AclSizeInformation); ok(bret, "GetAclInformation failed\n"); @@ -31,7 +31,7 @@ index dc1ca2d3769..4fe854668c5 100644 ok(acl_size.AceCount == 0, "GetAclInformation returned unexpected entry count (%d != 0).\n", acl_size.AceCount); LocalFree(pSD); -@@ -3816,7 +3814,6 @@ static void test_CreateDirectoryA(void) +@@ -3811,7 +3809,6 @@ static void test_CreateDirectoryA(void) ok(error == ERROR_SUCCESS, "GetNamedSecurityInfo failed with error %d\n", error); bret = GetAclInformation(pDacl, &acl_size, sizeof(acl_size), AclSizeInformation); ok(bret, "GetAclInformation failed\n"); @@ -39,7 +39,7 @@ index dc1ca2d3769..4fe854668c5 100644 ok(acl_size.AceCount == 0, "GetAclInformation returned unexpected entry count (%d != 0).\n", acl_size.AceCount); LocalFree(pSD); -@@ -4910,23 +4907,22 @@ static void test_GetSecurityInfo(void) +@@ -4905,23 +4902,22 @@ static void test_GetSecurityInfo(void) bret = GetAce(pDacl, 0, (VOID **)&ace); ok(bret, "Failed to get Current User ACE.\n"); bret = EqualSid(&ace->SidStart, user_sid); @@ -70,10 +70,10 @@ index dc1ca2d3769..4fe854668c5 100644 LocalFree(pSD); CloseHandle(obj); diff --git a/server/change.c b/server/change.c -index 0aa968697ea..85afb0cbdc5 100644 +index 5e085350f3b..909225a03b3 100644 --- a/server/change.c +++ b/server/change.c -@@ -1078,7 +1078,8 @@ static int dir_add_to_existing_notify( struct dir *dir ) +@@ -1069,7 +1069,8 @@ static int dir_add_to_existing_notify( struct dir *dir ) #endif /* HAVE_SYS_INOTIFY_H */ @@ -83,7 +83,7 @@ index 0aa968697ea..85afb0cbdc5 100644 { struct dir *dir; -@@ -1098,6 +1099,11 @@ struct object *create_dir_obj( struct fd *fd, unsigned int access, mode_t mode ) +@@ -1089,6 +1090,11 @@ struct object *create_dir_obj( struct fd *fd, unsigned int access, mode_t mode ) dir->client_process = NULL; set_fd_user( fd, &dir_fd_ops, &dir->obj ); @@ -96,10 +96,10 @@ index 0aa968697ea..85afb0cbdc5 100644 return &dir->obj; diff --git a/server/file.c b/server/file.c -index 225e1297481..2f8c394dd5c 100644 +index ebd6f58939f..32f64282c96 100644 --- a/server/file.c +++ b/server/file.c -@@ -178,7 +178,8 @@ struct file *create_file_for_fd_obj( struct fd *fd, unsigned int access, unsigne +@@ -188,7 +188,8 @@ struct file *create_file_for_fd_obj( struct fd *fd, unsigned int access, unsigne return file; } @@ -109,7 +109,7 @@ index 225e1297481..2f8c394dd5c 100644 { struct file *file = alloc_object( &file_ops ); -@@ -190,6 +191,12 @@ static struct object *create_file_obj( struct fd *fd, unsigned int access, mode_ +@@ -200,6 +201,12 @@ static struct object *create_file_obj( struct fd *fd, unsigned int access, mode_ list_init( &file->kernel_object ); grab_object( fd ); set_fd_user( fd, &file_fd_ops, &file->obj ); @@ -122,7 +122,7 @@ index 225e1297481..2f8c394dd5c 100644 return &file->obj; } -@@ -261,11 +268,11 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si +@@ -272,11 +279,11 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si if (!fd) goto done; if (S_ISDIR(mode)) @@ -136,7 +136,7 @@ index 225e1297481..2f8c394dd5c 100644 release_object( fd ); -@@ -564,46 +571,66 @@ mode_t sd_to_mode( const struct security_descriptor *sd, const SID *owner ) +@@ -553,46 +560,66 @@ mode_t sd_to_mode( const struct security_descriptor *sd, const SID *owner ) int set_file_sd( struct object *obj, struct fd *fd, mode_t *mode, uid_t *uid, const struct security_descriptor *sd, unsigned int set_info ) { @@ -228,8 +228,8 @@ index 225e1297481..2f8c394dd5c 100644 } static struct object *file_lookup_name( struct object *obj, struct unicode_str *name, -@@ -748,7 +775,10 @@ DECL_HANDLER(create_file) - if ((file = create_file( root_fd, name, name_len, req->access, req->sharing, +@@ -732,7 +759,10 @@ DECL_HANDLER(create_file) + if ((file = create_file( root_fd, name, name_len, nt_name, req->access, req->sharing, req->create, req->options, req->attrs, sd ))) { - reply->handle = alloc_handle( current->process, file, req->access, objattr->attributes ); @@ -241,10 +241,10 @@ index 225e1297481..2f8c394dd5c 100644 } if (root_fd) release_object( root_fd ); diff --git a/server/file.h b/server/file.h -index cf2a91f5a86..9139244fa66 100644 +index f43b535c125..e4d99e786c1 100644 --- a/server/file.h +++ b/server/file.h -@@ -196,7 +196,8 @@ extern struct object *create_unix_device( struct object *root, const struct unic +@@ -201,7 +201,8 @@ extern struct object *create_unix_device( struct object *root, const struct unic extern void do_change_notify( int unix_fd ); extern void sigio_callback(void); @@ -255,5 +255,5 @@ index cf2a91f5a86..9139244fa66 100644 /* completion */ -- -2.29.2 +2.20.1 diff --git a/patches/server-Stored_ACLs/0005-server-Store-file-security-attributes-with-extended-.patch b/patches/server-Stored_ACLs/0005-server-Store-file-security-attributes-with-extended-.patch index b87d69dd..c3e5d605 100644 --- a/patches/server-Stored_ACLs/0005-server-Store-file-security-attributes-with-extended-.patch +++ b/patches/server-Stored_ACLs/0005-server-Store-file-security-attributes-with-extended-.patch @@ -1,4 +1,4 @@ -From 6cf91ff22e2b7c07e46a6b3fe5a9ec1185c27c63 Mon Sep 17 00:00:00 2001 +From a586ff9412c92a1497e78eefdb7d90fc5e2a8c04 Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Mon, 30 Mar 2015 13:04:23 +0200 Subject: [PATCH] server: Store file security attributes with extended file @@ -9,7 +9,7 @@ Subject: [PATCH] server: Store file security attributes with extended file 1 file changed, 78 insertions(+) diff --git a/server/file.c b/server/file.c -index d40995fce99..cde04a594a9 100644 +index 32f64282c96..4e601b18251 100644 --- a/server/file.c +++ b/server/file.c @@ -32,6 +32,7 @@ @@ -113,9 +113,9 @@ index d40995fce99..cde04a594a9 100644 +} + static struct object *create_file( struct fd *root, const char *nameptr, data_size_t len, + struct unicode_str nt_name, unsigned int access, unsigned int sharing, int create, - unsigned int options, unsigned int attrs, -@@ -613,6 +688,9 @@ int set_file_sd( struct object *obj, struct fd *fd, mode_t *mode, uid_t *uid, +@@ -614,6 +689,9 @@ int set_file_sd( struct object *obj, struct fd *fd, mode_t *mode, uid_t *uid, *mode = (*mode & S_IFMT) | new_mode; } diff --git a/patches/server-unix_name/definition b/patches/server-unix_name/definition index 3b36d62b..41296f24 100644 --- a/patches/server-unix_name/definition +++ b/patches/server-unix_name/definition @@ -1 +1,3 @@ Fixes: [46070] Basemark Web 3.0 Desktop Launcher crashes +# This is nontrivial to rebase, and upstream is likely to see more churn. +Disabled: true diff --git a/patches/shell32-NewMenu_Interface/0001-shell32-Implement-NewMenu-with-new-folder-item.patch b/patches/shell32-NewMenu_Interface/0001-shell32-Implement-NewMenu-with-new-folder-item.patch index cba59103..cf3a3843 100644 --- a/patches/shell32-NewMenu_Interface/0001-shell32-Implement-NewMenu-with-new-folder-item.patch +++ b/patches/shell32-NewMenu_Interface/0001-shell32-Implement-NewMenu-with-new-folder-item.patch @@ -1,4 +1,4 @@ -From 7ea5a3f6c925a51a19ba51726d82dac1ffd76f55 Mon Sep 17 00:00:00 2001 +From 74edb4f4f73468f132872cc96841894220e2b7a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sun, 16 Aug 2015 17:34:22 +0200 Subject: [PATCH] shell32: Implement NewMenu with new folder item. @@ -21,10 +21,10 @@ Correct header issue when compiling i386 (var_arg) create mode 100644 dlls/shell32/shellnew.c diff --git a/dlls/shell32/Makefile.in b/dlls/shell32/Makefile.in -index 970ecba4f6..25d9ebd541 100644 +index fe49bf09f98..41b2ec2d607 100644 --- a/dlls/shell32/Makefile.in +++ b/dlls/shell32/Makefile.in -@@ -32,6 +32,7 @@ C_SRCS = \ +@@ -31,6 +31,7 @@ C_SRCS = \ shelldispatch.c \ shellitem.c \ shelllink.c \ @@ -33,7 +33,7 @@ index 970ecba4f6..25d9ebd541 100644 shellord.c \ shellpath.c \ diff --git a/dlls/shell32/shell32_classes.idl b/dlls/shell32/shell32_classes.idl -index 6ed497fea5..60de627be3 100644 +index f2c5ed4a766..c9ecb9aa2a2 100644 --- a/dlls/shell32/shell32_classes.idl +++ b/dlls/shell32/shell32_classes.idl @@ -80,6 +80,11 @@ coclass KnownFolderManager { interface IKnownFolderManager; } @@ -49,20 +49,20 @@ index 6ed497fea5..60de627be3 100644 threading(apartment), uuid(00bb2763-6a77-11d0-a535-00c04fd7d062) diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h -index d1b0e01cf1..fd5d207f37 100644 +index da50e19de46..23cf30acfa9 100644 --- a/dlls/shell32/shell32_main.h +++ b/dlls/shell32/shell32_main.h -@@ -105,6 +105,7 @@ HRESULT WINAPI RecycleBin_Constructor(IUnknown * pUnkOuter, REFIID riif, LPVOID +@@ -103,6 +103,7 @@ HRESULT WINAPI RecycleBin_Constructor(IUnknown * pUnkOuter, REFIID riif, LPVOID HRESULT WINAPI QueryAssociations_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppOutput) DECLSPEC_HIDDEN; HRESULT WINAPI ExplorerBrowser_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; HRESULT WINAPI KnownFolderManager_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; +HRESULT WINAPI NewMenu_Constructor(IUnknown *outer, REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; + HRESULT WINAPI IFileOperation_Constructor(IUnknown *outer, REFIID riid, void **out) DECLSPEC_HIDDEN; extern HRESULT CPanel_GetIconLocationW(LPCITEMIDLIST, LPWSTR, UINT, int*) DECLSPEC_HIDDEN; HRESULT WINAPI CPanel_ExtractIconA(LPITEMIDLIST pidl, LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize) DECLSPEC_HIDDEN; - HRESULT WINAPI CPanel_ExtractIconW(LPITEMIDLIST pidl, LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize) DECLSPEC_HIDDEN; diff --git a/dlls/shell32/shellnew.c b/dlls/shell32/shellnew.c new file mode 100644 -index 0000000000..89be091e03 +index 00000000000..89be091e031 --- /dev/null +++ b/dlls/shell32/shellnew.c @@ -0,0 +1,498 @@ @@ -565,19 +565,19 @@ index 0000000000..89be091e03 + return hr; +} diff --git a/dlls/shell32/shellole.c b/dlls/shell32/shellole.c -index 3fe96801aa..649e6460cf 100644 +index 3c88642512e..d062cc8476b 100644 --- a/dlls/shell32/shellole.c +++ b/dlls/shell32/shellole.c -@@ -89,6 +89,7 @@ static const struct { - {&CLSID_Shell, IShellDispatch_Constructor}, - {&CLSID_DestinationList, CustomDestinationList_Constructor}, - {&CLSID_ShellImageDataFactory, ShellImageDataFactory_Constructor}, +@@ -75,6 +75,7 @@ static const struct { + {&CLSID_MyComputer, ISF_MyComputer_Constructor}, + {&CLSID_MyDocuments, MyDocuments_Constructor}, + {&CLSID_NetworkPlaces, ISF_NetworkPlaces_Constructor}, + {&CLSID_NewMenu, NewMenu_Constructor}, - {NULL, NULL} - }; - + {&CLSID_Printers, Printers_Constructor}, + {&CLSID_QueryAssociations, QueryAssociations_Constructor}, + {&CLSID_RecycleBin, RecycleBin_Constructor}, diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c -index f5d96c8d44..dbb24d9356 100644 +index f5d96c8d441..dbb24d93564 100644 --- a/dlls/shell32/tests/shlview.c +++ b/dlls/shell32/tests/shlview.c @@ -1479,7 +1479,6 @@ static void test_newmenu(void) @@ -604,5 +604,5 @@ index f5d96c8d44..dbb24d9356 100644 ok(hr == S_OK, "Failed to get IContextMenu3, hr %#x.\n", hr); IUnknown_Release(unk2); -- -2.17.0 +2.20.1 diff --git a/patches/shell32-Progress_Dialog/0003-shell32-Implement-file-operation-progress-dialog.patch b/patches/shell32-Progress_Dialog/0003-shell32-Implement-file-operation-progress-dialog.patch index cd1479ea..af6e6571 100644 --- a/patches/shell32-Progress_Dialog/0003-shell32-Implement-file-operation-progress-dialog.patch +++ b/patches/shell32-Progress_Dialog/0003-shell32-Implement-file-operation-progress-dialog.patch @@ -1,4 +1,4 @@ -From 4120d27b52861617c27c668c73d334ed4d32c302 Mon Sep 17 00:00:00 2001 +From 0cc42072f1b4585c2c0b11faf5a33282ce603853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Fri, 27 Feb 2015 01:04:33 +0100 Subject: [PATCH] shell32: Implement file operation progress dialog. @@ -11,7 +11,7 @@ Based on a patch by Huw Campbell. 3 files changed, 285 insertions(+), 7 deletions(-) diff --git a/dlls/shell32/shell32.rc b/dlls/shell32/shell32.rc -index 46f0b6f12dd..8739718f715 100644 +index f19b09f8c21..f9b75df1f05 100644 --- a/dlls/shell32/shell32.rc +++ b/dlls/shell32/shell32.rc @@ -184,6 +184,13 @@ If the files in the destination folder have the same names as files in the\n\ @@ -29,10 +29,10 @@ index 46f0b6f12dd..8739718f715 100644 IDS_RESTART_TITLE "Restart" IDS_RESTART_PROMPT "Do you want to simulate a Windows reboot?" diff --git a/dlls/shell32/shlfileop.c b/dlls/shell32/shlfileop.c -index 23c1f41f907..1f29c484458 100644 +index 91354d4c2ad..2263b20de8a 100644 --- a/dlls/shell32/shlfileop.c +++ b/dlls/shell32/shlfileop.c -@@ -65,6 +65,10 @@ typedef struct +@@ -67,6 +67,10 @@ typedef struct DWORD dwYesToAllMask; BOOL bManyItems; BOOL bCancelled; @@ -43,7 +43,7 @@ index 23c1f41f907..1f29c484458 100644 } FILE_OPERATION; typedef struct -@@ -103,6 +107,12 @@ static DWORD SHFindAttrW(LPCWSTR pName, BOOL fileOnly); +@@ -105,6 +109,12 @@ static DWORD SHFindAttrW(LPCWSTR pName, BOOL fileOnly); static int copy_files(FILE_OPERATION *op, BOOL multidest, const FILE_LIST *flFrom, FILE_LIST *flTo); static int move_files(FILE_OPERATION *op, BOOL multidest, const FILE_LIST *flFrom, const FILE_LIST *flTo); @@ -56,7 +56,7 @@ index 23c1f41f907..1f29c484458 100644 /* Confirm dialogs with an optional "Yes To All" as used in file operations confirmations */ static const WCHAR CONFIRM_MSG_PROP[] = {'W','I','N','E','_','C','O','N','F','I','R','M',0}; -@@ -391,6 +401,13 @@ static DWORD SHELL_DeleteDirectoryW(FILE_OPERATION *op, LPCWSTR pszDir, BOOL bSh +@@ -393,6 +403,13 @@ static DWORD SHELL_DeleteDirectoryW(FILE_OPERATION *op, LPCWSTR pszDir, BOOL bSh ret = SHELL_DeleteDirectoryW(op, szTemp, FALSE); else ret = SHNotifyDeleteFileW(op, szTemp); @@ -70,7 +70,7 @@ index 23c1f41f907..1f29c484458 100644 } while (!ret && FindNextFileW(hFind, &wfd)); } FindClose(hFind); -@@ -544,10 +561,22 @@ static DWORD SHNotifyDeleteFileA(FILE_OPERATION *op, LPCSTR path) +@@ -546,10 +563,22 @@ static DWORD SHNotifyDeleteFileA(FILE_OPERATION *op, LPCSTR path) static DWORD SHNotifyDeleteFileW(FILE_OPERATION *op, LPCWSTR path) { BOOL ret; @@ -94,7 +94,7 @@ index 23c1f41f907..1f29c484458 100644 ret = DeleteFileW(path); if (!ret) -@@ -560,6 +589,14 @@ static DWORD SHNotifyDeleteFileW(FILE_OPERATION *op, LPCWSTR path) +@@ -562,6 +591,14 @@ static DWORD SHNotifyDeleteFileW(FILE_OPERATION *op, LPCWSTR path) } if (ret) { @@ -109,7 +109,7 @@ index 23c1f41f907..1f29c484458 100644 SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW, path, NULL); return ERROR_SUCCESS; } -@@ -594,9 +631,10 @@ static DWORD SHNotifyMoveFileW(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest) +@@ -596,9 +633,10 @@ static DWORD SHNotifyMoveFileW(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest) TRACE("(%s %s)\n", debugstr_w(src), debugstr_w(dest)); @@ -122,7 +122,7 @@ index 23c1f41f907..1f29c484458 100644 /* MOVEFILE_REPLACE_EXISTING fails with dirs, so try MoveFile */ if (!ret) -@@ -646,14 +684,15 @@ static DWORD SHNotifyCopyFileW(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest, BO +@@ -648,14 +686,15 @@ static DWORD SHNotifyCopyFileW(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest, BO TRACE("(%s %s %s)\n", debugstr_w(src), debugstr_w(dest), bFailIfExists ? "failIfExists" : ""); @@ -140,7 +140,7 @@ index 23c1f41f907..1f29c484458 100644 if (ret) { SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW, dest, NULL); -@@ -1295,6 +1334,8 @@ static int copy_files(FILE_OPERATION *op, BOOL multidest, const FILE_LIST *flFro +@@ -1297,6 +1336,8 @@ static int copy_files(FILE_OPERATION *op, BOOL multidest, const FILE_LIST *flFro } /* Vista return code. XP would return e.g. ERROR_FILE_NOT_FOUND, ERROR_ALREADY_EXISTS */ @@ -149,7 +149,7 @@ index 23c1f41f907..1f29c484458 100644 if (op->bCancelled) return ERROR_CANCELLED; } -@@ -1377,13 +1418,17 @@ static int delete_files(FILE_OPERATION *op, const FILE_LIST *flFrom) +@@ -1379,13 +1420,17 @@ static int delete_files(FILE_OPERATION *op, const FILE_LIST *flFrom) /* delete the file or directory */ if (IsAttribFile(fileEntry->attributes)) @@ -169,7 +169,7 @@ index 23c1f41f907..1f29c484458 100644 } return ERROR_SUCCESS; -@@ -1458,6 +1503,11 @@ static int move_files(FILE_OPERATION *op, BOOL multidest, const FILE_LIST *flFro +@@ -1460,6 +1505,11 @@ static int move_files(FILE_OPERATION *op, BOOL multidest, const FILE_LIST *flFro move_to_dir(op, entryToMove, fileDest); else SHNotifyMoveFileW(op, entryToMove->szFullPath, fileDest->szFullPath); @@ -181,7 +181,7 @@ index 23c1f41f907..1f29c484458 100644 } if (mismatched > 0) -@@ -1517,6 +1567,7 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp) +@@ -1519,6 +1569,7 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp) { FILE_OPERATION op; FILE_LIST flFrom, flTo; @@ -189,7 +189,7 @@ index 23c1f41f907..1f29c484458 100644 int ret = 0; if (!lpFileOp) -@@ -1535,9 +1586,31 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp) +@@ -1537,9 +1588,31 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp) ZeroMemory(&op, sizeof(op)); op.req = lpFileOp; @@ -221,7 +221,7 @@ index 23c1f41f907..1f29c484458 100644 switch (lpFileOp->wFunc) { case FO_COPY: -@@ -1557,6 +1630,12 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp) +@@ -1559,6 +1632,12 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp) break; } @@ -234,7 +234,7 @@ index 23c1f41f907..1f29c484458 100644 destroy_file_list(&flFrom); if (lpFileOp->wFunc != FO_DELETE) -@@ -1565,6 +1644,9 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp) +@@ -1567,6 +1646,9 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp) if (ret == ERROR_CANCELLED) lpFileOp->fAnyOperationsAborted = TRUE; @@ -244,9 +244,9 @@ index 23c1f41f907..1f29c484458 100644 SetLastError(ERROR_SUCCESS); return ret; } -@@ -1806,3 +1888,184 @@ HRESULT WINAPI SHMultiFileProperties(IDataObject *pdtobj, DWORD flags) - FIXME("stub: %p %u\n", pdtobj, flags); - return E_NOTIMPL; +@@ -2055,3 +2137,184 @@ HRESULT WINAPI IFileOperation_Constructor(IUnknown *outer, REFIID riid, void **o + + return hr; } + +static BOOL progressbar_calc_size(FILE_OPERATION *op, LPWSTR buf, BOOL is_folder, DWORD *ticks) @@ -449,5 +449,5 @@ index 92185d637e7..33edb584c1b 100644 #define IDS_RECYCLEBIN_FOLDER_NAME 8964 -- -2.17.1 +2.20.1 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 946a501a..5f7f13a1 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 9b3b49acf05b15eb533beb846e920bfcbc49094c Mon Sep 17 00:00:00 2001 +From 3d61d04751da0d7267d83ddc374e0f7be550348e 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 @@ -9,15 +9,15 @@ Subject: [PATCH] server: Add HID input message type to send_hardware_message dlls/user32/rawinput.c | 60 ++++++++++++++++++++++++++++++++++++-- dlls/user32/user_private.h | 2 ++ server/protocol.def | 26 +++++++++++++++-- - server/queue.c | 58 +++++++++++++++++++++++++++++++----- + server/queue.c | 60 ++++++++++++++++++++++++++++++++------ server/trace.c | 10 +++++-- - 6 files changed, 143 insertions(+), 17 deletions(-) + 6 files changed, 144 insertions(+), 18 deletions(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c -index 4434f4b0c2a..7ae865a135c 100644 +index f7ce262f90d..01d1a0eed97 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c -@@ -3238,10 +3238,10 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) +@@ -3240,10 +3240,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 4434f4b0c2a..7ae865a135c 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; -@@ -3250,6 +3250,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) +@@ -3252,6 +3252,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 4434f4b0c2a..7ae865a135c 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; -@@ -3257,6 +3258,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) +@@ -3259,6 +3260,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) req->input.kbd.info = input->u.ki.dwExtraInfo; break; case INPUT_HARDWARE: @@ -174,7 +174,7 @@ index 7761a1ceb4f..bf13e81762a 100644 + #endif /* __WINE_USER_PRIVATE_H */ diff --git a/server/protocol.def b/server/protocol.def -index 5aed1d19b8e..2efaa3336e4 100644 +index 140d94ea036..a032f9aa507 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -312,6 +312,13 @@ struct hardware_msg_data @@ -234,7 +234,7 @@ index 5aed1d19b8e..2efaa3336e4 100644 typedef union { -@@ -2048,6 +2067,7 @@ enum message_type +@@ -2044,6 +2063,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 5aed1d19b8e..2efaa3336e4 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 1cdecd9ef26..43e488eac70 100644 +index f39cf19ecd7..1b9d66b847e 100644 --- a/server/queue.c +++ b/server/queue.c -@@ -1590,7 +1590,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 struct msg_queue *queue; struct message *msg; timeout_t timeout = 2000 * -10000; /* FIXME: load from registry */ @@ -255,7 +255,7 @@ index 1cdecd9ef26..43e488eac70 100644 if (!(hook_thread = get_first_global_hook( id ))) return 0; if (!(queue = hook_thread->queue)) return 0; -@@ -1608,7 +1608,7 @@ static int send_hook_ll_message( struct desktop *desktop, struct message *hardwa +@@ -1626,7 +1626,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 1cdecd9ef26..43e488eac70 100644 { unsigned short vkey = input->kbd.vkey; if (input->kbd.flags & KEYEVENTF_UNICODE) vkey = VK_PACKET; -@@ -1644,6 +1644,8 @@ struct rawinput_message +@@ -1662,6 +1662,8 @@ struct rawinput_message struct desktop *desktop; struct hw_msg_source source; unsigned int time; @@ -273,7 +273,7 @@ index 1cdecd9ef26..43e488eac70 100644 struct hardware_msg_data data; const void *extra; data_size_t extra_len; -@@ -1653,6 +1655,7 @@ struct rawinput_message +@@ -1671,6 +1673,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 1cdecd9ef26..43e488eac70 100644 const struct rawinput_device *device = NULL; struct desktop *target_desktop = NULL, *desktop = NULL; struct thread *target_thread = NULL, *foreground = NULL; -@@ -1664,6 +1667,8 @@ static int queue_rawinput_message( struct process* process, void *arg ) +@@ -1682,6 +1685,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 1cdecd9ef26..43e488eac70 100644 if (!device) return 0; if (raw_msg->desktop) desktop = (struct desktop *)grab_object( raw_msg->desktop ); -@@ -1982,6 +1987,37 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ +@@ -2000,6 +2005,37 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ queue_hardware_message( desktop, msg, 1 ); } @@ -328,7 +328,7 @@ index 1cdecd9ef26..43e488eac70 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 ) -@@ -2487,15 +2523,18 @@ DECL_HANDLER(send_hardware_message) +@@ -2505,15 +2541,18 @@ DECL_HANDLER(send_hardware_message) switch (req->input.type) { @@ -350,7 +350,7 @@ index 1cdecd9ef26..43e488eac70 100644 default: set_error( STATUS_INVALID_PARAMETER ); } -@@ -3267,20 +3306,23 @@ DECL_HANDLER(get_rawinput_buffer) +@@ -3295,14 +3334,17 @@ DECL_HANDLER(get_rawinput_buffer) { struct message *msg = LIST_ENTRY( ptr, struct message, entry ); struct hardware_msg_data *data = msg->data; @@ -364,7 +364,15 @@ index 1cdecd9ef26..43e488eac70 100644 next_size = req->rawinput_size; if (size + next_size > req->buffer_size) break; - if (cur + sizeof(*data) > buf + get_reply_max_size()) break; +- if (cur + sizeof(*data) > buf + buf_size) + if (cur + msg_size > buf + get_reply_max_size()) break; ++ if (cur + msg_size > buf + buf_size) + { + buf_size += buf_size / 2; + if (!(tmp = realloc( buf, buf_size ))) +@@ -3314,12 +3356,12 @@ DECL_HANDLER(get_rawinput_buffer) + buf = tmp; + } - memcpy(cur, data, sizeof(*data)); + memcpy(cur, data, msg_size); @@ -378,10 +386,10 @@ index 1cdecd9ef26..43e488eac70 100644 } diff --git a/server/trace.c b/server/trace.c -index f217bb1fa90..687a9f8e5d9 100644 +index c6ef3fb9773..4434bb1893f 100644 --- a/server/trace.c +++ b/server/trace.c -@@ -399,24 +399,28 @@ static void dump_hw_input( const char *prefix, const hw_input_t *input ) +@@ -398,24 +398,28 @@ static void dump_hw_input( const char *prefix, const hw_input_t *input ) { switch (input->type) { @@ -414,5 +422,5 @@ index f217bb1fa90..687a9f8e5d9 100644 fprintf( stderr, "%s{type=%04x}", prefix, input->type ); break; -- -2.28.0 +2.20.1 diff --git a/patches/widl-winrt-support/0012-widl-Support-WinRT-activatable-attribute-parsing.patch b/patches/widl-winrt-support/0012-widl-Support-WinRT-activatable-attribute-parsing.patch deleted file mode 100644 index 19f1a854..00000000 --- a/patches/widl-winrt-support/0012-widl-Support-WinRT-activatable-attribute-parsing.patch +++ /dev/null @@ -1,66 +0,0 @@ -From a9478fb534dbb1bc2319a147cd3794112304df68 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Tue, 13 Oct 2020 11:35:29 +0200 -Subject: [PATCH] widl: Support WinRT activatable attribute parsing. - ---- - tools/widl/parser.l | 1 + - tools/widl/parser.y | 3 +++ - tools/widl/widltypes.h | 1 + - 3 files changed, 5 insertions(+) - -diff --git a/tools/widl/parser.l b/tools/widl/parser.l -index 8acc9c9590c..d726e76744e 100644 ---- a/tools/widl/parser.l -+++ b/tools/widl/parser.l -@@ -320,6 +320,7 @@ static const struct keyword keywords[] = { - */ - static const struct keyword attr_keywords[] = - { -+ {"activatable", tACTIVATABLE, 1}, - {"aggregatable", tAGGREGATABLE, 0}, - {"agile", tAGILE, 1}, - {"all_nodes", tALLNODES, 0}, -diff --git a/tools/widl/parser.y b/tools/widl/parser.y -index b43a1cdd5f2..eaeba90609d 100644 ---- a/tools/widl/parser.y -+++ b/tools/widl/parser.y -@@ -166,6 +166,7 @@ static typelib_t *current_typelib; - %token GREATEREQUAL LESSEQUAL - %token LOGICALOR LOGICALAND - %token ELLIPSIS -+%token tACTIVATABLE - %token tAGGREGATABLE - %token tAGILE - %token tALLNODES tALLOCATE tANNOTATION -@@ -539,6 +540,7 @@ contract_req: decl_spec ',' contract_ver { if ($1->type->type_type != TYPE_APICO - } - - attribute: { $$ = NULL; } -+ | tACTIVATABLE '(' contract_req ')' { $$ = make_attrp(ATTR_ACTIVATABLE, $3); } - | tAGGREGATABLE { $$ = make_attr(ATTR_AGGREGATABLE); } - | tANNOTATION '(' aSTRING ')' { $$ = make_attrp(ATTR_ANNOTATION, $3); } - | tAPPOBJECT { $$ = make_attr(ATTR_APPOBJECT); } -@@ -2162,6 +2164,7 @@ struct allowed_attr - struct allowed_attr allowed_attr[] = - { - /* attr { D ACF M I Fn ARG T En Enm St Un Fi L DI M C AC R } */ -+ /* ATTR_ACTIVATABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "activatable" }, - /* ATTR_AGGREGATABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "aggregatable" }, - /* ATTR_ALLOCATE */ { 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "allocate" }, - /* ATTR_ANNOTATION */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "annotation" }, -diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h -index 0fba33d6a09..5d4532d6434 100644 ---- a/tools/widl/widltypes.h -+++ b/tools/widl/widltypes.h -@@ -69,6 +69,7 @@ typedef struct list warning_list_t; - - enum attr_type - { -+ ATTR_ACTIVATABLE, - ATTR_AGGREGATABLE, - ATTR_ALLOCATE, - ATTR_ANNOTATION, --- -2.20.1 - diff --git a/patches/widl-winrt-support/0013-widl-Support-WinRT-static-attribute-parsing.patch b/patches/widl-winrt-support/0013-widl-Support-WinRT-static-attribute-parsing.patch deleted file mode 100644 index 9d3a60a3..00000000 --- a/patches/widl-winrt-support/0013-widl-Support-WinRT-static-attribute-parsing.patch +++ /dev/null @@ -1,78 +0,0 @@ -From c0c6947738f5e41804b475f889eeb37161083455 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Tue, 13 Oct 2020 14:30:32 +0200 -Subject: [PATCH] widl: Support WinRT static attribute parsing. - ---- - tools/widl/parser.l | 1 + - tools/widl/parser.y | 8 ++++++++ - tools/widl/widltypes.h | 1 + - 3 files changed, 10 insertions(+) - -diff --git a/tools/widl/parser.l b/tools/widl/parser.l -index d726e76744e..9b93a53b839 100644 ---- a/tools/widl/parser.l -+++ b/tools/widl/parser.l -@@ -427,6 +427,7 @@ static const struct keyword attr_keywords[] = - {"size_is", tSIZEIS, 0}, - {"source", tSOURCE, 0}, - {"standard", tSTANDARD, 1}, -+ {"static", tSTATIC, 1}, - {"strict_context_handle", tSTRICTCONTEXTHANDLE, 0}, - {"string", tSTRING, 0}, - {"switch_is", tSWITCHIS, 0}, -diff --git a/tools/widl/parser.y b/tools/widl/parser.y -index eaeba90609d..b8c916f8336 100644 ---- a/tools/widl/parser.y -+++ b/tools/widl/parser.y -@@ -277,6 +277,7 @@ static typelib_t *current_typelib; - %type m_expr expr expr_const expr_int_const array m_bitfield - %type m_exprs /* exprs expr_list */ expr_list_int_const - %type contract_req -+%type static_attr - %type storage_cls_spec - %type type_qualifier m_type_qual_list - %type function_specifier -@@ -539,6 +540,11 @@ contract_req: decl_spec ',' contract_ver { if ($1->type->type_type != TYPE_APICO - $$ = make_exprt(EXPR_GTREQL, declare_var(NULL, $1, make_declarator(NULL), 0), $$); - } - -+static_attr: decl_spec ',' contract_req { if ($1->type->type_type != TYPE_INTERFACE) -+ error_loc("type %s is not an interface\n", $1->type->name); -+ $$ = make_exprt(EXPR_MEMBER, declare_var(NULL, $1, make_declarator(NULL), 0), $3); -+ } -+ - attribute: { $$ = NULL; } - | tACTIVATABLE '(' contract_req ')' { $$ = make_attrp(ATTR_ACTIVATABLE, $3); } - | tAGGREGATABLE { $$ = make_attr(ATTR_AGGREGATABLE); } -@@ -637,6 +643,7 @@ attribute: { $$ = NULL; } - | tRETVAL { $$ = make_attr(ATTR_RETVAL); } - | tSIZEIS '(' m_exprs ')' { $$ = make_attrp(ATTR_SIZEIS, $3); } - | tSOURCE { $$ = make_attr(ATTR_SOURCE); } -+ | tSTATIC '(' static_attr ')' { $$ = make_attrp(ATTR_STATIC, $3); } - | tSTRICTCONTEXTHANDLE { $$ = make_attr(ATTR_STRICTCONTEXTHANDLE); } - | tSTRING { $$ = make_attr(ATTR_STRING); } - | tSWITCHIS '(' expr ')' { $$ = make_attrp(ATTR_SWITCHIS, $3); } -@@ -2258,6 +2265,7 @@ struct allowed_attr allowed_attr[] = - /* ATTR_RETVAL */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "retval" }, - /* ATTR_SIZEIS */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "size_is" }, - /* ATTR_SOURCE */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "source" }, -+ /* ATTR_STATIC */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "static" }, - /* ATTR_STRICTCONTEXTHANDLE */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "strict_context_handle" }, - /* ATTR_STRING */ { 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "string" }, - /* ATTR_SWITCHIS */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "switch_is" }, -diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h -index 5d4532d6434..facfff21453 100644 ---- a/tools/widl/widltypes.h -+++ b/tools/widl/widltypes.h -@@ -163,6 +163,7 @@ enum attr_type - ATTR_RETVAL, - ATTR_SIZEIS, - ATTR_SOURCE, -+ ATTR_STATIC, - ATTR_STRICTCONTEXTHANDLE, - ATTR_STRING, - ATTR_SWITCHIS, --- -2.20.1 - diff --git a/patches/widl-winrt-support/0014-include-Add-Windows.Media.SpeechSynthesis.SpeechSynt.patch b/patches/widl-winrt-support/0014-include-Add-Windows.Media.SpeechSynthesis.SpeechSynt.patch deleted file mode 100644 index 7374fbba..00000000 --- a/patches/widl-winrt-support/0014-include-Add-Windows.Media.SpeechSynthesis.SpeechSynt.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 3390b91447ab5cea8f8855cfeb3cd3a6a5041650 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Tue, 2 Feb 2021 09:12:08 +0100 -Subject: [PATCH] include: Add Windows.Media.SpeechSynthesis.SpeechSynthesizer - runtimeclass. - -As an illustration for the newly supported attributes. ---- - include/windows.media.speechsynthesis.idl | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - -diff --git a/include/windows.media.speechsynthesis.idl b/include/windows.media.speechsynthesis.idl -index 502261f79c6..87497678f30 100644 ---- a/include/windows.media.speechsynthesis.idl -+++ b/include/windows.media.speechsynthesis.idl -@@ -24,10 +24,16 @@ import "inspectable.idl"; - import "windows.foundation.idl"; - - namespace Windows { -+ namespace Foundation { -+ interface IClosable; -+ } - namespace Media { - namespace SpeechSynthesis { - typedef enum VoiceGender VoiceGender; - interface IInstalledVoicesStatic; -+ interface IInstalledVoicesStatic2; -+ interface ISpeechSynthesizer; -+ interface ISpeechSynthesizer2; - interface IVoiceInformation; - runtimeclass VoiceInformation; - } -@@ -66,6 +72,20 @@ namespace Windows { - { - [default] interface Windows.Media.SpeechSynthesis.IVoiceInformation; - } -+ -+ [ -+ activatable(Windows.Foundation.UniversalApiContract, 1.0), -+ contract(Windows.Foundation.UniversalApiContract, 1.0), -+ marshaling_behavior(agile), -+ static(Windows.Media.SpeechSynthesis.IInstalledVoicesStatic, Windows.Foundation.UniversalApiContract, 1.0), -+ static(Windows.Media.SpeechSynthesis.IInstalledVoicesStatic2, Windows.Foundation.UniversalApiContract, 5.0) -+ ] -+ runtimeclass SpeechSynthesizer -+ { -+ [default] interface Windows.Media.SpeechSynthesis.ISpeechSynthesizer; -+ interface Windows.Foundation.IClosable; -+ [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.Media.SpeechSynthesis.ISpeechSynthesizer2; -+ } - } - } - } --- -2.20.1 - diff --git a/patches/widl-winrt-support/0015-widl-Support-WinRT-requires-keyword.patch b/patches/widl-winrt-support/0015-widl-Support-WinRT-requires-keyword.patch deleted file mode 100644 index 9069970f..00000000 --- a/patches/widl-winrt-support/0015-widl-Support-WinRT-requires-keyword.patch +++ /dev/null @@ -1,209 +0,0 @@ -From 8b5c17d32ec132669fc345bce9616d6631e072ab Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Tue, 13 Oct 2020 00:31:57 +0200 -Subject: [PATCH] widl: Support WinRT requires keyword. - ---- - tools/widl/parser.l | 1 + - tools/widl/parser.y | 45 +++++++++++++++++++++++++++++++++--------- - tools/widl/typetree.c | 5 ++++- - tools/widl/typetree.h | 9 ++++++++- - tools/widl/widltypes.h | 1 + - 5 files changed, 50 insertions(+), 11 deletions(-) - -diff --git a/tools/widl/parser.l b/tools/widl/parser.l -index 9b93a53b839..946dba84cd6 100644 ---- a/tools/widl/parser.l -+++ b/tools/widl/parser.l -@@ -298,6 +298,7 @@ static const struct keyword keywords[] = { - {"pascal", tPASCAL, 0}, - {"properties", tPROPERTIES, 0}, - {"register", tREGISTER, 0}, -+ {"requires", tREQUIRES, 1}, - {"runtimeclass", tRUNTIMECLASS, 1}, - {"short", tSHORT, 0}, - {"signed", tSIGNED, 0}, -diff --git a/tools/widl/parser.y b/tools/widl/parser.y -index b8c916f8336..169a5ba6386 100644 ---- a/tools/widl/parser.y -+++ b/tools/widl/parser.y -@@ -38,12 +38,6 @@ - #include "expr.h" - #include "typetree.h" - --typedef struct list typelist_t; --struct typenode { -- type_t *type; -- struct list entry; --}; -- - struct _import_t - { - char *name; -@@ -51,6 +45,8 @@ struct _import_t - }; - - static str_list_t *append_str(str_list_t *list, char *str); -+static type_list_t *append_type(type_list_t *list, type_t *type); -+static type_list_t *append_types(type_list_t *list, type_list_t *types); - static attr_list_t *append_attr(attr_list_t *list, attr_t *attr); - static attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list); - static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right, -@@ -130,6 +126,7 @@ static typelib_t *current_typelib; - expr_t *expr; - expr_list_t *expr_list; - type_t *type; -+ type_list_t *typelist; - var_t *var; - var_list_t *var_list; - declarator_t *declarator; -@@ -240,6 +237,7 @@ static typelib_t *current_typelib; - %token tREADONLY tREF - %token tREGISTER tREPRESENTAS - %token tREQUESTEDIT -+%token tREQUIRES - %token tRESTRICTED - %token tRETVAL - %token tRUNTIMECLASS -@@ -291,6 +289,7 @@ static typelib_t *current_typelib; - %type base_type int_std - %type enumdef structdef uniondef typedecl - %type type unqualified_type qualified_type -+%type requires required_types - %type class_interface - %type class_interfaces - %type arg ne_union_field union_field s_field case enum enum_member declaration -@@ -967,8 +966,16 @@ inherit: { $$ = NULL; } - interface: tINTERFACE typename { $$ = type_interface_declare($2, current_namespace); } - ; - --interfacedef: attributes interface inherit -- '{' int_statements '}' semicolon_opt { $$ = type_interface_define($2, $1, $3, $5); -+required_types: -+ qualified_type { $$ = append_type(NULL, $1); } -+ | required_types ',' required_types { $$ = append_types($1, $3); } -+ -+requires: { $$ = NULL; } -+ | tREQUIRES required_types { $$ = $2; } -+ ; -+ -+interfacedef: attributes interface inherit requires -+ '{' int_statements '}' semicolon_opt { $$ = type_interface_define($2, $1, $3, $6, $4); - check_async_uuid($$); - } - | dispinterfacedef semicolon_opt { $$ = $1; } -@@ -1296,6 +1303,26 @@ static str_list_t *append_str(str_list_t *list, char *str) - return list; - } - -+static type_list_t *append_type(type_list_t *list, type_t *type) -+{ -+ type_list_t *entry; -+ if (!type) return list; -+ entry = xmalloc( sizeof(*entry) ); -+ entry->type = type; -+ entry->next = list; -+ return entry; -+} -+ -+static type_list_t *append_types(type_list_t *list, type_list_t *types) -+{ -+ type_list_t *entry; -+ if (!list) return types; -+ if (!types) return list; -+ for (entry = list; entry->next; entry = entry->next) {} -+ entry->next = types; -+ return list; -+} -+ - static attr_list_t *move_attr(attr_list_t *dst, attr_list_t *src, enum attr_type type) - { - attr_t *attr; -@@ -2981,7 +3008,7 @@ static void check_async_uuid(type_t *iface) - stmts = append_statement(stmts, make_statement_declaration(finish_func)); - } - -- type_interface_define(async_iface, map_attrs(iface->attrs, async_iface_attrs), inherit, stmts); -+ type_interface_define(async_iface, map_attrs(iface->attrs, async_iface_attrs), inherit, stmts, NULL); - iface->details.iface->async_iface = async_iface->details.iface->async_iface = async_iface; - } - -diff --git a/tools/widl/typetree.c b/tools/widl/typetree.c -index b3f0725f00e..c67daa6ae8c 100644 ---- a/tools/widl/typetree.c -+++ b/tools/widl/typetree.c -@@ -441,7 +441,7 @@ type_t *type_interface_declare(char *name, struct namespace *namespace) - return type; - } - --type_t *type_interface_define(type_t *iface, attr_list_t *attrs, type_t *inherit, statement_list_t *stmts) -+type_t *type_interface_define(type_t *iface, attr_list_t *attrs, type_t *inherit, statement_list_t *stmts, type_list_t *requires) - { - if (iface->defined) - error_loc("interface %s already defined at %s:%d\n", -@@ -457,6 +457,7 @@ type_t *type_interface_define(type_t *iface, attr_list_t *attrs, type_t *inherit - iface->details.iface->inherit = inherit; - iface->details.iface->disp_inherit = NULL; - iface->details.iface->async_iface = NULL; -+ iface->details.iface->requires = requires; - iface->defined = TRUE; - compute_method_indexes(iface); - return iface; -@@ -485,6 +486,7 @@ type_t *type_dispinterface_define(type_t *iface, attr_list_t *attrs, var_list_t - if (!iface->details.iface->inherit) error_loc("IDispatch is undefined\n"); - iface->details.iface->disp_inherit = NULL; - iface->details.iface->async_iface = NULL; -+ iface->details.iface->requires = NULL; - iface->defined = TRUE; - compute_method_indexes(iface); - return iface; -@@ -504,6 +506,7 @@ type_t *type_dispinterface_define_from_iface(type_t *dispiface, attr_list_t *att - if (!dispiface->details.iface->inherit) error_loc("IDispatch is undefined\n"); - dispiface->details.iface->disp_inherit = iface; - dispiface->details.iface->async_iface = NULL; -+ dispiface->details.iface->requires = NULL; - dispiface->defined = TRUE; - compute_method_indexes(dispiface); - return dispiface; -diff --git a/tools/widl/typetree.h b/tools/widl/typetree.h -index 8e04537ab4d..b238c11f615 100644 ---- a/tools/widl/typetree.h -+++ b/tools/widl/typetree.h -@@ -53,7 +53,7 @@ type_t *type_new_encapsulated_union(char *name, var_t *switch_field, var_t *unio - type_t *type_new_bitfield(type_t *field_type, const expr_t *bits); - type_t *type_runtimeclass_declare(char *name, struct namespace *namespace); - type_t *type_interface_declare(char *name, struct namespace *namespace); --type_t *type_interface_define(type_t *iface, attr_list_t *attrs, type_t *inherit, statement_list_t *stmts); -+type_t *type_interface_define(type_t *iface, attr_list_t *attrs, type_t *inherit, statement_list_t *stmts, type_list_t *requires); - type_t *type_dispinterface_declare(char *name); - type_t *type_dispinterface_define(type_t *iface, attr_list_t *attrs, var_list_t *props, var_list_t *methods); - type_t *type_dispinterface_define_from_iface(type_t *dispiface, attr_list_t *attrs, type_t *iface); -@@ -181,6 +181,13 @@ static inline type_t *type_iface_get_inherit(const type_t *type) - return type->details.iface->inherit; - } - -+static inline type_list_t *type_iface_get_requires(const type_t *type) -+{ -+ type = type_get_real_type(type); -+ assert(type_get_type(type) == TYPE_INTERFACE); -+ return type->details.iface->requires; -+} -+ - static inline type_t *type_iface_get_async_iface(const type_t *type) - { - type = type_get_real_type(type); -diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h -index facfff21453..a3000a7417b 100644 ---- a/tools/widl/widltypes.h -+++ b/tools/widl/widltypes.h -@@ -386,6 +386,7 @@ struct iface_details - struct _type_t *inherit; - struct _type_t *disp_inherit; - struct _type_t *async_iface; -+ type_list_t *requires; - }; - - struct module_details --- -2.20.1 - diff --git a/patches/widl-winrt-support/definition b/patches/widl-winrt-support/definition index fdfd21b7..aac7edac 100644 --- a/patches/widl-winrt-support/definition +++ b/patches/widl-winrt-support/definition @@ -1 +1,3 @@ Fixes: [49998] widl - Support WinRT idls +# In the process of upstreaming. +Disabled: true diff --git a/patches/windows.gaming.input-dll/definition b/patches/windows.gaming.input-dll/definition index 120b5bff..9b623c80 100644 --- a/patches/windows.gaming.input-dll/definition +++ b/patches/windows.gaming.input-dll/definition @@ -6,3 +6,5 @@ # To support Death Stranding Fixes: [49756] windows.gaming.input: New DLL Depends: windows.media.speech.dll +# In the process of upstreaming. +Disabled: true diff --git a/patches/windows.globalization-dll/definition b/patches/windows.globalization-dll/definition index d2a356f4..3df15330 100644 --- a/patches/windows.globalization-dll/definition +++ b/patches/windows.globalization-dll/definition @@ -1,3 +1,5 @@ Fixes: [49740] windows.globalization: New DLL Fixes: [49998] windows.globalization: New DLL Depends: windows.gaming.input-dll +# In the process of upstreaming. +Disabled: true diff --git a/patches/windows.media.speech.dll/definition b/patches/windows.media.speech.dll/definition index eb60c295..8baf3b2c 100644 --- a/patches/windows.media.speech.dll/definition +++ b/patches/windows.media.speech.dll/definition @@ -1,2 +1,4 @@ Fixes: [49740] windows.media.speech: New DLL Depends: widl-winrt-support +# In the process of upstreaming. +Disabled: true diff --git a/patches/windows.networking.connectivity.dll/definition b/patches/windows.networking.connectivity.dll/definition index 4f248dd0..70eed421 100644 --- a/patches/windows.networking.connectivity.dll/definition +++ b/patches/windows.networking.connectivity.dll/definition @@ -1,2 +1,4 @@ Fixes: [46534] windows.networking.connectivity: New DLL Depends: windows.globalization-dll +# In the process of upstreaming. +Disabled: true diff --git a/staging/upstream-commit b/staging/upstream-commit index 6c1903b0..b7998c40 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -7a9745022b1bfcc235b922be98a8fdc91976c587 +2d6b0b67d91b6433744ec859b10b8ee8eb4a37b3