Rebase against 18ae539c914a9b5a89f63d8cf9c2a21273eccc6c.

This commit is contained in:
Zebediah Figura 2020-07-09 23:17:40 -05:00
parent f6954e6e77
commit 046f6604b7
17 changed files with 189 additions and 426 deletions

View File

@ -1,14 +1,14 @@
From 7fbcb02d4e88819dead5b944c3b4676fb4c3bc35 Mon Sep 17 00:00:00 2001
From 1deb289cab2a4271ec84b4636e39a467bd52b117 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Wed, 20 Aug 2014 15:28:00 -0600
Subject: [PATCH] ntdll: Implement storing DOS attributes in NtCreateFile.
Subject: [PATCH 3/7] ntdll: Implement storing DOS attributes in NtCreateFile.
---
dlls/ntdll/tests/directory.c | 24 +++++------
dlls/ntdll/unix/file.c | 78 +++++++++++++++++++++++-------------
dlls/ntdll/tests/directory.c | 24 ++++++------
dlls/ntdll/unix/file.c | 74 +++++++++++++++++++++++-------------
include/wine/port.h | 2 +
libs/port/xattr.c | 20 +++++++++
4 files changed, 83 insertions(+), 41 deletions(-)
libs/port/xattr.c | 20 ++++++++++
4 files changed, 81 insertions(+), 39 deletions(-)
diff --git a/dlls/ntdll/tests/directory.c b/dlls/ntdll/tests/directory.c
index 248ed99ab20..e0f4debc624 100644
@ -60,10 +60,10 @@ index 248ed99ab20..e0f4debc624 100644
}
testfiles[i].nfound++;
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index e3477f5cb5b..73bacabb4f3 100644
index d1f1b8c8f30..32653a110a2 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -3572,6 +3572,20 @@ void CDECL set_show_dot_files( BOOL enable )
@@ -3580,6 +3580,20 @@ void CDECL set_show_dot_files( BOOL enable )
show_dot_files = enable;
}
@ -84,7 +84,7 @@ index e3477f5cb5b..73bacabb4f3 100644
/******************************************************************************
* NtCreateFile (NTDLL.@)
@@ -3581,6 +3595,10 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
@@ -3589,6 +3603,10 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
ULONG attributes, ULONG sharing, ULONG disposition,
ULONG options, void *ea_buffer, ULONG ea_length )
{
@ -92,10 +92,10 @@ index e3477f5cb5b..73bacabb4f3 100644
+ OBJECT_ATTRIBUTES unix_attr;
+ data_size_t len;
+ struct object_attributes *objattr;
ANSI_STRING unix_name;
char *unix_name;
BOOL created = FALSE;
@@ -3623,36 +3641,34 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
@@ -3631,36 +3649,34 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
io->u.Status = STATUS_SUCCESS;
}
@ -106,11 +106,14 @@ index e3477f5cb5b..73bacabb4f3 100644
- OBJECT_ATTRIBUTES unix_attr = *attr;
- data_size_t len;
- struct object_attributes *objattr;
-
+ WARN("%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
+ return io->u.Status;
+ }
- unix_attr.ObjectName = &empty_string; /* we send the unix name instead */
- if ((io->u.Status = alloc_object_attributes( &unix_attr, &objattr, &len )))
- {
- RtlFreeAnsiString( &unix_name );
- RtlFreeHeap( GetProcessHeap(), 0, unix_name );
- return io->u.Status;
- }
- SERVER_START_REQ( create_file )
@ -121,23 +124,17 @@ index e3477f5cb5b..73bacabb4f3 100644
- req->options = options;
- req->attrs = attributes;
- wine_server_add_data( req, objattr, len );
- wine_server_add_data( req, unix_name.Buffer, unix_name.Length );
- wine_server_add_data( req, unix_name, strlen(unix_name) );
- io->u.Status = wine_server_call( req );
- *handle = wine_server_ptr_handle( reply->handle );
- }
- SERVER_END_REQ;
- free( objattr );
- RtlFreeAnsiString( &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 );
+
+ unix_attr = *attr;
+ unix_attr.ObjectName = &empty_string; /* we send the unix name instead */
+ if ((io->u.Status = alloc_object_attributes( &unix_attr, &objattr, &len )))
+ {
+ RtlFreeAnsiString( &unix_name );
RtlFreeHeap( GetProcessHeap(), 0, unix_name );
+ return io->u.Status;
+ }
+
@ -149,32 +146,33 @@ index e3477f5cb5b..73bacabb4f3 100644
+ req->options = options;
+ req->attrs = attributes;
+ wine_server_add_data( req, objattr, len );
+ wine_server_add_data( req, unix_name.Buffer, unix_name.Length );
+ wine_server_add_data( req, unix_name, strlen(unix_name) );
+ io->u.Status = wine_server_call( req );
+ *handle = wine_server_ptr_handle( reply->handle );
+ }
}
- else WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
+ SERVER_END_REQ;
+ free( objattr );
if (io->u.Status == STATUS_SUCCESS)
{
@@ -3674,6 +3690,11 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
@@ -3682,6 +3698,11 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
io->Information = FILE_OVERWRITTEN;
break;
}
+ if (io->Information == FILE_CREATED)
+ {
+ /* set any DOS extended attributes */
+ set_file_info( unix_name.Buffer, attributes );
+ set_file_info( unix_name, attributes );
+ }
}
else if (io->u.Status == STATUS_TOO_MANY_OPENED_FILES)
{
@@ -3681,6 +3702,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
@@ -3689,6 +3710,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" );
}
+ RtlFreeAnsiString( &unix_name );
+ RtlFreeHeap( GetProcessHeap(), 0, unix_name );
return io->u.Status;
}

View File

