Rebase against 12c3177ed5cae39de8a9f9111a1cb450296cc8e6.

This commit is contained in:
Zebediah Figura 2020-04-01 18:08:55 -05:00
parent 001ea51fb5
commit 755d1ca559
12 changed files with 172 additions and 235 deletions

View File

@ -1,7 +1,7 @@
From d101cc56af09470319046d570891e861d0a6154a Mon Sep 17 00:00:00 2001
From 2aba7f5090f92b609f6d2763603dbeb761f9c65a Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Thu, 7 Jun 2018 21:07:51 -0500
Subject: [PATCH 06/83] ntdll: Close esync objects.
Subject: [PATCH] ntdll: Close esync objects.
---
dlls/ntdll/esync.c | 19 +++++++++++++++++++
@ -10,7 +10,7 @@ Subject: [PATCH 06/83] ntdll: Close esync objects.
3 files changed, 24 insertions(+)
diff --git a/dlls/ntdll/esync.c b/dlls/ntdll/esync.c
index bca95b9b2..f7a427425 100644
index bca95b9b2d9..f7a427425b7 100644
--- a/dlls/ntdll/esync.c
+++ b/dlls/ntdll/esync.c
@@ -136,6 +136,25 @@ static void *esync_get_object( HANDLE handle )
@ -40,7 +40,7 @@ index bca95b9b2..f7a427425 100644
static NTSTATUS create_esync(int *fd, HANDLE *handle, ACCESS_MASK access,
const OBJECT_ATTRIBUTES *attr, int initval, int flags)
diff --git a/dlls/ntdll/esync.h b/dlls/ntdll/esync.h
index fec0b68e8..a22618de8 100644
index fec0b68e8d5..a22618de849 100644
--- a/dlls/ntdll/esync.h
+++ b/dlls/ntdll/esync.h
@@ -19,6 +19,7 @@
@ -52,7 +52,7 @@ index fec0b68e8..a22618de8 100644
extern NTSTATUS esync_create_semaphore(HANDLE *handle, ACCESS_MASK access,
const OBJECT_ATTRIBUTES *attr, LONG initial, LONG max) DECLSPEC_HIDDEN;
diff --git a/dlls/ntdll/om.c b/dlls/ntdll/om.c
index b9fe302b1..ef2cb8b94 100644
index f8f0760de70..b8d73a982b2 100644
--- a/dlls/ntdll/om.c
+++ b/dlls/ntdll/om.c
@@ -34,6 +34,7 @@
@ -62,8 +62,8 @@ index b9fe302b1..ef2cb8b94 100644
+#include "esync.h"
#include "wine/server.h"
#include "wine/exception.h"
#include "wine/unicode.h"
@@ -446,6 +447,9 @@ NTSTATUS close_handle( HANDLE handle )
@@ -387,6 +388,9 @@ NTSTATUS close_handle( HANDLE handle )
NTSTATUS ret;
int fd = server_remove_fd_from_cache( handle );
@ -74,5 +74,5 @@ index b9fe302b1..ef2cb8b94 100644
{
req->handle = wine_server_obj_handle( handle );
--
2.20.1
2.26.0

View File

@ -1,4 +1,4 @@
From 4e37abb696f99ea4727a4fb6bb31f5543f2a7b86 Mon Sep 17 00:00:00 2001
From 5633db2ec821eac01998f6bb1012372865f3db40 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Mon, 3 Apr 2017 05:30:27 +0200
Subject: [PATCH] ntdll: Implement HashLinks field in LDR module data.
@ -10,7 +10,7 @@ Subject: [PATCH] ntdll: Implement HashLinks field in LDR module data.
3 files changed, 145 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index 35c6b3c09..17d742daa 100644
index 35c6b3c0996..17d742daaa7 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -30,6 +30,7 @@
@ -115,10 +115,10 @@ index 35c6b3c09..17d742daa 100644
test_Loader();
}
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 85eb29768..644f599a7 100644
index b946416734a..5037318eb98 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -115,6 +115,9 @@ static const char * const reason_names[] =
@@ -114,6 +114,9 @@ static const char * const reason_names[] =
static const WCHAR dllW[] = {'.','d','l','l',0};
@ -128,7 +128,7 @@ index 85eb29768..644f599a7 100644
/* internal representation of 32bit modules. per process. */
typedef struct _wine_modref
{
@@ -458,6 +461,52 @@ static void call_ldr_notifications( ULONG reason, LDR_MODULE *module )
@@ -451,6 +454,52 @@ static void call_ldr_notifications( ULONG reason, LDR_MODULE *module )
}
}
@ -146,15 +146,15 @@ index 85eb29768..644f599a7 100644
+ if (version >= 0x0602)
+ {
+ for (; *basename; basename++)
+ hash = hash * 65599 + toupperW(*basename);
+ hash = hash * 65599 + towupper(*basename);
+ }
+ else if (version == 0x0601)
+ {
+ for (; *basename; basename++)
+ hash = hash + 65599 * toupperW(*basename);
+ hash = hash + 65599 * towupper(*basename);
+ }
+ else
+ hash = toupperW(basename[0]) - 'A';
+ hash = towupper(basename[0]) - 'A';
+
+ return hash & (HASH_MAP_SIZE-1);
+}
@ -181,7 +181,7 @@ index 85eb29768..644f599a7 100644
/*************************************************************************
* get_modref
*
@@ -1205,7 +1254,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, const UNICODE_STRING *nt_name
@@ -1201,7 +1250,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, const UNICODE_STRING *nt_name
&wm->ldr.InLoadOrderModuleList);
InsertTailList(&NtCurrentTeb()->Peb->LdrData->InMemoryOrderModuleList,
&wm->ldr.InMemoryOrderModuleList);
@ -194,7 +194,7 @@ index 85eb29768..644f599a7 100644
if (!(nt->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NX_COMPAT))
{
@@ -1860,6 +1914,7 @@ static void load_builtin_callback( void *module, const char *filename )
@@ -1857,6 +1911,7 @@ static void load_builtin_callback( void *module, const char *filename )
/* the module has only be inserted in the load & memory order lists */
RemoveEntryList(&wm->ldr.InLoadOrderModuleList);
RemoveEntryList(&wm->ldr.InMemoryOrderModuleList);
@ -202,7 +202,7 @@ index 85eb29768..644f599a7 100644
/* FIXME: free the modref */
builtin_load_info->status = STATUS_DLL_NOT_FOUND;
return;
@@ -2383,6 +2438,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, const UNICODE_STRING *nt_nam
@@ -2380,6 +2435,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, const UNICODE_STRING *nt_nam
/* the module has only be inserted in the load & memory order lists */
RemoveEntryList(&wm->ldr.InLoadOrderModuleList);
RemoveEntryList(&wm->ldr.InMemoryOrderModuleList);
@ -210,7 +210,7 @@ index 85eb29768..644f599a7 100644
/* FIXME: there are several more dangling references
* left. Including dlls loaded by this dll before the
@@ -3569,6 +3625,7 @@ static void free_modref( WINE_MODREF *wm )
@@ -3568,6 +3624,7 @@ static void free_modref( WINE_MODREF *wm )
{
RemoveEntryList(&wm->ldr.InLoadOrderModuleList);
RemoveEntryList(&wm->ldr.InMemoryOrderModuleList);
@ -218,7 +218,7 @@ index 85eb29768..644f599a7 100644
if (wm->ldr.InInitializationOrderModuleList.Flink)
RemoveEntryList(&wm->ldr.InInitializationOrderModuleList);
@@ -4246,6 +4303,7 @@ void __wine_process_init(void)
@@ -4245,6 +4302,7 @@ void __wine_process_init(void)
SIZE_T info_size;
TEB *teb = thread_init();
PEB *peb = teb->Peb;
@ -226,7 +226,7 @@ index 85eb29768..644f599a7 100644
/* setup the server connection */
server_init_process();
@@ -4267,6 +4325,10 @@ void __wine_process_init(void)
@@ -4266,6 +4324,10 @@ void __wine_process_init(void)
load_global_options();
version_init();
@ -237,7 +237,7 @@ index 85eb29768..644f599a7 100644
/* setup the load callback and create ntdll modref */
wine_dll_set_callback( load_builtin_callback );
@@ -4339,5 +4401,8 @@ void __wine_process_init(void)
@@ -4338,5 +4400,8 @@ void __wine_process_init(void)
teb->Tib.StackLimit = stack.StackLimit;
teb->DeallocationStack = stack.DeallocationStack;
@ -247,10 +247,10 @@ index 85eb29768..644f599a7 100644
server_init_process_done();
}
diff --git a/include/winternl.h b/include/winternl.h
index 02a55c1e2..837a08eb7 100644
index b9fac4bfca3..6ec99aab8fd 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -2266,8 +2266,8 @@ typedef struct _LDR_MODULE
@@ -2268,8 +2268,8 @@ typedef struct _LDR_MODULE
ULONG Flags;
SHORT LoadCount;
SHORT TlsIndex;
@ -260,7 +260,7 @@ index 02a55c1e2..837a08eb7 100644
ULONG TimeDateStamp;
HANDLE ActivationContext;
PVOID PatchInformation;
@@ -2277,6 +2277,9 @@ typedef struct _LDR_MODULE
@@ -2279,6 +2279,9 @@ typedef struct _LDR_MODULE
PVOID ContextInformation;
ULONG_PTR OriginalBase;
LARGE_INTEGER LoadTime;
@ -271,5 +271,5 @@ index 02a55c1e2..837a08eb7 100644
typedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA
--
2.25.0
2.26.0