@ -1,4 +1,4 @@
From 01a10dd50491ca0162a5293836cf9b9a3d3c0e34 Mon Sep 17 00:00:00 2001
From 78f53ba7362227cf5d725d6d5b70e06267597b5e Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Wed, 20 Aug 2014 11:26:48 -0600
Subject: [PATCH] ntdll: Perform the Unix-style hidden file check within the
@ -9,10 +9,10 @@ Subject: [PATCH] ntdll: Perform the Unix-style hidden file check within the
1 file changed, 9 insertions(+), 14 deletions(-)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index 496c92265e9..6f3772d20be 100644
index 33fa49d0dea..a88daf1f7f3 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -1217,15 +1217,15 @@ static BOOLEAN get_dir_case_sensitivity( const char *dir )
@@ -1238,15 +1238,15 @@ static BOOLEAN get_dir_case_sensitivity( const char *dir )
*
* Check if the specified file should be hidden based on its name and the show dot files option.
*/
@ -33,7 +33,7 @@ index 496c92265e9..6f3772d20be 100644
if (p == end || *p != '.') return FALSE;
/* make sure it isn't '.' or '..' */
if (p + 1 == end) return FALSE;
@@ -1493,6 +1493,10 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr )
@@ -1571,6 +1571,10 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr )
RtlFreeHeap( GetProcessHeap(), 0, parent_path );
}
*attr |= get_file_attributes( st );
@ -44,7 +44,7 @@ index 496c92265e9..6f3772d20be 100644
len = xattr_get( path, SAMBA_XATTR_DOS_ATTRIB, hexattr, sizeof(hexattr)-1 );
if (len == -1) return ret;
*attr |= get_file_xattr( hexattr, len );
@@ -1684,11 +1688,6 @@ static NTSTATUS get_dir_data_entry( struct dir_data *dir_data, void *info_ptr, I
@@ -2081,11 +2085,6 @@ static NTSTATUS get_dir_data_entry( struct dir_data *dir_data, void *info_ptr, I
if (class != FileNamesInformation)
{
if (st.st_dev != dir_data->id.dev) st.st_ino = 0; /* ignore inode if on a different device */
@ -56,15 +56,15 @@ index 496c92265e9..6f3772d20be 100644
fill_file_info( &st, attributes, info, class );
}
@@ -3301,7 +3300,6 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr,
@@ -3857,7 +3856,6 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr,
info->AllocationSize = std.AllocationSize;
info->EndOfFile = std.EndOfFile;
info->FileAttributes = basic.FileAttributes;
- if (is_hidden_file( attr->ObjectName )) info->FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
}
RtlFreeAnsiString( &unix_name );
RtlFreeHeap( GetProcessHeap(), 0, unix_name );
}
@@ -3328,10 +3326,7 @@ NTSTATUS WINAPI NtQueryAttributesFile( const OBJECT_ATTRIBUTES *attr, FILE_BASIC
@@ -3884,10 +3882,7 @@ NTSTATUS WINAPI NtQueryAttributesFile( const OBJECT_ATTRIBUTES *attr, FILE_BASIC
else if (!S_ISREG(st.st_mode) && !S_ISDIR(st.st_mode))
status = STATUS_INVALID_INFO_CLASS;
else
@ -72,7 +72,7 @@ index 496c92265e9..6f3772d20be 100644
status = fill_file_info( &st, attributes, info, FileBasicInformation );
- if (is_hidden_file( attr->ObjectName )) info->FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
- }
RtlFreeAnsiString( &unix_name );
RtlFreeHeap( GetProcessHeap(), 0, unix_name );
}
else WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), status );
--

View File

@ -0,0 +1,57 @@
From 835c102cf1c8edf8216b12ea98846cb1e3b40219 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 29 May 2015 19:57:22 +0200
Subject: [PATCH] ntdll: Don't translate Unix virtual disks to
FILE_DEVICE_VIRTUAL_DISK.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=36546
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
---
Despite my sign-off, I don't profess to hold an opinion on whether this bug
should be solved, but multiple users have requested this behaviour, and it
seems not wholly unreasonable. I'm submitting this patch so that the question
at least doesn't languish on bugzilla forever.
This patch was tested with FutureMark's SystemInfo version 4.28; it refuses to
install in a WINEPREFIX in tmpfs without this patch, and succeeds with it.
dlls/ntdll/unix/file.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index a0ad361fcbb..a28cfe9818f 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -6001,12 +6001,15 @@ static NTSTATUS get_device_info( int fd, FILE_FS_DEVICE_INFORMATION *info )
info->DeviceType = FILE_DEVICE_NETWORK_FILE_SYSTEM;
info->Characteristics |= FILE_REMOTE_DEVICE;
break;
- case 0x01021994: /* tmpfs */
- case 0x28cd3d45: /* cramfs */
case 0x1373: /* devfs */
case 0x9fa0: /* procfs */
info->DeviceType = FILE_DEVICE_VIRTUAL_DISK;
break;
+ case 0x01021994: /* tmpfs */
+ case 0x28cd3d45: /* cramfs */
+ /* Don't map these to FILE_DEVICE_VIRTUAL_DISK by default. Virtual
+ * filesystems are rare on Windows, and some programs refuse to
+ * recognize them as valid. */
default:
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
break;
@@ -6050,8 +6053,9 @@ static NTSTATUS get_device_info( int fd, FILE_FS_DEVICE_INFORMATION *info )
info->Characteristics |= FILE_REMOVABLE_MEDIA;
break;
case DKC_MD:
- info->DeviceType = FILE_DEVICE_VIRTUAL_DISK;
- break;
+ /* Don't map these to FILE_DEVICE_VIRTUAL_DISK by default. Virtual
+ * filesystems are rare on Windows, and some programs refuse to
+ * recognize them as valid. */
default:
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
}
--
2.27.0

View File

@ -1,54 +0,0 @@
From 6cf9c37c1e5b2211a61e8d61f97d46f89d86d753 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Fri, 29 May 2015 19:57:22 +0200
Subject: [PATCH] ntdll: Return fake device type when systemroot is located on
virtual disk.
---
dlls/ntdll/unix/file.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index ca6899b50f5..4f35de4da97 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -6136,9 +6136,36 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, IO_STATUS_BLOCK *io
else
{
FILE_FS_DEVICE_INFORMATION *info = buffer;
+ ANSI_STRING unix_name;
if ((io->u.Status = get_device_info( fd, info )) == STATUS_SUCCESS)
+ {
io->Information = sizeof(*info);
+
+ /* Some MSI installers complain when the SystemRoot is located
+ * on a virtual disk. Fake return values for compatibility. */
+ if (info->DeviceType == FILE_DEVICE_VIRTUAL_DISK &&
+ user_shared_data->NtSystemRoot[1] == ':' &&
+ !server_get_unix_name( handle, &unix_name ))
+ {
+ UNICODE_STRING nt_name;
+ if (!unix_to_nt_file_name( &unix_name, &nt_name ))
+ {
+ WCHAR *buf = nt_name.Buffer;
+ if (nt_name.Length >= 6 * sizeof(WCHAR) &&
+ buf[0] == '\\' && buf[1] == '?' && buf[2] == '?' && buf[3] == '\\' &&
+ buf[4] == user_shared_data->NtSystemRoot[0] && buf[5] == ':')
+ {
+ WARN( "returning fake disk type for %s\n",
+ debugstr_wn(buf, nt_name.Length/sizeof(WCHAR)) );
+ info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
+ }
+ RtlFreeUnicodeString( &nt_name );
+ }
+ RtlFreeAnsiString( &unix_name );
+ }
+
+ }
}
break;
--
2.27.0

View File

@ -4,3 +4,5 @@ Fixes: [44948] Multiple apps (Spine (Mod starter for Gothic), MS Office 365 inst
# FIXME 2: patch 0019 needs to call RemoveDirectoryW() from kernelbase, but it's stuck in kernel32 for now...
# FIXME 3: RemoveDirectory() doesn't work anymore, I think.
Depends: ntdll-DOS_Attributes
# Someone needs to rewrite all of this string arithmetic.
Disabled: true

View File

@ -1,15 +1,15 @@
From 38833e0b211516ba54a68cb7e6f560c8caf952ff Mon Sep 17 00:00:00 2001
From 0d4ebc66e01e42acef9db63872d38abc789d83c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
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 | 132 +++++++++++++++++++++++++++++++++++++---
2 files changed, 147 insertions(+), 10 deletions(-)
dlls/ntdll/unix/file.c | 122 +++++++++++++++++++++++++++++++++++++++-
2 files changed, 145 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 9e65a1f6ddd..7b65152f7cf 100644
index 6164b0c4bde..6610edbd042 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 )
@ -63,30 +63,19 @@ index 9e65a1f6ddd..7b65152f7cf 100644
static void open_file_test(void)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index a7f22e83e12..b93c169f856 100644
index 3c4670e114c..6b0dbaa7b3d 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -3307,16 +3307,10 @@ static NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, ANSI_S
/******************************************************************************
- * nt_to_unix_file_name
- *
- * Convert a file name from NT namespace to Unix namespace.
- *
- * If disposition is not FILE_OPEN or FILE_OVERWRITE, the last path
- * element doesn't have to exist; in that case STATUS_NO_SUCH_FILE is
- * returned, but the unix name is still filled in properly.
+ * nt_to_unix_file_name_internal
@@ -3279,7 +3279,7 @@ 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 CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
- UINT disposition )
+static NTSTATUS nt_to_unix_file_name_internal( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
+ UINT disposition )
-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 )
{
static const WCHAR unixW[] = {'u','n','i','x'};
static const WCHAR pipeW[] = {'p','i','p','e'};
@@ -3430,6 +3424,126 @@ NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *u
@@ -3417,6 +3417,126 @@ NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, char *nam
return status;
}
@ -165,7 +154,7 @@ index a7f22e83e12..b93c169f856 100644
+ * 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 CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
+NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret,
+ UINT disposition )
+{
+ static const WCHAR systemrootW[] = {'\\','S','y','s','t','e','m','R','o','o','t','\\',0};

View File

@ -1,4 +1,4 @@
From 30bc9bbd5b1b413c7a574d5e9574f79a03b48d16 Mon Sep 17 00:00:00 2001
From c1b6bc02ee2534dc2b51d8184fb0ca6717c33cf3 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Sun, 28 May 2017 05:19:30 +0200
Subject: [PATCH] ntdll: Implement NtQueryVirtualMemory(MemorySectionName).
@ -8,42 +8,42 @@ Contains several improvements by Sebastian Lackner <sebastian@fds-team.de>.
---
dlls/ntdll/unix/file.c | 2 +-
dlls/ntdll/unix/unix_private.h | 1 +
dlls/ntdll/unix/virtual.c | 91 +++++++++++++++++++++++++++++++++-
dlls/ntdll/unix/virtual.c | 96 +++++++++++++++++++++++++++++++++-
dlls/psapi/tests/psapi_main.c | 8 +--
server/mapping.c | 29 +++++++++++
server/mapping.c | 29 ++++++++++
server/protocol.def | 9 ++++
6 files changed, 131 insertions(+), 9 deletions(-)
6 files changed, 136 insertions(+), 9 deletions(-)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index 551d0450584..49e807a5f24 100644
index 6b0dbaa7b3d..2ac7fcaae35 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -1767,7 +1767,7 @@ static NTSTATUS fill_file_info( const struct stat *st, ULONG attr, void *ptr,
}
-static NTSTATUS server_get_unix_name( HANDLE handle, ANSI_STRING *unix_name )
+NTSTATUS server_get_unix_name( HANDLE handle, ANSI_STRING *unix_name )
-static NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name )
+NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name )
{
data_size_t size = 1024;
NTSTATUS ret;
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index e14da3ff7ec..b9a96424b4c 100644
index 711a0bed2b7..466c59da75a 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -173,6 +173,7 @@ extern unsigned int server_queue_process_apc( HANDLE process, const apc_call_t *
@@ -170,6 +170,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, ANSI_STRING *unix_name ) DECLSPEC_HIDDEN;
+extern NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name ) DECLSPEC_HIDDEN;
extern void server_init_process(void) DECLSPEC_HIDDEN;
extern size_t server_init_thread( void *entry_point, BOOL *suspend ) DECLSPEC_HIDDEN;
extern int server_pipe( int fd[2] ) DECLSPEC_HIDDEN;
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index c49c60166c2..086943bdae8 100644
index cd1bd162a2a..570a8a3bf49 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -4011,6 +4011,93 @@ static NTSTATUS get_working_set_ex( HANDLE process, LPCVOID addr,
@@ -4013,6 +4013,98 @@ static NTSTATUS get_working_set_ex( HANDLE process, LPCVOID addr,
return STATUS_SUCCESS;
}
@ -53,7 +53,8 @@ index c49c60166c2..086943bdae8 100644
+ SIZE_T len, SIZE_T *res_len )
+{
+ UNICODE_STRING nt_name;
+ ANSI_STRING unix_name;
+ WCHAR *nt_nameW;
+ char *unix_name;
+ data_size_t size = 1024;
+ WCHAR *name = NULL;
+ NTSTATUS status;
@ -76,10 +77,14 @@ index c49c60166c2..086943bdae8 100644
+ NtClose( mapping );
+ if (!status)
+ {
+ status = wine_unix_to_nt_file_name( &unix_name, &nt_name );
+ RtlFreeAnsiString( &unix_name );
+ status = unix_to_nt_file_name( unix_name, &nt_nameW );
+ RtlFreeHeap( GetProcessHeap(), 0, unix_name );
+ }
+ if (!status)
+ {
+ RtlInitUnicodeString( &nt_name, nt_nameW );
+ goto found;
+ }
+ if (!status) goto found;
+ if (status == STATUS_OBJECT_TYPE_MISMATCH) status = STATUS_FILE_INVALID;
+ return status;
+ }
@ -137,7 +142,7 @@ index c49c60166c2..086943bdae8 100644
#define UNIMPLEMENTED_INFO_CLASS(c) \
case c: \
FIXME("(process=%p,addr=%p) Unimplemented information class: " #c "\n", process, addr); \
@@ -4035,8 +4122,10 @@ NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr,
@@ -4037,8 +4129,10 @@ NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr,
case MemoryWorkingSetExInformation:
return get_working_set_ex( process, addr, buffer, len, res_len );
@ -177,10 +182,10 @@ index da7524dd60a..bfe14231a9b 100644
}
diff --git a/server/mapping.c b/server/mapping.c
index 07c51c246d6..7f19a7572df 100644
index db0debe0af5..6e74f5b770f 100644
--- a/server/mapping.c
+++ b/server/mapping.c
@@ -1095,6 +1095,35 @@ DECL_HANDLER(unmap_view)
@@ -1099,6 +1099,35 @@ DECL_HANDLER(unmap_view)
if (view) free_memory_view( view );
}
@ -217,10 +222,10 @@ index 07c51c246d6..7f19a7572df 100644
DECL_HANDLER(get_mapping_committed_range)
{
diff --git a/server/protocol.def b/server/protocol.def
index 6416306c0a1..bdc1eeeb5c3 100644
index bd6841d8000..345e0966c14 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -1853,6 +1853,15 @@ enum char_info_mode
@@ -1756,6 +1756,15 @@ enum char_info_mode
@END

View File

@ -1,4 +1,4 @@
From 01031e9eb282bffce2449891e68eb9efeded1ee9 Mon Sep 17 00:00:00 2001
From bb973ee8d79d0a1117c437afe8d62f34b9d9d3c8 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 28 May 2017 11:17:26 +0200
Subject: [PATCH] ntdll: Resolve drive symlinks before returning section name.
@ -11,10 +11,10 @@ Subject: [PATCH] ntdll: Resolve drive symlinks before returning section name.
4 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index 551d0450584..65ddf0df4a2 100644
index 2ac7fcaae35..d39c98b2e49 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -3425,7 +3425,7 @@ static NTSTATUS nt_to_unix_file_name_internal( const UNICODE_STRING *nameW, ANSI
@@ -3418,7 +3418,7 @@ NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, char *nam
}
/* read the contents of an NT symlink object */
@ -24,7 +24,7 @@ index 551d0450584..65ddf0df4a2 100644
OBJECT_ATTRIBUTES attr;
UNICODE_STRING targetW;
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index e14da3ff7ec..5410248e8a7 100644
index 466c59da75a..884dff1e1b1 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -103,6 +103,7 @@ extern void CDECL get_initial_directory( UNICODE_STRING *dir ) DECLSPEC_HIDDEN;
@ -36,7 +36,7 @@ index e14da3ff7ec..5410248e8a7 100644
const LARGE_INTEGER *offset_ptr, SIZE_T *size_ptr, ULONG alloc_type,
ULONG protect, pe_image_info_t *image_info ) DECLSPEC_HIDDEN;
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index 1515963b9c7..5cee0da5d24 100644
index 570a8a3bf49..c040adfaf23 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -188,6 +188,8 @@ static BYTE **pages_vprot;
@ -48,14 +48,15 @@ index 1515963b9c7..5cee0da5d24 100644
static struct file_view *view_block_start, *view_block_end, *next_free_view;
#ifdef _WIN64
static const size_t view_block_size = 0x200000;
@@ -4016,12 +4018,15 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
@@ -4018,13 +4020,16 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
MEMORY_SECTION_NAME *info,
SIZE_T len, SIZE_T *res_len )
{
+ static const WCHAR dosprefixW[] = {'\\','?','?','\\'};
+ WCHAR symlinkW[MAX_DIR_ENTRY_LEN] = {0};
UNICODE_STRING nt_name;
ANSI_STRING unix_name;
WCHAR *nt_nameW;
char *unix_name;
data_size_t size = 1024;
- WCHAR *name = NULL;
+ WCHAR *ptr, *name = NULL;
@ -65,7 +66,7 @@ index 1515963b9c7..5cee0da5d24 100644
if (!addr || !info || !res_len) return STATUS_INVALID_PARAMETER;
@@ -4080,14 +4085,34 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
@@ -4087,14 +4092,34 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
}
found:

View File

@ -1,4 +1,4 @@
From addb612dfe7429c29adeb31144976713cb0756b4 Mon Sep 17 00:00:00 2001
From 56459884534d5b0acb6a410d2ba04f6f3aa15ded Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 27 Jul 2014 03:35:42 +0200
Subject: [PATCH] ntdll: Allow special characters in pipe names.
@ -38,18 +38,18 @@ index 3c7ca06a045..453dcc80b7b 100644
}
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index 61340a0e010..a7f22e83e12 100644
index a0ad361fcbb..3c4670e114c 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -3319,6 +3319,7 @@ NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *u
UINT disposition )
@@ -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 )
{
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;
@@ -3329,6 +3330,7 @@ NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *u
@@ -3292,6 +3293,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 61340a0e010..a7f22e83e12 100644
name = nameW->Buffer;
name_len = nameW->Length / sizeof(WCHAR);
@@ -3362,13 +3364,17 @@ NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *u
@@ -3325,13 +3327,17 @@ NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret
name += prefix_len;
name_len -= prefix_len;

View File

@ -1,5 +0,0 @@
Fixes: Return correct thread creation time in SystemProcessInformation
Fixes: Fill process virtual memory counters in NtQuerySystemInformation
# Patch 6 is broken. We should really be returning this information from the
# server, but that needs a bit more work.
Disabled: true

View File

@ -1,105 +0,0 @@
From ee29bbfa7e10de295db39ab6b89f2175d00692c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 9 Mar 2017 22:56:45 +0100
Subject: [PATCH] ntdll: Fill process virtual memory counters in
NtQuerySystemInformation.
FIXME: fill_VM_COUNTERS now uses a different method ... which one is better?
---
dlls/ntdll/nt.c | 3 +++
dlls/ntdll/ntdll_misc.h | 1 +
dlls/ntdll/process.c | 2 +-
dlls/ntdll/thread.c | 36 ++++++++++++++++++++++++++++++++++++
4 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index cbb7937631d..bb078c1aa21 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -2686,8 +2686,11 @@ NTSTATUS WINAPI NtQuerySystemInformation(
/* spi->ti will be set later on */
if (reply->unix_pid != -1)
+ {
read_process_time(reply->unix_pid, -1, clk_tck,
&spi->KernelTime, &spi->UserTime);
+ read_process_memory_stats(reply->unix_pid, &spi->vmCounters);
+ }
unix_pid = reply->unix_pid;
}
len += procstructlen;
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 6e77694d87b..d725a678246 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -248,6 +248,7 @@ void WINAPI LdrInitializeThunk(CONTEXT*,void**,ULONG_PTR,ULONG_PTR);
/* process / thread time */
extern BOOL read_process_time(int unix_pid, int unix_tid, unsigned long clk_tck,
LARGE_INTEGER *kernel, LARGE_INTEGER *user) DECLSPEC_HIDDEN;
+extern BOOL read_process_memory_stats(int unix_pid, VM_COUNTERS *pvmi) DECLSPEC_HIDDEN;
/* string functions */
int __cdecl NTDLL_tolower( int c );
diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c
index 35937ce6026..b4f2dbc8160 100644
--- a/dlls/ntdll/process.c
+++ b/dlls/ntdll/process.c
@@ -192,7 +192,7 @@ static void fill_VM_COUNTERS(VM_COUNTERS* pvmi)
static void fill_VM_COUNTERS(VM_COUNTERS* pvmi)
{
- /* FIXME : real data */
+ read_process_memory_stats(getpid(), pvmi);
}
#endif
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
index 14198d77b7b..8ae8251f975 100644
--- a/dlls/ntdll/thread.c
+++ b/dlls/ntdll/thread.c
@@ -381,6 +381,42 @@ NTSTATUS WINAPI NtCreateThreadEx( HANDLE *handle_ptr, ACCESS_MASK access, OBJECT
flags, zero_bits, stack_commit, stack_reserve, attr_list );
}
+BOOL read_process_memory_stats(int unix_pid, VM_COUNTERS *pvmi)
+{
+ BOOL ret = FALSE;
+#ifdef __linux__
+ unsigned long size, resident, shared, trs, drs, lrs, dt;
+ char buf[512];
+ FILE *fp;
+
+ sprintf( buf, "/proc/%u/statm", unix_pid );
+ if ((fp = fopen( buf, "r" )))
+ {
+ if (fscanf( fp, "%lu %lu %lu %lu %lu %lu %lu",
+ &size, &resident, &shared, &trs, &drs, &lrs, &dt ) == 7)
+ {
+ pvmi->VirtualSize = size * page_size;
+ pvmi->WorkingSetSize = resident * page_size;
+ pvmi->PrivatePageCount = size - shared;
+
+ /* these values are not available through /proc/pid/statm */
+ pvmi->PeakVirtualSize = pvmi->VirtualSize;
+ pvmi->PageFaultCount = 0;
+ pvmi->PeakWorkingSetSize = pvmi->WorkingSetSize;
+ pvmi->QuotaPagedPoolUsage = pvmi->VirtualSize;
+ pvmi->QuotaPeakPagedPoolUsage = pvmi->QuotaPagedPoolUsage;
+ pvmi->QuotaPeakNonPagedPoolUsage = 0;
+ pvmi->QuotaNonPagedPoolUsage = 0;
+ pvmi->PagefileUsage = 0;
+ pvmi->PeakPagefileUsage = 0;
+
+ ret = TRUE;
+ }
+ fclose( fp );
+ }
+#endif
+ return ret;
+}
/***********************************************************************
* RtlCreateUserThread (NTDLL.@)
--
2.26.2

View File

@ -1,23 +1,23 @@
From 73f255bdc5edef27f9a03b7e8917686490d3bf7a Mon Sep 17 00:00:00 2001
From 9d4e8c921196c2303812e3673b27f781218943aa Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 7 Mar 2015 06:20:55 +0100
Subject: [PATCH] nvcuda: Implement cuModuleLoad wrapper function.
---
dlls/nvcuda/nvcuda.c | 46 +++++++++++++++++++++++++++++++++++++++++
dlls/nvcuda/nvcuda.c | 22 ++++++++++++++++++++++
dlls/nvcuda/nvcuda.spec | 2 +-
include/cuda.h | 1 +
3 files changed, 48 insertions(+), 1 deletion(-)
3 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/dlls/nvcuda/nvcuda.c b/dlls/nvcuda/nvcuda.c
index e11a1d51a9d..14b695f3371 100644
index e11a1d51a9d..7c296cb6861 100644
--- a/dlls/nvcuda/nvcuda.c
+++ b/dlls/nvcuda/nvcuda.c
@@ -29,6 +29,7 @@
#include "windef.h"
#include "winbase.h"
+#include "winternl.h"
+#include "winnls.h"
#include "wine/library.h"
#include "wine/debug.h"
#include "wine/list.h"
@ -37,38 +37,14 @@ index e11a1d51a9d..14b695f3371 100644
LOAD_FUNCPTR(cuModuleLoadData);
LOAD_FUNCPTR(cuModuleLoadDataEx);
LOAD_FUNCPTR(cuModuleLoadFatBinary);
@@ -1883,6 +1886,49 @@ CUresult WINAPI wine_cuModuleGetTexRef(CUtexref *pTexRef, CUmodule hmod, const c
@@ -1883,6 +1886,25 @@ CUresult WINAPI wine_cuModuleGetTexRef(CUtexref *pTexRef, CUmodule hmod, const c
return pcuModuleGetTexRef(pTexRef, hmod, name);
}
+/* FIXME: Should we pay attention to AreFileApisANSI() ? */
+static BOOL get_unix_path(ANSI_STRING *unix_name, const char *filename)
+{
+ UNICODE_STRING dospathW, ntpathW;
+ ANSI_STRING dospath;
+ NTSTATUS status;
+
+ RtlInitAnsiString(&dospath, filename);
+
+ if (RtlAnsiStringToUnicodeString(&dospathW, &dospath, TRUE))
+ return FALSE;
+
+ if (!RtlDosPathNameToNtPathName_U(dospathW.Buffer, &ntpathW, NULL, NULL))
+ {
+ RtlFreeUnicodeString(&dospathW);
+ return FALSE;
+ }
+
+ status = wine_nt_to_unix_file_name(&ntpathW, unix_name, FILE_OPEN);
+
+ RtlFreeUnicodeString(&ntpathW);
+ RtlFreeUnicodeString(&dospathW);
+ return !status;
+}
+
+CUresult WINAPI wine_cuModuleLoad(CUmodule *module, const char *fname)
+{
+ ANSI_STRING unix_name;
+ WCHAR filenameW[MAX_PATH];
+ char *unix_name;
+ CUresult ret;
+
+ TRACE("(%p, %s)\n", module, fname);
@ -76,11 +52,11 @@ index e11a1d51a9d..14b695f3371 100644
+ if (!fname)
+ return CUDA_ERROR_INVALID_VALUE;
+
+ if (!get_unix_path(&unix_name, fname))
+ return CUDA_ERROR_FILE_NOT_FOUND;
+ MultiByteToWideChar(CP_ACP, 0, fname, -1, filenameW, ARRAY_SIZE(filenameW));
+ unix_name = wine_get_unix_file_name( filenameW );
+
+ ret = pcuModuleLoad(module, unix_name.Buffer);
+ RtlFreeAnsiString(&unix_name);
+ ret = pcuModuleLoad(module, unix_name);
+ HeapFree(GetProcessHeap(), 0, unix_name);
+ return ret;
+}
+