View File

@ -1,18 +1,18 @@
From ed78d7dd56fe29c5a310dc228576ce683730727a Mon Sep 17 00:00:00 2001
From 934a7712600b45fa584386b4ada2a73af88ee072 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: ntdll: Implement opening files through nt device paths.
---
dlls/ntdll/directory.c | 134 ++++++++++++++++++++++++++++++++++++++++++++----
dlls/ntdll/tests/file.c | 25 ++++++++-
2 files changed, 149 insertions(+), 10 deletions(-)
dlls/ntdll/directory.c | 132 +++++++++++++++++++++++++++++++++++++---
dlls/ntdll/tests/file.c | 25 +++++++-
2 files changed, 147 insertions(+), 10 deletions(-)
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index 32699fe3cc4..97b42398bb0 100644
index c6249dd8658..242dbd27b2f 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -2811,16 +2811,10 @@ NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, ANSI_STRING *
@@ -2732,16 +2732,10 @@ NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, ANSI_STRING *
/******************************************************************************
@ -32,7 +32,7 @@ index 32699fe3cc4..97b42398bb0 100644
{
static const WCHAR unixW[] = {'u','n','i','x'};
static const WCHAR pipeW[] = {'p','i','p','e'};
@@ -2937,6 +2931,128 @@ NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRI
@@ -2857,6 +2851,126 @@ NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRI
return status;
}
@ -90,7 +90,7 @@ index 32699fe3cc4..97b42398bb0 100644
+ while (!NtQueryDirectoryObject( handle, info, sizeof(data), TRUE, FALSE, &ctx, NULL ))
+ {
+ if (read_nt_symlink( handle, &info->ObjectName, symlinkW, MAX_DIR_ENTRY_LEN )) continue;
+ if (wcslen( symlinkW ) != length || memicmpW( symlinkW, name, length )) continue;
+ if (wcsnicmp( symlinkW, name, length )) continue;
+ if (info->ObjectName.Length != 2 * sizeof(WCHAR) || info->ObjectName.Buffer[1] != ':') continue;
+
+ *device_ret = info->ObjectName.Buffer[0];
@ -114,24 +114,22 @@ index 32699fe3cc4..97b42398bb0 100644
+NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
+ UINT disposition, BOOLEAN check_case )
+{
+ static const WCHAR systemrootW[] = {'\\','S','y','s','t','e','m','R','o','o','t','\\'};
+ static const WCHAR systemrootW[] = {'\\','S','y','s','t','e','m','R','o','o','t','\\',0};
+ static const WCHAR dosprefixW[] = {'\\','?','?','\\'};
+ static const WCHAR deviceW[] = {'\\','D','e','v','i','c','e','\\'};
+ static const WCHAR deviceW[] = {'\\','D','e','v','i','c','e','\\',0};
+ WCHAR *name, *ptr, *prefix, buffer[3] = {'c',':',0};
+ UNICODE_STRING dospathW;
+ size_t offset, name_len;
+ NTSTATUS status;
+
+ if (nameW->Length >= sizeof(deviceW) &&
+ !memicmpW( nameW->Buffer, deviceW, sizeof(deviceW) / sizeof(WCHAR) ))
+ if (!wcsnicmp( nameW->Buffer, deviceW, nameW->Length / sizeof(WCHAR) ))
+ {
+ offset = sizeof(deviceW) / sizeof(WCHAR);
+ while (offset * sizeof(WCHAR) < nameW->Length && nameW->Buffer[ offset ] != '\\') offset++;
+ if ((status = nt_to_dos_device( nameW->Buffer, offset, buffer ))) return status;
+ prefix = buffer;
+ }
+ else if (nameW->Length >= sizeof(systemrootW) &&
+ !memicmpW( nameW->Buffer, systemrootW, sizeof(systemrootW) / sizeof(WCHAR) ))
+ else if (!wcsnicmp( nameW->Buffer, systemrootW, nameW->Length / sizeof(WCHAR) ))
+ {
+ offset = (sizeof(systemrootW) - 1) / sizeof(WCHAR);
+ prefix = user_shared_data->NtSystemRoot;
@ -162,10 +160,10 @@ index 32699fe3cc4..97b42398bb0 100644
/******************************************************************
* RtlWow64EnableFsRedirection (NTDLL.@)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 9de9009b10e..1751865a682 100644
index 546795456a8..709698209d8 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -159,18 +159,22 @@ static void WINAPI apc( void *arg, IO_STATUS_BLOCK *iosb, ULONG reserved )
@@ -135,18 +135,22 @@ static void WINAPI apc( void *arg, IO_STATUS_BLOCK *iosb, ULONG reserved )
static void create_file_test(void)
{
@ -189,7 +187,7 @@ index 9de9009b10e..1751865a682 100644
OBJECT_ATTRIBUTES attr;
IO_STATUS_BLOCK io;
UNICODE_STRING nameW;
@@ -351,6 +355,25 @@ static void create_file_test(void)
@@ -327,6 +331,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 );
@ -216,5 +214,5 @@ index 9de9009b10e..1751865a682 100644
static void open_file_test(void)
--
2.12.2
2.26.0

View File

@ -1,4 +1,4 @@
From c2736168d1010e311233bfc078b75bfcd68b959d Mon Sep 17 00:00:00 2001
From f39b7dba77e8991bc586b8102ee232842daa5c91 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.
@ -6,15 +6,15 @@ Subject: [PATCH] ntdll: Resolve drive symlinks before returning section name.
---
dlls/ntdll/directory.c | 2 +-
dlls/ntdll/ntdll_misc.h | 1 +
dlls/ntdll/virtual.c | 38 +++++++++++++++++++++++++++++------
dlls/ntdll/virtual.c | 37 +++++++++++++++++++++++++++++------
dlls/psapi/tests/psapi_main.c | 6 +-----
4 files changed, 35 insertions(+), 12 deletions(-)
4 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index 6ea95037153..725c002ab62 100644
index 242dbd27b2f..fe8b896682d 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -2875,7 +2875,7 @@ static NTSTATUS nt_to_unix_file_name_internal( const UNICODE_STRING *nameW, ANSI
@@ -2852,7 +2852,7 @@ static NTSTATUS nt_to_unix_file_name_internal( const UNICODE_STRING *nameW, ANSI
}
/* read the contents of an NT symlink object */
@ -24,10 +24,10 @@ index 6ea95037153..725c002ab62 100644
OBJECT_ATTRIBUTES attr;
UNICODE_STRING targetW;
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 59393e3a414..1b2b4e701bb 100644
index a5fe98c8d85..93fd8a9354b 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -171,6 +171,7 @@ extern NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, ANSI_S
@@ -174,6 +174,7 @@ extern NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, ANSI_S
/* virtual memory */
extern NTSTATUS virtual_alloc_aligned( PVOID *ret, unsigned short zero_bits_64, SIZE_T *size_ptr,
ULONG type, ULONG protect, ULONG alignment ) DECLSPEC_HIDDEN;
@ -36,18 +36,10 @@ index 59393e3a414..1b2b4e701bb 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/virtual.c b/dlls/ntdll/virtual.c
index 966b2a4c386..26963020c1b 100644
index f49127c3e85..46c070561b0 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -56,6 +56,7 @@
#include "wine/library.h"
#include "wine/server.h"
#include "wine/exception.h"
+#include "wine/unicode.h"
#include "wine/rbtree.h"
#include "wine/debug.h"
#include "ntdll_misc.h"
@@ -163,6 +164,8 @@ static BYTE **pages_vprot;
@@ -177,6 +177,8 @@ static BYTE **pages_vprot;
static BYTE *pages_vprot;
#endif
@ -56,7 +48,7 @@ index 966b2a4c386..26963020c1b 100644
static struct file_view *view_block_start, *view_block_end, *next_free_view;
static const size_t view_block_size = 0x100000;
static void *preload_reserve_start;
@@ -3075,12 +3078,15 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
@@ -3197,12 +3199,15 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
MEMORY_SECTION_NAME *info,
SIZE_T len, SIZE_T *res_len )
{
@ -73,7 +65,7 @@ index 966b2a4c386..26963020c1b 100644
if (!addr || !info || !res_len) return STATUS_INVALID_PARAMETER;
@@ -3139,14 +3145,34 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
@@ -3261,14 +3266,34 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
}
found:
@ -92,13 +84,13 @@ index 966b2a4c386..26963020c1b 100644
+ }
+ }
+
+ *res_len = sizeof(MEMORY_SECTION_NAME) + strlenW(symlinkW) * sizeof(WCHAR) +
+ *res_len = sizeof(MEMORY_SECTION_NAME) + wcslen(symlinkW) * sizeof(WCHAR) +
+ nt_name.Length - offset * sizeof(WCHAR) + sizeof(WCHAR);
if (len >= *res_len)
{
- info->SectionFileName.Length = nt_name.Length;
- info->SectionFileName.MaximumLength = nt_name.Length + sizeof(WCHAR);
+ info->SectionFileName.Length = strlenW(symlinkW) * sizeof(WCHAR) +
+ info->SectionFileName.Length = wcslen(symlinkW) * sizeof(WCHAR) +
+ nt_name.Length - offset * sizeof(WCHAR);
+ info->SectionFileName.MaximumLength = info->SectionFileName.Length + sizeof(WCHAR);
info->SectionFileName.Buffer = (WCHAR *)(info + 1);
@ -106,18 +98,18 @@ index 966b2a4c386..26963020c1b 100644
- info->SectionFileName.Buffer[ nt_name.Length / sizeof(WCHAR) ] = 0;
+
+ ptr = (WCHAR *)(info + 1);
+ strcpyW( ptr, symlinkW );
+ ptr += strlenW(symlinkW);
+ wcscpy( ptr, symlinkW );
+ ptr += wcslen(symlinkW);
+ memcpy( ptr, nt_name.Buffer + offset, nt_name.Length - offset * sizeof(WCHAR) );
+ ptr[ nt_name.Length / sizeof(WCHAR) - offset ] = 0;
}
else
status = (len < sizeof(MEMORY_SECTION_NAME)) ? STATUS_INFO_LENGTH_MISMATCH : STATUS_BUFFER_OVERFLOW;
diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c
index 9143fa79e7d..80636eb74a8 100644
index f6a7b69eca0..a8263a2f44b 100644
--- a/dlls/psapi/tests/psapi_main.c
+++ b/dlls/psapi/tests/psapi_main.c
@@ -489,7 +489,6 @@ static void test_GetMappedFileName(void)
@@ -476,7 +476,6 @@ static void test_GetMappedFileName(void)
ret = GetMappedFileNameA(GetCurrentProcess(), base, map_name, sizeof(map_name));
ok(ret, "GetMappedFileName error %d\n", GetLastError());
ok(ret > strlen(device_name), "map_name should be longer than device_name\n");
@ -125,7 +117,7 @@ index 9143fa79e7d..80636eb74a8 100644
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);
@@ -502,7 +501,6 @@ todo_wine {
@@ -489,7 +488,6 @@ 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);
@ -133,7 +125,7 @@ index 9143fa79e7d..80636eb74a8 100644
ok(memcmp(map_name, device_name, strlen(device_name)) == 0, "map name does not start with a device name: %s\n", map_name);
}
@@ -515,7 +513,6 @@ todo_wine
@@ -502,7 +500,6 @@ 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);
@ -141,7 +133,7 @@ index 9143fa79e7d..80636eb74a8 100644
ok(memcmp(map_name, device_name, strlen(device_name)) == 0, "map name does not start with a device name: %s\n", map_name);
}
@@ -523,7 +520,6 @@ todo_wine
@@ -510,7 +507,6 @@ todo_wine
ret = GetMappedFileNameA(GetCurrentProcess(), base + 0x2000, map_name, sizeof(map_name));
ok(ret, "GetMappedFileName error %d\n", GetLastError());
ok(ret > strlen(device_name), "map_name should be longer than device_name\n");
@ -149,7 +141,7 @@ index 9143fa79e7d..80636eb74a8 100644
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);
@@ -605,7 +601,7 @@ static void test_GetProcessImageFileName(void)
@@ -592,7 +588,7 @@ static void test_GetProcessImageFileName(void)
{
/* Windows returns 2*strlen-1 */
ok(ret >= strlen(szImgPath), "szImgPath=\"%s\" ret=%d\n", szImgPath, ret);
@ -159,5 +151,5 @@ index 9143fa79e7d..80636eb74a8 100644
SetLastError(0xdeadbeef);
--
2.17.1
2.26.0

View File

@ -1,18 +1,17 @@
From d1dca9874d914f25f3257c850275a14c3835a7e9 Mon Sep 17 00:00:00 2001
From 72ace2e57404a068679a703268c505c5f5ac3b12 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Thu, 28 Apr 2016 18:14:36 +0800
Subject: [PATCH] ntdll: Implement NtSetLdtEntries.
---
dlls/kernel32/tests/thread.c | 79 ++++++++++++++++++++++++++++++++++++
dlls/ntdll/nt.c | 28 ++++++++++++-
2 files changed, 106 insertions(+), 1 deletion(-)
1 file changed, 79 insertions(+)
diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c
index 180eed82419..5e9d51c24cd 100644
index b6a65a4207c..70b22367e18 100644
--- a/dlls/kernel32/tests/thread.c
+++ b/dlls/kernel32/tests/thread.c
@@ -107,6 +107,7 @@ static BOOL (WINAPI *pSetThreadGroupAffinity)(HANDLE,const GROUP_AFFINITY*,GROUP
@@ -99,6 +99,7 @@ static BOOL (WINAPI *pSetThreadGroupAffinity)(HANDLE,const GROUP_AFFINITY*,GROUP
static NTSTATUS (WINAPI *pNtSetInformationThread)(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
static HRESULT (WINAPI *pSetThreadDescription)(HANDLE,const WCHAR *);
static HRESULT (WINAPI *pGetThreadDescription)(HANDLE,WCHAR **);
@ -20,8 +19,8 @@ index 180eed82419..5e9d51c24cd 100644
static HANDLE create_target_process(const char *arg)
{
@@ -1223,6 +1224,82 @@ static void test_GetThreadSelectorEntry(void)
ok(entry.HighWord.Bits.Granularity == 0, "expected 0, got %u\n", entry.HighWord.Bits.Granularity);
@@ -1262,6 +1263,82 @@ static void test_GetThreadSelectorEntry(void)
ok(entry.HighWord.Bits.Granularity == 1, "expected 1, got %u\n", entry.HighWord.Bits.Granularity);
}
+static void test_NtSetLdtEntries(void)
@ -103,7 +102,7 @@ index 180eed82419..5e9d51c24cd 100644
#endif /* __i386__ */
static HANDLE finish_event;
@@ -2291,6 +2368,7 @@ static void init_funcs(void)
@@ -2324,6 +2401,7 @@ static void init_funcs(void)
X(NtQueryInformationThread);
X(RtlGetThreadErrorMode);
X(NtSetInformationThread);
@ -111,7 +110,7 @@ index 180eed82419..5e9d51c24cd 100644
}
#undef X
}
@@ -2346,6 +2424,7 @@ START_TEST(thread)
@@ -2379,6 +2457,7 @@ START_TEST(thread)
#ifdef __i386__
test_SetThreadContext();
test_GetThreadSelectorEntry();
@ -119,52 +118,6 @@ index 180eed82419..5e9d51c24cd 100644
#endif
test_QueueUserWorkItem();
test_RegisterWaitForSingleObject();
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index 85cefa638ab..fd3a7cb7eae 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -75,6 +75,7 @@
#include "winternl.h"
#include "ntdll_misc.h"
#include "wine/server.h"
+#include "wine/library.h"
#include "ddk/wdm.h"
#ifdef __APPLE__
@@ -3781,7 +3782,32 @@ NTSTATUS WINAPI NtSystemDebugControl(SYSDBG_COMMAND command, PVOID inbuffer, ULO
NTSTATUS WINAPI NtSetLdtEntries(ULONG selector1, ULONG entry1_low, ULONG entry1_high,
ULONG selector2, ULONG entry2_low, ULONG entry2_high)
{
- FIXME("(%u, %u, %u, %u, %u, %u): stub\n", selector1, entry1_low, entry1_high, selector2, entry2_low, entry2_high);
+#ifdef __i386__
+ union
+ {
+ LDT_ENTRY entry;
+ ULONG dw[2];
+ } sel;
+
+ TRACE("(%x,%x,%x,%x,%x,%x)\n", selector1, entry1_low, entry1_high, selector2, entry2_low, entry2_high);
+ if (selector1)
+ {
+ sel.dw[0] = entry1_low;
+ sel.dw[1] = entry1_high;
+ if (wine_ldt_set_entry(selector1, &sel.entry) < 0)
+ return STATUS_ACCESS_DENIED;
+ }
+ if (selector2)
+ {
+ sel.dw[0] = entry2_low;
+ sel.dw[1] = entry2_high;
+ if (wine_ldt_set_entry(selector2, &sel.entry) < 0)
+ return STATUS_ACCESS_DENIED;
+ }
+ return STATUS_SUCCESS;
+#else
+ FIXME("(%x,%x,%x,%x,%x,%x): stub\n", selector1, entry1_low, entry1_high, selector2, entry2_low, entry2_high);
return STATUS_NOT_IMPLEMENTED;
+#endif
}
--
2.17.1
2.26.0

View File

@ -1,7 +1,7 @@
From 36cdcc900c03de3e2e27a16252242a7a5ec55513 Mon Sep 17 00:00:00 2001
From 18e7f7c6475673f382a8d3015140383c2dd756b0 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Thu, 28 Apr 2016 17:01:16 +0200
Subject: libs/wine: Allow to modify reserved LDT entries.
Subject: [PATCH] libs/wine: Allow to modify reserved LDT entries.
Some implementation notes:
@ -17,14 +17,15 @@ entries without that flag set and NtQueryInformationThread(ThreadDescriptorTable
fails.
---
dlls/kernel32/tests/thread.c | 4 ----
dlls/ntdll/signal_i386.c | 2 --
libs/wine/ldt.c | 4 +---
2 files changed, 1 insertion(+), 7 deletions(-)
3 files changed, 1 insertion(+), 9 deletions(-)
diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c
index 981e3c4..6efc52a 100644
index 70b22367e18..a454bf118cc 100644
--- a/dlls/kernel32/tests/thread.c
+++ b/dlls/kernel32/tests/thread.c
@@ -1163,16 +1163,12 @@ static void test_NtSetLdtEntries(void)
@@ -1325,16 +1325,12 @@ static void test_NtSetLdtEntries(void)
{
memset(&sel.entry, 0x9a, sizeof(sel.entry));
ret = GetThreadSelectorEntry(GetCurrentThread(), 0x000f, &sel.entry);
@ -41,11 +42,24 @@ index 981e3c4..6efc52a 100644
ok(!memcmp(&ds_entry, &sel.entry, sizeof(ds_entry)), "entries do not match\n");
}
}
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index e812f634ff9..16ee93e001a 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -2558,8 +2558,6 @@ NTSTATUS get_thread_ldt_entry( HANDLE handle, void *data, ULONG len, ULONG *ret_
NTSTATUS WINAPI NtSetLdtEntries( ULONG sel1, LDT_ENTRY entry1, ULONG sel2, LDT_ENTRY entry2 )
{
if (sel1 >> 16 || sel2 >> 16) return STATUS_INVALID_LDT_DESCRIPTOR;
- if (sel1 && (sel1 >> 3) < first_ldt_entry) return STATUS_INVALID_LDT_DESCRIPTOR;
- if (sel2 && (sel2 >> 3) < first_ldt_entry) return STATUS_INVALID_LDT_DESCRIPTOR;
ldt_lock();
if (sel1) ldt_set_entry( sel1, entry1 );
diff --git a/libs/wine/ldt.c b/libs/wine/ldt.c
index 0946407..8ac779a 100644
index baf12a2e3a7..b9371814ba2 100644
--- a/libs/wine/ldt.c
+++ b/libs/wine/ldt.c
@@ -169,8 +169,6 @@ static int internal_set_entry( unsigned short sel, const LDT_ENTRY *entry )
@@ -170,8 +170,6 @@ static int internal_set_entry( unsigned short sel, const LDT_ENTRY *entry )
{
int ret = 0, index = sel >> 3;
@ -54,7 +68,7 @@ index 0946407..8ac779a 100644
#ifdef linux
{
struct modify_ldt_s ldt_info;
@@ -222,7 +220,7 @@ static int internal_set_entry( unsigned short sel, const LDT_ENTRY *entry )
@@ -223,7 +221,7 @@ static int internal_set_entry( unsigned short sel, const LDT_ENTRY *entry )
wine_ldt_copy.limit[index] = wine_ldt_get_limit(entry);
wine_ldt_copy.flags[index] = (entry->HighWord.Bits.Type |
(entry->HighWord.Bits.Default_Big ? WINE_LDT_FLAGS_32BIT : 0) |
@ -64,5 +78,5 @@ index 0946407..8ac779a 100644
return ret;
}
--
2.8.0
2.26.0

View File

@ -1,4 +1,4 @@
From 657b5b508badf3e4dc711ab97670b62f6d1f811d Mon Sep 17 00:00:00 2001
From f78b1b06730406eb802afa87e602a3cf4211a170 Mon Sep 17 00:00:00 2001
From: Alex Henrie <alexhenrie24@gmail.com>
Date: Thu, 19 Mar 2020 15:37:50 -0600
Subject: [PATCH] ntdll: Implement RtlIpv6StringToAddress(Ex)[AW]
@ -10,7 +10,7 @@ Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
2 files changed, 211 insertions(+), 14 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 0ea72e3aef..8b9fb18eb1 100644
index 13b0317744a..66271f67884 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -781,10 +781,10 @@
@ -28,10 +28,10 @@ index 0ea72e3aef..8b9fb18eb1 100644
@ stdcall RtlIsCriticalSectionLocked(ptr)
@ stdcall RtlIsCriticalSectionLockedByThread(ptr)
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index 15ff037fef..11e76ed295 100644
index 64853369a36..6f19216e85b 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -98,6 +98,16 @@ static const DWORD CRC_table[256] =
@@ -97,6 +97,16 @@ static const DWORD CRC_table[256] =
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
};
@ -48,7 +48,7 @@ index 15ff037fef..11e76ed295 100644
/*
* resource functions
*/
@@ -886,15 +896,6 @@ void WINAPI RtlCopyLuidAndAttributesArray(
@@ -885,15 +895,6 @@ void WINAPI RtlCopyLuidAndAttributesArray(
static BOOL parse_ipv4_component(const WCHAR **str, BOOL strict, ULONG *value)
{
@ -64,7 +64,7 @@ index 15ff037fef..11e76ed295 100644
int base = 10, d;
WCHAR c;
ULONG cur_value, prev_value = 0;
@@ -1074,13 +1075,209 @@ NTSTATUS WINAPI RtlIpv4StringToAddressA(const char *str, BOOLEAN strict, const c
@@ -1073,13 +1074,209 @@ NTSTATUS WINAPI RtlIpv4StringToAddressA(const char *str, BOOLEAN strict, const c
return ret;
}
@ -72,7 +72,7 @@ index 15ff037fef..11e76ed295 100644
+{
+ WCHAR *terminator;
+ if (**str >= ARRAY_SIZE(hex_table) || hex_table[**str] == -1) return FALSE;
+ *value = min(strtoulW(*str, &terminator, base), 0x7FFFFFFF);
+ *value = min(wcstoul(*str, &terminator, base), 0x7FFFFFFF);
+ if (terminator == *str) return FALSE;
+ *str = terminator;
+ return TRUE;

View File

@ -1,26 +1,18 @@
From bb213b463267c035887fbda1e5227da68705db39 Mon Sep 17 00:00:00 2001
From e0b0ac874fbe3dcab53222f38831978f63177602 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Mon, 17 Aug 2015 06:17:33 +0200
Subject: ntdll: Add special handling for \SystemRoot to satisfy MSYS2
case-insensitive system check.
---
dlls/ntdll/om.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
dlls/ntdll/om.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/dlls/ntdll/om.c b/dlls/ntdll/om.c
index 35c3672..9a2539c 100644
index 0d66867496b..f8f0760de70 100644
--- a/dlls/ntdll/om.c
+++ b/dlls/ntdll/om.c
@@ -39,6 +39,7 @@
#include "ntdll_misc.h"
#include "wine/server.h"
#include "wine/exception.h"
+#include "wine/unicode.h"
WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
@@ -606,6 +607,7 @@ NTSTATUS WINAPI NtQueryDirectoryObject(HANDLE handle, PDIRECTORY_BASIC_INFORMATI
@@ -602,6 +602,7 @@ NTSTATUS WINAPI NtQueryDirectoryObject(HANDLE handle, PDIRECTORY_BASIC_INFORMATI
NTSTATUS WINAPI NtOpenSymbolicLinkObject( HANDLE *handle, ACCESS_MASK access,
const OBJECT_ATTRIBUTES *attr)
{
@ -28,14 +20,14 @@ index 35c3672..9a2539c 100644
NTSTATUS ret;
TRACE("(%p,0x%08x,%s)\n", handle, access, debugstr_ObjectAttributes(attr));
@@ -613,6 +615,16 @@ NTSTATUS WINAPI NtOpenSymbolicLinkObject( HANDLE *handle, ACCESS_MASK access,
@@ -609,6 +610,16 @@ NTSTATUS WINAPI NtOpenSymbolicLinkObject( HANDLE *handle, ACCESS_MASK access,
if (!handle) return STATUS_ACCESS_VIOLATION;
if ((ret = validate_open_object_attributes( attr ))) return ret;
+ /* MSYS2 tries to open \\SYSTEMROOT to check for case-insensitive systems */
+ if (!access && !attr->RootDirectory &&
+ attr->ObjectName->Length == sizeof(SystemRootW) &&
+ !memicmpW( attr->ObjectName->Buffer, SystemRootW,
+ !wcsnicmp( attr->ObjectName->Buffer, SystemRootW,
+ sizeof(SystemRootW)/sizeof(WCHAR) ))
+ {
+ TRACE( "returning STATUS_ACCESS_DENIED\n" );
@ -46,5 +38,5 @@ index 35c3672..9a2539c 100644
{
req->access = access;
--
2.8.0
2.26.0

View File

@ -1,3 +1 @@
Fixes: Fix detection of case-insensitive systems in MSYS2
Depends: ntdll-Exception
# Depends: ntdll-Syscall_Wrappers

View File

@ -52,7 +52,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "5c0e699dbad3e4b4494852c6482125bd8bda9148"
echo "12c3177ed5cae39de8a9f9111a1cb450296cc8e6"
}
# Show version information
@ -1876,13 +1876,6 @@ if test "$enable_server_Realtime_Priority" -eq 1; then
enable_ntdll_ThreadTime=1
fi
if test "$enable_ntdll_SystemRoot_Symlink" -eq 1; then
if test "$enable_ntdll_Exception" -gt 1; then
abort "Patchset ntdll-Exception disabled, but ntdll-SystemRoot_Symlink depends on that."
fi
enable_ntdll_Exception=1
fi
if test "$enable_ntdll_RtlCreateUserThread" -eq 1; then
if test "$enable_winebuild_Fake_Dlls" -gt 1; then
abort "Patchset winebuild-Fake_Dlls disabled, but ntdll-RtlCreateUserThread depends on that."
@ -3436,26 +3429,8 @@ if test "$enable_ntdll_RtlCreateUserThread" -eq 1; then
) >> "$patchlist"
fi
# Patchset ntdll-Exception
# |
# | This patchset fixes the following Wine bugs:
# | * [#44819] Throw second DBG_PRINTEXCEPTION_C when debugging.
# |
# | Modified files:
# | * dlls/kernelbase/debug.c, dlls/ntdll/tests/exception.c
# |
if test "$enable_ntdll_Exception" -eq 1; then
patch_apply ntdll-Exception/0002-ntdll-OutputDebugString-should-throw-the-exception-a.patch
(
printf '%s\n' '+ { "Sebastian Lackner", "ntdll: OutputDebugString should throw the exception a second time, if a debugger is attached.", 1 },';
) >> "$patchlist"
fi
# Patchset ntdll-SystemRoot_Symlink
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * ntdll-Exception
# |
# | Modified files:
# | * dlls/ntdll/om.c
# |
@ -3593,8 +3568,8 @@ fi
# | This patchset has the following (direct or indirect) dependencies:
# | * Staging, advapi32-CreateRestrictedToken, advapi32-Token_Integrity_Level, kernel32-K32GetPerformanceInfo, ntdll-
# | Junction_Points, ntdll-ThreadTime, ntdll-Hide_Wine_Exports, ntdll-User_Shared_Data, winebuild-Fake_Dlls, ntdll-
# | RtlCreateUserThread, ntdll-Exception, ntdll-SystemRoot_Symlink, server-Realtime_Priority, ntdll-Threading, server-
# | Key_State, server-PeekMessage, server-Signal_Thread, server-Shared_Memory, ws2_32-WSACleanup
# | RtlCreateUserThread, ntdll-SystemRoot_Symlink, server-Realtime_Priority, ntdll-Threading, server-Key_State, server-
# | PeekMessage, server-Signal_Thread, server-Shared_Memory, ws2_32-WSACleanup
# |
# | This patchset fixes the following Wine bugs:
# | * [#36692] Many multi-threaded applications have poor performance due to heavy use of synchronization primitives
@ -4456,6 +4431,21 @@ if test "$enable_ntdll_DeviceType_Systemroot" -eq 1; then
) >> "$patchlist"
fi
# Patchset ntdll-Exception
# |
# | This patchset fixes the following Wine bugs:
# | * [#44819] Throw second DBG_PRINTEXCEPTION_C when debugging.
# |
# | Modified files:
# | * dlls/kernelbase/debug.c, dlls/ntdll/tests/exception.c
# |
if test "$enable_ntdll_Exception" -eq 1; then
patch_apply ntdll-Exception/0002-ntdll-OutputDebugString-should-throw-the-exception-a.patch
(
printf '%s\n' '+ { "Sebastian Lackner", "ntdll: OutputDebugString should throw the exception a second time, if a debugger is attached.", 1 },';
) >> "$patchlist"
fi
# Patchset ntdll-FileFsFullSizeInformation
# |
# | Modified files:
@ -4730,7 +4720,7 @@ fi
# Patchset ntdll-NtSetLdtEntries
# |
# | Modified files:
# | * dlls/kernel32/tests/thread.c, dlls/ntdll/nt.c, libs/wine/ldt.c
# | * dlls/kernel32/tests/thread.c, dlls/ntdll/signal_i386.c, libs/wine/ldt.c
# |
if test "$enable_ntdll_NtSetLdtEntries" -eq 1; then
patch_apply ntdll-NtSetLdtEntries/0001-ntdll-Implement-NtSetLdtEntries.patch
@ -5311,8 +5301,8 @@ fi
# | This patchset has the following (direct or indirect) dependencies:
# | * Staging, advapi32-CreateRestrictedToken, advapi32-Token_Integrity_Level, kernel32-K32GetPerformanceInfo, ntdll-
# | Junction_Points, ntdll-ThreadTime, ntdll-Hide_Wine_Exports, ntdll-User_Shared_Data, winebuild-Fake_Dlls, ntdll-
# | RtlCreateUserThread, ntdll-Exception, ntdll-SystemRoot_Symlink, server-Realtime_Priority, ntdll-Threading, server-
# | Key_State, server-PeekMessage, server-Signal_Thread, server-Shared_Memory, ws2_32-WSACleanup, eventfd_synchronization
# | RtlCreateUserThread, ntdll-SystemRoot_Symlink, server-Realtime_Priority, ntdll-Threading, server-Key_State, server-
# | PeekMessage, server-Signal_Thread, server-Shared_Memory, ws2_32-WSACleanup, eventfd_synchronization
# |
# | This patchset fixes the following Wine bugs:
# | * [#46967] GOG Galaxy doesn't run in virtual desktop.
@ -7215,9 +7205,9 @@ fi
# | This patchset has the following (direct or indirect) dependencies:
# | * Staging, advapi32-CreateRestrictedToken, advapi32-Token_Integrity_Level, kernel32-K32GetPerformanceInfo, ntdll-
# | Junction_Points, ntdll-ThreadTime, ntdll-Hide_Wine_Exports, ntdll-User_Shared_Data, winebuild-Fake_Dlls, ntdll-
# | RtlCreateUserThread, ntdll-Exception, ntdll-SystemRoot_Symlink, server-Realtime_Priority, ntdll-Threading, server-
# | Key_State, server-PeekMessage, server-Signal_Thread, server-Shared_Memory, ws2_32-WSACleanup, eventfd_synchronization,
# | server-Desktop_Refcount
# | RtlCreateUserThread, ntdll-SystemRoot_Symlink, server-Realtime_Priority, ntdll-Threading, server-Key_State, server-
# | PeekMessage, server-Signal_Thread, server-Shared_Memory, ws2_32-WSACleanup, eventfd_synchronization, server-
# | Desktop_Refcount
# |
# | Modified files:
# | * dlls/ws2_32/socket.c, dlls/ws2_32/tests/sock.c, include/winsock.h, server/protocol.def, server/sock.c

View File

@ -1,4 +1,4 @@
From 0dbb12f12b3637dbf512cd0c0d719c901d57e63d Mon Sep 17 00:00:00 2001
From cc13b2bb6b823df3de62dfacabeff22ebb2cf93e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 11 May 2017 05:32:55 +0200
Subject: [PATCH] winebuild: Generate syscall thunks for ntdll exports.
@ -17,10 +17,10 @@ Based on a patch by Erich E. Hoover.
9 files changed, 206 insertions(+), 27 deletions(-)
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 93eb142ab3f..5542d4b5e8e 100644
index ba127c00361..915b344aabe 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -427,6 +427,9 @@ static size_t signal_stack_size;
@@ -481,6 +481,9 @@ static ULONG first_ldt_entry = 32;
static wine_signal_handler handlers[256];
@ -30,7 +30,7 @@ index 93eb142ab3f..5542d4b5e8e 100644
enum i386_trap_code
{
TRAP_x86_UNKNOWN = -1, /* Unknown fault (TRAP_sig not defined) */
@@ -1448,7 +1451,7 @@ NTSTATUS CDECL DECLSPEC_HIDDEN __regs_NtGetContextThread( DWORD edi, DWORD esi,
@@ -1512,7 +1515,7 @@ NTSTATUS CDECL DECLSPEC_HIDDEN __regs_NtGetContextThread( DWORD edi, DWORD esi,
{
context->Ebp = ebp;
context->Esp = (DWORD)&retaddr;
@ -39,19 +39,19 @@ index 93eb142ab3f..5542d4b5e8e 100644
context->SegCs = wine_get_cs();
context->SegSs = wine_get_ss();
context->EFlags = eflags;
@@ -2335,6 +2338,7 @@ NTSTATUS signal_alloc_thread( TEB **teb )
@@ -2599,6 +2602,7 @@ NTSTATUS signal_alloc_thread( TEB **teb )
*teb = addr;
(*teb)->Tib.Self = &(*teb)->Tib;
(*teb)->Tib.ExceptionList = (void *)~0UL;
+ (*teb)->WOW32Reserved = __wine_syscall_dispatcher;
thread_data = (struct x86_thread_data *)(*teb)->SystemReserved2;
if (!(thread_data->fs = wine_ldt_alloc_fs()))
if (!(thread_data->fs = ldt_alloc_fs( *teb, first_thread )))
{
diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c
index ada28c91ebd..3ed8fa08213 100644
index 249ba9d7c39..b10e2f65553 100644
--- a/dlls/ntdll/tests/exception.c
+++ b/dlls/ntdll/tests/exception.c
@@ -1651,6 +1651,8 @@ static void test_thread_context(void)
@@ -1643,6 +1643,8 @@ static void test_thread_context(void)
ok( (char *)context.Eip >= (char *)pNtGetContextThread - 0x10000 &&
(char *)context.Eip <= (char *)pNtGetContextThread + 0x10000,
"wrong Eip %08x/%08x\n", context.Eip, (DWORD)pNtGetContextThread );
@ -61,10 +61,10 @@ index ada28c91ebd..3ed8fa08213 100644
ok( context.SegCs == LOWORD(expect.SegCs), "wrong SegCs %08x/%08x\n", context.SegCs, expect.SegCs );
ok( context.SegDs == LOWORD(expect.SegDs), "wrong SegDs %08x/%08x\n", context.SegDs, expect.SegDs );
diff --git a/include/winternl.h b/include/winternl.h
index 2351df010b0..68bceddef68 100644
index 7ab105752df..e469012b236 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -357,7 +357,7 @@ typedef struct _TEB
@@ -359,7 +359,7 @@ typedef struct _TEB
PVOID CsrClientThread; /* 03c/0070 */
PVOID Win32ThreadInfo; /* 040/0078 */
ULONG Win32ClientInfo[31]; /* 044/0080 used for user32 private data in Wine */
@ -74,7 +74,7 @@ index 2351df010b0..68bceddef68 100644
ULONG FpSoftwareStatusRegister; /* 0c8/010c */
PVOID SystemReserved1[54]; /* 0cc/0110 used for krnl386.exe16 private data in Wine */
diff --git a/tools/winebuild/build.h b/tools/winebuild/build.h
index 43a0dd20e82..eb63b661c7f 100644
index 65493ec37fb..b701f0660e4 100644
--- a/tools/winebuild/build.h
+++ b/tools/winebuild/build.h
@@ -105,6 +105,7 @@ typedef struct
@ -112,7 +112,7 @@ index 43a0dd20e82..eb63b661c7f 100644
#define FLAG_CPU_MASK (FLAG_CPU(CPU_LAST + 1) - FLAG_CPU(0))
#define FLAG_CPU_WIN64 (FLAG_CPU(CPU_x86_64) | FLAG_CPU(CPU_ARM64))
#define FLAG_CPU_WIN32 (FLAG_CPU_MASK & ~FLAG_CPU_WIN64)
@@ -325,6 +330,8 @@ extern void add_16bit_exports( DLLSPEC *spec32, DLLSPEC *spec16 );
@@ -326,6 +331,8 @@ extern void add_16bit_exports( DLLSPEC *spec32, DLLSPEC *spec16 );
extern int parse_spec_file( FILE *file, DLLSPEC *spec );
extern int parse_def_file( FILE *file, DLLSPEC *spec );
@ -122,10 +122,10 @@ index 43a0dd20e82..eb63b661c7f 100644
extern int byte_swapped;
diff --git a/tools/winebuild/import.c b/tools/winebuild/import.c
index 8c32b738a23..599281674f2 100644
index 04ab433dd65..0c6bafed8e5 100644
--- a/tools/winebuild/import.c
+++ b/tools/winebuild/import.c
@@ -541,6 +541,7 @@ static void check_undefined_forwards( DLLSPEC *spec )
@@ -531,6 +531,7 @@ static void check_undefined_forwards( DLLSPEC *spec )
/* flag the dll exports that link to an undefined symbol */
static void check_undefined_exports( DLLSPEC *spec )
{
@ -133,7 +133,7 @@ index 8c32b738a23..599281674f2 100644
int i;
for (i = 0; i < spec->nb_entry_points; i++)
@@ -548,7 +549,8 @@ static void check_undefined_exports( DLLSPEC *spec )
@@ -538,7 +539,8 @@ static void check_undefined_exports( DLLSPEC *spec )
ORDDEF *odp = &spec->entry_points[i];
if (odp->type == TYPE_STUB || odp->type == TYPE_ABS || odp->type == TYPE_VARIABLE) continue;
if (odp->flags & FLAG_FORWARD) continue;
@ -143,7 +143,7 @@ index 8c32b738a23..599281674f2 100644
{
switch(odp->type)
{
@@ -559,14 +561,14 @@ static void check_undefined_exports( DLLSPEC *spec )
@@ -549,14 +551,14 @@ static void check_undefined_exports( DLLSPEC *spec )
if (link_ext_symbols)
{
odp->flags |= FLAG_EXT_LINK;
@ -162,10 +162,10 @@ index 8c32b738a23..599281674f2 100644
}
}
diff --git a/tools/winebuild/parser.c b/tools/winebuild/parser.c
index 3191efaf9ea..f440881a0ec 100644
index be705c25f0f..004b6aea7ab 100644
--- a/tools/winebuild/parser.c
+++ b/tools/winebuild/parser.c
@@ -541,6 +541,24 @@ static const char *parse_spec_flags( DLLSPEC *spec, ORDDEF *odp )
@@ -543,6 +543,24 @@ static const char *parse_spec_flags( DLLSPEC *spec, ORDDEF *odp )
}
@ -190,7 +190,7 @@ index 3191efaf9ea..f440881a0ec 100644
/*******************************************************************
* parse_spec_ordinal
*
@@ -616,6 +634,14 @@ static int parse_spec_ordinal( int ordinal, DLLSPEC *spec )
@@ -618,6 +636,14 @@ static int parse_spec_ordinal( int ordinal, DLLSPEC *spec )
assert( 0 );
}
@ -205,7 +205,7 @@ index 3191efaf9ea..f440881a0ec 100644
if ((odp->flags & FLAG_CPU_MASK) && !(odp->flags & FLAG_CPU(target_cpu)))
{
/* ignore this entry point */
@@ -813,6 +839,37 @@ static void assign_ordinals( DLLSPEC *spec )
@@ -815,6 +841,37 @@ static void assign_ordinals( DLLSPEC *spec )
}
@ -243,7 +243,7 @@ index 3191efaf9ea..f440881a0ec 100644
/*******************************************************************
* add_16bit_exports
*
@@ -914,6 +971,8 @@ int parse_spec_file( FILE *file, DLLSPEC *spec )
@@ -916,6 +973,8 @@ int parse_spec_file( FILE *file, DLLSPEC *spec )
current_line = 0; /* no longer parsing the input file */
assign_names( spec );
assign_ordinals( spec );
@ -293,10 +293,10 @@ index 3a7e457282a..a179175b8c1 100644
entry_point->u.func.nb_args = 0;
assert( !spec->ordinals[0] );
diff --git a/tools/winebuild/spec32.c b/tools/winebuild/spec32.c
index 855e6d8739f..119e1079940 100644
index ecfe4c50113..fa7984e1a38 100644
--- a/tools/winebuild/spec32.c
+++ b/tools/winebuild/spec32.c
@@ -371,6 +371,109 @@ static void output_relay_debug( DLLSPEC *spec )
@@ -374,6 +374,109 @@ static void output_relay_debug( DLLSPEC *spec )
}
}
@ -406,7 +406,7 @@ index 855e6d8739f..119e1079940 100644
/*******************************************************************
* output_exports
*
@@ -767,6 +870,7 @@ void output_spec32_file( DLLSPEC *spec )
@@ -770,6 +873,7 @@ void output_spec32_file( DLLSPEC *spec )
open_output_file();
output_standard_file_header();
output_module( spec );
@ -415,10 +415,10 @@ index 855e6d8739f..119e1079940 100644
output_exports( spec );
output_imports( spec );
diff --git a/tools/winebuild/utils.c b/tools/winebuild/utils.c
index 31a6b283713..74fc8a16bcf 100644
index be877080486..63aeeca4468 100644
--- a/tools/winebuild/utils.c
+++ b/tools/winebuild/utils.c
@@ -838,6 +838,7 @@ void free_dll_spec( DLLSPEC *spec )
@@ -854,6 +854,7 @@ void free_dll_spec( DLLSPEC *spec )
free( odp->name );
free( odp->export_name );
free( odp->link_name );
@ -426,7 +426,7 @@ index 31a6b283713..74fc8a16bcf 100644
}
free( spec->file_name );
free( spec->dll_name );
@@ -847,6 +848,7 @@ void free_dll_spec( DLLSPEC *spec )
@@ -863,6 +864,7 @@ void free_dll_spec( DLLSPEC *spec )
free( spec->names );
free( spec->ordinals );
free( spec->resources );
@ -434,7 +434,7 @@ index 31a6b283713..74fc8a16bcf 100644
free( spec );
}
@@ -1265,3 +1267,22 @@ const char *get_asm_string_section(void)
@@ -1281,3 +1283,22 @@ const char *get_asm_string_section(void)
default: return ".section .rodata";
}
}
@ -458,5 +458,5 @@ index 31a6b283713..74fc8a16bcf 100644
+ return j + 1;
+}
--
2.20.1
2.26.0

View File

@ -1,4 +1,4 @@
From 4855e0338f57525304221ba1c29c3926a9f16263 Mon Sep 17 00:00:00 2001
From ef002efad2f2ef4fcbc9aab1a91acaccdb7a846e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Mon, 15 May 2017 16:27:56 +0200
Subject: [PATCH] winebuild: Add stub functions in fake dlls.
@ -61,10 +61,10 @@ index e72dea9ca51..bf3cf00f964 100644
CloseHandle(map);
CloseHandle(file);
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index a0f8b3a2ec6..72285f0b456 100644
index 915b344aabe..8cb19f68ec1 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -445,6 +445,39 @@ static wine_signal_handler handlers[256];
@@ -484,6 +484,39 @@ static wine_signal_handler handlers[256];
extern void DECLSPEC_NORETURN __wine_syscall_dispatcher( void );
extern NTSTATUS WINAPI __syscall_NtGetContextThread( HANDLE handle, CONTEXT *context );
@ -104,16 +104,16 @@ index a0f8b3a2ec6..72285f0b456 100644
enum i386_trap_code
{
TRAP_x86_UNKNOWN = -1, /* Unknown fault (TRAP_sig not defined) */
@@ -2307,6 +2340,7 @@ NTSTATUS signal_alloc_thread( TEB **teb )
@@ -2603,6 +2636,7 @@ NTSTATUS signal_alloc_thread( TEB **teb )
(*teb)->Tib.Self = &(*teb)->Tib;
(*teb)->Tib.ExceptionList = (void *)~0UL;
(*teb)->WOW32Reserved = __wine_syscall_dispatcher;
+ (*teb)->Spare2 = __wine_fakedll_dispatcher;
thread_data = (struct x86_thread_data *)(*teb)->SystemReserved2;
if (!(thread_data->fs = wine_ldt_alloc_fs()))
if (!(thread_data->fs = ldt_alloc_fs( *teb, first_thread )))
{
diff --git a/include/winternl.h b/include/winternl.h
index 1fbf05b0125..f44722093ba 100644
index e469012b236..24a41a9f95d 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -398,7 +398,7 @@ typedef struct _TEB
@ -436,5 +436,5 @@ index b0be1b594b3..b1e34c5da18 100644
{
size_t size = align - (output_buffer_pos % align);
--
2.25.1
2.26.0