View File

@ -1,19 +1,19 @@
From ecde4f4f994831bbeb1029d93e0b06f815c503b2 Mon Sep 17 00:00:00 2001
From 3519cb4a7b8bb9c9bbf3dacbd9e6766b48dd121b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Tue, 6 Jan 2015 05:16:36 +0100
Subject: nvcuvid: First implementation. (rev 2)
Subject: [PATCH] nvcuvid: First implementation. (rev 2)
Changes by Sebastian Lackner <sebastian@fds-team.de>:
* Convert structures properly where the Windows and Linux definition differs.
---
configure.ac | 1 +
dlls/nvcuvid/Makefile.in | 4 +
dlls/nvcuvid/nvcuvid.c | 537 ++++++++++++++++++++++++++++++++++++++
dlls/nvcuvid/nvcuvid.c | 513 ++++++++++++++++++++++++++++++++++++++
dlls/nvcuvid/nvcuvid.spec | 24 ++
include/Makefile.in | 2 +
include/cuviddec.h | 99 +++++++
include/cuviddec.h | 99 ++++++++
include/nvcuvid.h | 79 ++++++
7 files changed, 746 insertions(+)
7 files changed, 722 insertions(+)
create mode 100644 dlls/nvcuvid/Makefile.in
create mode 100644 dlls/nvcuvid/nvcuvid.c
create mode 100644 dlls/nvcuvid/nvcuvid.spec
@ -44,10 +44,10 @@ index 00000000000..2c2dc8ccf67
+ nvcuvid.c
diff --git a/dlls/nvcuvid/nvcuvid.c b/dlls/nvcuvid/nvcuvid.c
new file mode 100644
index 00000000000..2704bfa9a63
index 00000000000..a586c15eafb
--- /dev/null
+++ b/dlls/nvcuvid/nvcuvid.c
@@ -0,0 +1,537 @@
@@ -0,0 +1,513 @@
+/*
+ * Copyright (C) 2015 Michael Müller
+ *
@ -73,7 +73,7 @@ index 00000000000..2704bfa9a63
+
+#include "windef.h"
+#include "winbase.h"
+#include "winternl.h"
+#include "winnls.h"
+#include "wine/library.h"
+#include "wine/debug.h"
+#include "nvcuvid.h"
@ -320,36 +320,12 @@ index 00000000000..2704bfa9a63
+ return CUDA_SUCCESS;
+}
+
+/* FIXME: Should we pay attention to AreFileApisANSI() ? */
+static BOOL get_unix_path(ANSI_STRING *unix_name, const char *filename)
+{
+ UNICODE_STRING dospathW, ntpathW;
+ ANSI_STRING dospath;
+ NTSTATUS status;
+
+ RtlInitAnsiString(&dospath, filename);
+
+ if (RtlAnsiStringToUnicodeString(&dospathW, &dospath, TRUE))
+ return FALSE;
+
+ if (!RtlDosPathNameToNtPathName_U(dospathW.Buffer, &ntpathW, NULL, NULL))
+ {
+ RtlFreeUnicodeString(&dospathW);
+ return FALSE;
+ }
+
+ status = wine_nt_to_unix_file_name(&ntpathW, unix_name, FILE_OPEN);
+
+ RtlFreeUnicodeString(&ntpathW);
+ RtlFreeUnicodeString(&dospathW);
+ return !status;
+}
+
+CUresult WINAPI wine_cuvidCreateVideoSource(CUvideosource *pObj, const char *pszFileName, CUVIDSOURCEPARAMS *pParams)
+{
+ WCHAR filenameW[MAX_PATH];
+ struct fake_source *source;
+ CUVIDSOURCEPARAMS fake_params;
+ ANSI_STRING unix_name;
+ char *unix_name;
+ CUresult ret;
+
+ TRACE("(%p, %s, %p)\n", pObj, pszFileName, pParams);
@ -361,13 +337,13 @@ index 00000000000..2704bfa9a63
+ if (!pszFileName)
+ return CUDA_ERROR_UNKNOWN;
+
+ if (!get_unix_path(&unix_name, pszFileName))
+ return CUDA_ERROR_UNKNOWN;
+ MultiByteToWideChar(CP_ACP, 0, pszFileName, -1, filenameW, ARRAY_SIZE(filenameW));
+ unix_name = wine_get_unix_file_name( filenameW );
+
+ source = HeapAlloc(GetProcessHeap(), 0, sizeof(*source));
+ if (!source)
+ {
+ RtlFreeAnsiString(&unix_name);
+ HeapFree(GetProcessHeap(), 0, &unix_name);
+ return CUDA_ERROR_OUT_OF_MEMORY;
+ }
+
@ -388,8 +364,8 @@ index 00000000000..2704bfa9a63
+ source->orig_data = pParams->pUserData;
+ fake_params.pUserData = source;
+
+ ret = pcuvidCreateVideoSource((void *)&source->orig_source, unix_name.Buffer, &fake_params);
+ RtlFreeAnsiString(&unix_name);
+ ret = pcuvidCreateVideoSource((void *)&source->orig_source, unix_name, &fake_params);
+ HeapFree(GetProcessHeap(), 0, &unix_name);
+
+ if (ret)
+ {

View File

@ -52,7 +52,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "262e4ab9e0eeb126dde5cb4cba13fbf7f1d1cef0"
echo "18ae539c914a9b5a89f63d8cf9c2a21273eccc6c"
}
# Show version information
@ -177,7 +177,6 @@ patch_enable_all ()
enable_ntdll_Heap_Improvements="$1"
enable_ntdll_Hide_Wine_Exports="$1"
enable_ntdll_Interrupt_0x2e="$1"
enable_ntdll_Junction_Points="$1"
enable_ntdll_Manifest_Range="$1"
enable_ntdll_NtAccessCheck="$1"
enable_ntdll_NtDevicePath="$1"
@ -621,9 +620,6 @@ patch_enable ()
ntdll-Interrupt-0x2e)
enable_ntdll_Interrupt_0x2e="$2"
;;
ntdll-Junction_Points)
enable_ntdll_Junction_Points="$2"
;;
ntdll-Manifest_Range)
enable_ntdll_Manifest_Range="$2"
;;
@ -1575,13 +1571,6 @@ if test "$enable_server_Stored_ACLs" -eq 1; then
enable_server_File_Permissions=1
fi
if test "$enable_server_File_Permissions" -eq 1; then
if test "$enable_ntdll_Junction_Points" -gt 1; then
abort "Patchset ntdll-Junction_Points disabled, but server-File_Permissions depends on that."
fi
enable_ntdll_Junction_Points=1
fi
if test "$enable_server_Desktop_Refcount" -eq 1; then
if test "$enable_ws2_32_WSACleanup" -gt 1; then
abort "Patchset ws2_32-WSACleanup disabled, but server-Desktop_Refcount depends on that."
@ -1635,13 +1624,6 @@ if test "$enable_ntdll_NtDevicePath" -eq 1; then
enable_ntdll_Pipe_SpecialCharacters=1
fi
if test "$enable_ntdll_Junction_Points" -eq 1; then
if test "$enable_ntdll_DOS_Attributes" -gt 1; then
abort "Patchset ntdll-DOS_Attributes disabled, but ntdll-Junction_Points depends on that."
fi
enable_ntdll_DOS_Attributes=1
fi
if test "$enable_ntdll_Hide_Wine_Exports" -eq 1; then
if test "$enable_advapi32_Token_Integrity_Level" -gt 1; then
abort "Patchset advapi32-Token_Integrity_Level disabled, but ntdll-Hide_Wine_Exports depends on that."
@ -3518,9 +3500,9 @@ fi
# | * dlls/ntdll/unix/file.c
# |
if test "$enable_ntdll_DeviceType_Systemroot" -eq 1; then
patch_apply ntdll-DeviceType_Systemroot/0001-ntdll-Return-fake-device-type-when-systemroot-is-loc.patch
patch_apply ntdll-DeviceType_Systemroot/0001-ntdll-Don-t-translate-Unix-virtual-disks-to-FILE_DEV.patch
(
printf '%s\n' '+ { "Sebastian Lackner", "ntdll: Return fake device type when systemroot is located on virtual disk.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "ntdll: Don'\''t translate Unix virtual disks to FILE_DEVICE_VIRTUAL_DISK.", 1 },';
) >> "$patchlist"
fi
@ -3657,61 +3639,6 @@ if test "$enable_ntdll_Interrupt_0x2e" -eq 1; then
) >> "$patchlist"
fi
# Patchset ntdll-Junction_Points
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * ntdll-DOS_Attributes
# |
# | This patchset fixes the following Wine bugs:
# | * [#12401] NET Framework 2.0, 3.0, 4.0 installers and other apps that make use of GAC API for managed assembly
# | installation on NTFS filesystems need reparse point/junction API support
# | (FSCTL_SET_REPARSE_POINT/FSCTL_GET_REPARSE_POINT)
# | * [#44948] Multiple apps (Spine (Mod starter for Gothic), MS Office 365 installer) need CreateSymbolicLinkW implementation
# |
# | Modified files:
# | * configure.ac, dlls/kernel32/path.c, dlls/kernel32/tests/path.c, dlls/kernelbase/file.c, dlls/msvcp120/tests/msvcp120.c,
# | dlls/msvcp140/tests/msvcp140.c, dlls/ntdll/tests/file.c, dlls/ntdll/unix/file.c, include/Makefile.in, include/ntifs.h,
# | include/wine/port.h, include/winternl.h, libs/port/Makefile.in, libs/port/renameat2.c, server/fd.c
# |
if test "$enable_ntdll_Junction_Points" -eq 1; then
patch_apply ntdll-Junction_Points/0001-ntdll-Add-support-for-junction-point-creation.patch
patch_apply ntdll-Junction_Points/0002-ntdll-Add-support-for-reading-junction-points.patch
patch_apply ntdll-Junction_Points/0003-ntdll-Add-support-for-deleting-junction-points.patch
patch_apply ntdll-Junction_Points/0004-ntdll-Add-a-test-for-junction-point-advertisement.patch
patch_apply ntdll-Junction_Points/0005-kernel32-ntdll-Add-support-for-deleting-junction-poi.patch
patch_apply ntdll-Junction_Points/0007-ntdll-Add-support-for-absolute-symlink-creation.patch
patch_apply ntdll-Junction_Points/0008-ntdll-Add-support-for-reading-absolute-symlinks.patch
patch_apply ntdll-Junction_Points/0009-ntdll-Add-support-for-deleting-symlinks.patch
patch_apply ntdll-Junction_Points/0010-ntdll-Add-support-for-relative-symlink-creation.patch
patch_apply ntdll-Junction_Points/0011-ntdll-Add-support-for-reading-relative-symlinks.patch
patch_apply ntdll-Junction_Points/0012-ntdll-Add-support-for-file-symlinks.patch
patch_apply ntdll-Junction_Points/0013-ntdll-Allow-creation-of-dangling-reparse-points-to-n.patch
patch_apply ntdll-Junction_Points/0014-ntdll-Correctly-report-file-symbolic-links-as-files.patch
patch_apply ntdll-Junction_Points/0016-server-Properly-handle-file-symlink-deletion.patch
patch_apply ntdll-Junction_Points/0017-ntdll-Always-report-symbolic-links-as-containing-zer.patch
patch_apply ntdll-Junction_Points/0018-ntdll-Find-dangling-symlinks-quickly.patch
patch_apply ntdll-Junction_Points/0019-kernel32-Implement-CreateSymbolicLink-A-W-with-ntdll.patch
(
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for junction point creation.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading junction points.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for deleting junction points.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add a test for junction point advertisement.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "kernel32,ntdll: Add support for deleting junction points with RemoveDirectory.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for absolute symlink creation.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading absolute symlinks.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for deleting symlinks.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for relative symlink creation.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading relative symlinks.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for file symlinks.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Allow creation of dangling reparse points to non-existent paths.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Correctly report file symbolic links as files.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "server: Properly handle file symlink deletion.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Always report symbolic links as containing zero bytes.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Find dangling symlinks quickly.", 1 },';
printf '%s\n' '+ { "Erich E. Hoover", "kernel32: Implement CreateSymbolicLink[A|W] with ntdll reparse points.", 1 },';
) >> "$patchlist"
fi
# Patchset ntdll-Manifest_Range
# |
# | This patchset fixes the following Wine bugs:
@ -4367,9 +4294,6 @@ fi
# Patchset server-File_Permissions
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * ntdll-DOS_Attributes, ntdll-Junction_Points
# |
# | This patchset fixes the following Wine bugs:
# | * [#44691] Improve mapping of DACL to file permissions
# |
@ -4400,7 +4324,7 @@ fi
# Patchset server-Stored_ACLs
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * ntdll-DOS_Attributes, ntdll-Junction_Points, server-File_Permissions
# | * ntdll-DOS_Attributes, server-File_Permissions
# |
# | This patchset fixes the following Wine bugs:
# | * [#33576] Support for stored file ACLs
@ -4431,7 +4355,7 @@ fi
# Patchset server-Inherited_ACLs
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * ntdll-DOS_Attributes, ntdll-Junction_Points, server-File_Permissions, server-Stored_ACLs
# | * ntdll-DOS_Attributes, server-File_Permissions, server-Stored_ACLs
# |
# | Modified files:
# | * dlls/advapi32/tests/security.c, server/file.c

View File

@ -1,4 +1,4 @@
From 9ecf9653d3f4d564f000d4e0f7f96ae0cd3610b2 Mon Sep 17 00:00:00 2001
From b1dcc9759921e696a554c46d7aee2c4c29d3c7ae Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Fri, 3 Apr 2015 03:58:47 +0200
Subject: [PATCH] server: Allow to open files without any permission bits. (try
@ -13,7 +13,7 @@ Changes in v2:
2 files changed, 32 insertions(+), 20 deletions(-)
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index 1ec2e6bbb48..cc59210e609 100644
index 825f8451904..948c257cea2 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -3702,17 +3702,13 @@ static void test_CreateDirectoryA(void)
@ -65,10 +65,10 @@ index 1ec2e6bbb48..cc59210e609 100644
done:
diff --git a/server/fd.c b/server/fd.c
index d238c43cf1f..8292a0b82f2 100644
index e5e1fdbbf32..188a632575f 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -1825,6 +1825,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
@@ -1835,6 +1835,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
int root_fd = -1;
int rw_mode;
char *path;
@ -76,10 +76,10 @@ index d238c43cf1f..8292a0b82f2 100644
int created = (flags & O_CREAT);
if (((options & FILE_DELETE_ON_CLOSE) && !(access & DELETE)) ||
@@ -1891,10 +1892,28 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
fd->unix_fd = open( name, rw_mode | O_SYMLINK | (flags & ~O_TRUNC), *mode );
@@ -1894,10 +1895,28 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
if ((access & FILE_UNIX_WRITE_ACCESS) || (flags & O_CREAT))
fd->unix_fd = open( name, O_RDONLY | (flags & ~(O_TRUNC | O_CREAT | O_EXCL)), *mode );
}
#endif
+ else if (errno == EACCES)
+ {
+ /* try to change permissions temporarily to open a file descriptor */
@ -105,14 +105,14 @@ index d238c43cf1f..8292a0b82f2 100644
goto error;
}
}
@@ -1909,6 +1928,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
@@ -1912,6 +1931,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
closed_fd->unix_fd = fd->unix_fd;
closed_fd->unlink = 0;
closed_fd->unix_name = fd->unix_name;
+ if (do_chmod) chmod( name, *mode );
lstat( fd->unix_name, &st );
fstat( fd->unix_fd, &st );
*mode = st.st_mode;
--
2.25.1
2.27.0

View File

@ -1,3 +1,2 @@
Fixes: Allow to open files/directories without any access rights in order to query attributes
Fixes: [44691] Improve mapping of DACL to file permissions
Depends: ntdll-Junction_Points

View File

@ -1 +1 @@
262e4ab9e0eeb126dde5cb4cba13fbf7f1d1cef0
18ae539c914a9b5a89f63d8cf9c2a21273eccc6c