Compare commits

..

7 Commits
v8.18 ... v8.19

Author SHA1 Message Date
Alistair Leslie-Hughes
c6e61e267a Release v8.19 2023-10-30 08:49:23 +11:00
Alistair Leslie-Hughes
519fde9b1a Updated vkd3d-latest patchset 2023-10-30 07:33:57 +11:00
Alistair Leslie-Hughes
e9a4c9a06f Updated fltmgr.sys-FltBuildDefaultSecurityDescriptor patchset 2023-10-30 07:33:57 +11:00
Alistair Leslie-Hughes
28180a60fd Rebase against 6391b8d5c99c206689c6e55a675b51086d8be821. 2023-10-19 09:21:42 +11:00
Alistair Leslie-Hughes
9486ca2543 Rebase against 0c7a09cb1f92d55d8381ff6460e13ed085d434db. 2023-10-18 08:56:48 +11:00
Alistair Leslie-Hughes
7d2672183d Rebase against de66ea9df6746917cada71d2c27b5cc38cbdd2f0. 2023-10-17 10:12:05 +11:00
Alistair Leslie-Hughes
3dcd383186 Remove Whitespace noise 2023-10-16 11:21:36 +11:00
30 changed files with 13082 additions and 13265 deletions

View File

@@ -1,154 +0,0 @@
From d32988c911aae73ec81242cd8f6ae37e078d212f Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Fri, 2 Dec 2022 14:41:30 +1100
Subject: [PATCH] dmime: Implement IDirectMusicSegment8 Download
---
dlls/dmime/dmime_private.h | 1 +
dlls/dmime/performance.c | 7 ++++
dlls/dmime/segment.c | 84 +++++++++++++++++++++++++++++++++++++-
3 files changed, 91 insertions(+), 1 deletion(-)
diff --git a/dlls/dmime/dmime_private.h b/dlls/dmime/dmime_private.h
index c35c52eb066..ca8323fc525 100644
--- a/dlls/dmime/dmime_private.h
+++ b/dlls/dmime/dmime_private.h
@@ -72,6 +72,7 @@ extern void set_audiopath_primary_dsound_buffer(IDirectMusicAudioPath*,IDirectSo
extern HRESULT segment_state_create(IDirectMusicSegment *segment, MUSIC_TIME start_time,
IDirectMusicSegmentState **ret_iface);
+extern IDirectSound *get_dsound_interface(IDirectMusicPerformance8*);
/*****************************************************************************
* Auxiliary definitions
diff --git a/dlls/dmime/performance.c b/dlls/dmime/performance.c
index 9f293358ca6..3658c16c187 100644
--- a/dlls/dmime/performance.c
+++ b/dlls/dmime/performance.c
@@ -251,6 +251,13 @@ static inline struct performance *impl_from_IDirectMusicPerformance8(IDirectMusi
return CONTAINING_RECORD(iface, struct performance, IDirectMusicPerformance8_iface);
}
+IDirectSound *get_dsound_interface(IDirectMusicPerformance8* iface)
+{
+ struct performance *This = impl_from_IDirectMusicPerformance8(iface);
+ return This->dsound;
+}
+
+
/* IDirectMusicPerformance8 IUnknown part: */
static HRESULT WINAPI performance_QueryInterface(IDirectMusicPerformance8 *iface, REFIID riid, void **ret_iface)
{
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c
index af7729f34b9..284564749df 100644
--- a/dlls/dmime/segment.c
+++ b/dlls/dmime/segment.c
@@ -54,6 +54,7 @@ struct segment
PCMWAVEFORMAT wave_format;
void *wave_data;
int data_size;
+ IDirectSoundBuffer *buffer;
};
static struct segment *segment_create(void);
@@ -114,6 +115,8 @@ static ULONG WINAPI segment_Release(IDirectMusicSegment8 *iface)
track_entry_destroy(entry);
}
+ if (This->buffer)
+ IDirectSoundBuffer_Release(This->buffer);
if (This->wave_data)
free(This->wave_data);
@@ -533,8 +536,87 @@ static HRESULT WINAPI segment_Compose(IDirectMusicSegment8 *iface, MUSIC_TIME mt
static HRESULT WINAPI segment_Download(IDirectMusicSegment8 *iface, IUnknown *audio_path)
{
struct segment *This = impl_from_IDirectMusicSegment8(iface);
+ IDirectMusicPerformance8 *perf;
+ IDirectMusicAudioPath *audio;
+ IDirectSound *dsound;
+ HRESULT hr;
+ DSBUFFERDESC dsbd = {.dwSize = sizeof(dsbd)};
+ void *data;
+ DWORD size;
+ DWORD buffer = 0;
+
TRACE("(%p, %p)\n", This, audio_path);
- return IDirectMusicSegment8_SetParam(iface, &GUID_DownloadToAudioPath, -1, DMUS_SEG_ALLTRACKS, 0, audio_path);
+
+ if (!audio_path)
+ return E_INVALIDARG;
+
+ hr = IDirectMusicSegment8_SetParam(iface, &GUID_DownloadToAudioPath, -1, DMUS_SEG_ALLTRACKS, 0, audio_path);
+ if (FAILED(hr))
+ return hr;
+
+ if (This->buffer)
+ {
+ TRACE("Using Cached buffer\n");
+ return S_OK;
+ }
+
+ /* pAudioPath can either be IDirectMusicAudioPath or IDirectMusicPerformance */
+ hr = IUnknown_QueryInterface(audio_path, &IID_IDirectMusicPerformance8, (void**)&perf);
+ if (FAILED(hr))
+ {
+ TRACE("Checking for IDirectMusicAudioPath interface\n");
+ hr = IUnknown_QueryInterface(audio_path, &IID_IDirectMusicAudioPath, (void**)&audio);
+ if (FAILED(hr))
+ {
+ WARN("Cannot query for IDirectMusicAudioPath\n");
+ return E_INVALIDARG;
+ }
+
+ IDirectMusicAudioPath_GetObjectInPath(audio, DMUS_PCHANNEL_ALL, DMUS_PATH_PERFORMANCE, buffer, &GUID_NULL,
+ 0, &IID_IDirectMusicPerformance, (void**)&perf);
+ IDirectMusicAudioPath_Release(audio);
+ }
+
+ if (!perf)
+ {
+ ERR("Failed to get IDirectMusicPerformance interface\n");
+ return E_INVALIDARG;
+ }
+
+ dsound = get_dsound_interface(perf);
+ if (!dsound)
+ {
+ ERR("Failed get_dsound_interface\n");
+ return E_INVALIDARG;
+ }
+
+ if (This->data_size == 0)
+ {
+ FIXME("No wave data skipping\n");
+ return S_OK;
+ }
+
+ dsbd.dwBufferBytes = This->data_size;
+ dsbd.lpwfxFormat = (WAVEFORMATEX*)&This->wave_format;
+
+ hr = IDirectSound_CreateSoundBuffer(dsound, &dsbd, &This->buffer, NULL);
+ if (FAILED(hr))
+ {
+ ERR("IDirectSound_CreateSoundBuffer failed 0x%08lx\n", hr);
+ return E_INVALIDARG;
+ }
+
+ TRACE("CreateSoundBuffer successful\n");
+
+ hr = IDirectSoundBuffer_Lock(This->buffer, 0, This->data_size, &data, &size, NULL, 0, 0);
+ TRACE("IDirectSoundBuffer_Lock hr 0x%08lx\n", hr);
+
+ memcpy(data, This->wave_data, This->data_size);
+
+ hr = IDirectSoundBuffer_Unlock(This->buffer, data, This->data_size, NULL, 0);
+ TRACE("IDirectSoundBuffer_Unlock hr 0x%08lx\n", hr);
+
+ return S_OK;
}
static HRESULT WINAPI segment_Unload(IDirectMusicSegment8 *iface, IUnknown *audio_path)
--
2.42.0

View File

@@ -1,67 +0,0 @@
From b9c561a99b7034e3cac64ab85e4d50a6fb0c304c Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 12 Dec 2022 15:20:10 +1100
Subject: [PATCH] dmime: Play a sound in IDirectMusicPerformance8 PlaySegmentEx
---
dlls/dmime/dmime_private.h | 1 +
dlls/dmime/performance.c | 6 ++++++
dlls/dmime/segment.c | 6 ++++++
3 files changed, 13 insertions(+)
diff --git a/dlls/dmime/dmime_private.h b/dlls/dmime/dmime_private.h
index ca8323fc525..2b4537233fc 100644
--- a/dlls/dmime/dmime_private.h
+++ b/dlls/dmime/dmime_private.h
@@ -73,6 +73,7 @@ extern void set_audiopath_primary_dsound_buffer(IDirectMusicAudioPath*,IDirectSo
extern HRESULT segment_state_create(IDirectMusicSegment *segment, MUSIC_TIME start_time,
IDirectMusicSegmentState **ret_iface);
extern IDirectSound *get_dsound_interface(IDirectMusicPerformance8*);
+extern IDirectSoundBuffer *get_segment_buffer(IDirectMusicSegment8 *iface);
/*****************************************************************************
* Auxiliary definitions
diff --git a/dlls/dmime/performance.c b/dlls/dmime/performance.c
index 3658c16c187..14831e72ba3 100644
--- a/dlls/dmime/performance.c
+++ b/dlls/dmime/performance.c
@@ -1078,6 +1078,7 @@ static HRESULT WINAPI performance_PlaySegmentEx(IDirectMusicPerformance8 *iface,
IDirectMusicSegmentState *state;
IDirectMusicSegment *segment;
HRESULT hr;
+ IDirectSoundBuffer *buffer;
FIXME("(%p, %p, %s, %p, %#lx, %I64d, %p, %p, %p): stub\n", This, source, debugstr_w(segment_name),
transition, segment_flags, start_time, segment_state, from, audio_path);
@@ -1096,6 +1097,11 @@ static HRESULT WINAPI performance_PlaySegmentEx(IDirectMusicPerformance8 *iface,
IDirectMusicSegmentState_AddRef(state);
}
+ buffer = get_segment_buffer(segment);
+
+ if (segment)
+ hr = IDirectSoundBuffer_Play(buffer, 0, 0, 0);
+
IDirectMusicSegmentState_Release(state);
IDirectMusicSegment_Release(segment);
return hr;
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c
index 284564749df..af76258c979 100644
--- a/dlls/dmime/segment.c
+++ b/dlls/dmime/segment.c
@@ -64,6 +64,12 @@ static inline struct segment *impl_from_IDirectMusicSegment8(IDirectMusicSegment
return CONTAINING_RECORD(iface, struct segment, IDirectMusicSegment8_iface);
}
+IDirectSoundBuffer *get_segment_buffer(IDirectMusicSegment8 *iface)
+{
+ struct segment *This = impl_from_IDirectMusicSegment8(iface);
+ return This->buffer;
+}
+
static HRESULT WINAPI segment_QueryInterface(IDirectMusicSegment8 *iface, REFIID riid, void **ret_iface)
{
struct segment *This = impl_from_IDirectMusicSegment8(iface);
--
2.42.0

View File

@@ -1,14 +0,0 @@
Fixes: [48220] dmime: Handle basic loading of Wave files and playing them.
Fixes: [61322] dmine: No Sound in Black Rockman Shooter.
Fixes: [34751] dmime: Aura: Fate of the Ages: sounds aren't played, but music works fine
Fixes: [9027] dmime: No sound for rise of nations - all versions.
Disabled: True
# Also
# - Cloning Clyde demo
# Doesnt fix
# The following are known not to work, at the moment.
# [31586] : Myst sounds (Voices)
# [30969] : Tron 2.0 Background music
# [32896] : Serious Sam: The Random Encounter

View File

@@ -1,7 +1,7 @@
From 2a8ffcea70c41f013660d2b6168ab694c70246c0 Mon Sep 17 00:00:00 2001
From 8caf8262a8ae8b5f0275172a62d807240d86968d Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sun, 29 Aug 2021 13:26:53 +1000
Subject: [PATCH] fltmgr.sys: Implement FltBuildDefaultSecurityDescriptor
Subject: [PATCH 1/3] fltmgr.sys: Implement FltBuildDefaultSecurityDescriptor
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
@@ -45,7 +45,7 @@ index 39ce6798178..8943b9f85cf 100644
@ stub FltGetBottomInstance
@ stub FltGetContexts
diff --git a/dlls/fltmgr.sys/main.c b/dlls/fltmgr.sys/main.c
index e1016a4989c..68f242ab8e8 100644
index e1016a4989c..9a85f4b6c82 100644
--- a/dlls/fltmgr.sys/main.c
+++ b/dlls/fltmgr.sys/main.c
@@ -23,7 +23,6 @@
@@ -132,9 +132,8 @@ index e1016a4989c..68f242ab8e8 100644
+
+void WINAPI FltFreeSecurityDescriptor(PSECURITY_DESCRIPTOR descriptor)
+{
+ RtlFreeHeap(GetProcessHeap(), 0, descriptor);
+ ExFreePool(descriptor);
+}
\ No newline at end of file
diff --git a/include/ddk/fltkernel.h b/include/ddk/fltkernel.h
index 49c9d55dbaa..e5483d5a3fa 100644
--- a/include/ddk/fltkernel.h
@@ -150,5 +149,5 @@ index 49c9d55dbaa..e5483d5a3fa 100644
NTSTATUS WINAPI FltRegisterFilter(PDRIVER_OBJECT, const FLT_REGISTRATION *, PFLT_FILTER *);
NTSTATUS WINAPI FltStartFiltering(PFLT_FILTER);
--
2.40.1
2.42.0

View File

@@ -1,4 +1,4 @@
From 9cb5114cbf5af7c360ffb653fc286b8bf9e21db3 Mon Sep 17 00:00:00 2001
From c1af142bac149b296b2dea06cd99c13e0f8814c9 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 30 Aug 2021 15:15:35 +1000
Subject: [PATCH 2/3] fltmgr.sys: Create import library
@@ -9,7 +9,7 @@ Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
1 file changed, 1 insertion(+)
diff --git a/dlls/fltmgr.sys/Makefile.in b/dlls/fltmgr.sys/Makefile.in
index bb1f34b4896..5540df35d6a 100644
index ae0e812cb22..ae02da9b5d6 100644
--- a/dlls/fltmgr.sys/Makefile.in
+++ b/dlls/fltmgr.sys/Makefile.in
@@ -1,4 +1,5 @@
@@ -19,5 +19,5 @@ index bb1f34b4896..5540df35d6a 100644
IMPORTS = ntoskrnl
--
2.40.1
2.42.0

View File

@@ -1,4 +1,4 @@
From 8d12d4dac0cbc7194d11e398b4d3371bef8a1952 Mon Sep 17 00:00:00 2001
From c69247afcbd83af223f471342c67bc06deeffda0 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 30 Aug 2021 15:16:06 +1000
Subject: [PATCH] ntoskrnl.exe: Add FltBuildDefaultSecurityDescriptor test
@@ -6,11 +6,11 @@ Subject: [PATCH] ntoskrnl.exe: Add FltBuildDefaultSecurityDescriptor test
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/ntoskrnl.exe/tests/Makefile.in | 2 +-
dlls/ntoskrnl.exe/tests/driver.c | 65 +++++++++++++++++++++++++++++
2 files changed, 66 insertions(+), 1 deletion(-)
dlls/ntoskrnl.exe/tests/driver.c | 81 +++++++++++++++++++++++++++++
2 files changed, 82 insertions(+), 1 deletion(-)
diff --git a/dlls/ntoskrnl.exe/tests/Makefile.in b/dlls/ntoskrnl.exe/tests/Makefile.in
index ab1db85adbb..9c89e44e70a 100644
index f610df6a947..97dee8b25cf 100644
--- a/dlls/ntoskrnl.exe/tests/Makefile.in
+++ b/dlls/ntoskrnl.exe/tests/Makefile.in
@@ -1,7 +1,7 @@
@@ -23,10 +23,10 @@ index ab1db85adbb..9c89e44e70a 100644
driver2_IMPORTS = winecrt0 ntoskrnl hal
driver2_EXTRADLLFLAGS = -nodefaultlibs -nostartfiles -Wl,--subsystem,native
diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c
index c8797e8d8e0..168b47941e8 100644
index ea4bd03ee44..844a181472c 100644
--- a/dlls/ntoskrnl.exe/tests/driver.c
+++ b/dlls/ntoskrnl.exe/tests/driver.c
@@ -32,6 +32,7 @@
@@ -36,6 +36,7 @@
#include "ddk/ntddk.h"
#include "ddk/ntifs.h"
#include "ddk/wdm.h"
@@ -34,7 +34,7 @@ index c8797e8d8e0..168b47941e8 100644
#include "driver.h"
@@ -2372,6 +2373,69 @@ static void test_default_modules(void)
@@ -2393,6 +2394,85 @@ static void test_default_modules(void)
ok(dxgmms1, "Failed to find dxgmms1.sys\n");
}
@@ -47,10 +47,17 @@ index c8797e8d8e0..168b47941e8 100644
+ PACL acl = NULL;
+ PACCESS_ALLOWED_ACE ace;
+ SID_IDENTIFIER_AUTHORITY auth = { SECURITY_NULL_SID_AUTHORITY };
+ PSID sid1, sid2;
+ SID_IDENTIFIER_AUTHORITY authwine7 = { SECURITY_NT_AUTHORITY };
+ PSID sid1, sid2, sidwin7;
+ BOOL ret;
+
+ status = FltBuildDefaultSecurityDescriptor(&sd, STANDARD_RIGHTS_ALL);
+ ok(status == STATUS_SUCCESS, "got %#lx\n", status);
+ if (status != STATUS_SUCCESS)
+ {
+ win_skip("Skipping FltBuildDefaultSecurityDescriptor tests\n");
+ return;
+ }
+ ok(sd != NULL, "Failed to return descriptor\n");
+
+ status = RtlGetGroupSecurityDescriptor(sd, &group, &isdefault);
@@ -67,10 +74,17 @@ index c8797e8d8e0..168b47941e8 100644
+ ok(acl->AceCount == 2, "got %d\n", acl->AceCount);
+
+ sid1 = ExAllocatePool(NonPagedPool, RtlLengthRequiredSid(2));
+ RtlInitializeSid(sid1, &auth, 2);
+ status = RtlInitializeSid(sid1, &auth, 2);
+ ok(status == STATUS_SUCCESS, "got %#lx\n", status);
+ *RtlSubAuthoritySid(sid1, 0) = SECURITY_BUILTIN_DOMAIN_RID;
+ *RtlSubAuthoritySid(sid1, 1) = DOMAIN_GROUP_RID_ADMINS;
+
+ sidwin7 = ExAllocatePool(NonPagedPool, RtlLengthRequiredSid(2));
+ status = RtlInitializeSid(sidwin7, &authwine7, 2);
+ ok(status == STATUS_SUCCESS, "got %#lx\n", status);
+ *RtlSubAuthoritySid(sidwin7, 0) = SECURITY_BUILTIN_DOMAIN_RID;
+ *RtlSubAuthoritySid(sidwin7, 1) = DOMAIN_ALIAS_RID_ADMINS;
+
+ sid2 = ExAllocatePool(NonPagedPool, RtlLengthRequiredSid(1));
+ RtlInitializeSid(sid2, &auth, 1);
+ *RtlSubAuthoritySid(sid2, 0) = SECURITY_LOCAL_SYSTEM_RID;
@@ -83,7 +97,8 @@ index c8797e8d8e0..168b47941e8 100644
+ ok(ace->Header.AceFlags == 0, "got %#x\n", ace->Header.AceFlags);
+ ok(ace->Mask == STANDARD_RIGHTS_ALL, "got %#lx\n", ace->Mask);
+
+ ok(RtlEqualSid(sid1, (PSID)&ace->SidStart), "SID not equal\n");
+ ret = RtlEqualSid(sid1, (PSID)&ace->SidStart) || RtlEqualSid(sidwin7, (PSID)&ace->SidStart);
+ ok(ret, "SID not equal\n");
+
+ /* SECURITY_LOCAL_SYSTEM_RID */
+ status = RtlGetAce(acl, 1, (void**)&ace);
@@ -93,7 +108,8 @@ index c8797e8d8e0..168b47941e8 100644
+ ok(ace->Header.AceFlags == 0, "got %#x\n", ace->Header.AceFlags);
+ ok(ace->Mask == STANDARD_RIGHTS_ALL, "got %#lx\n", ace->Mask);
+
+ ok(RtlEqualSid(sid2, (PSID)&ace->SidStart), "SID not equal\n");
+ ret = RtlEqualSid(sid2, (PSID)&ace->SidStart) || RtlEqualSid(sidwin7, (PSID)&ace->SidStart);
+ ok(ret, "SID not equal\n");
+
+ ExFreePool(sid1);
+ ExFreePool(sid2);
@@ -104,7 +120,7 @@ index c8797e8d8e0..168b47941e8 100644
static NTSTATUS main_test(DEVICE_OBJECT *device, IRP *irp, IO_STACK_LOCATION *stack)
{
void *buffer = irp->AssociatedIrp.SystemBuffer;
@@ -2417,6 +2481,7 @@ static NTSTATUS main_test(DEVICE_OBJECT *device, IRP *irp, IO_STACK_LOCATION *st
@@ -2438,6 +2518,7 @@ static NTSTATUS main_test(DEVICE_OBJECT *device, IRP *irp, IO_STACK_LOCATION *st
test_process_memory(test_input);
test_permanence();
test_driver_object_extension();
@@ -113,5 +129,5 @@ index c8797e8d8e0..168b47941e8 100644
IoMarkIrpPending(irp);
IoQueueWorkItem(work_item, main_test_task, DelayedWorkQueue, irp);
--
2.40.1
2.42.0

View File

@@ -1,4 +1,4 @@
From e11874a28a68cd3cd9c031f475d59435d94aa3fc Mon Sep 17 00:00:00 2001
From b26ba4d86df312d28bc2422ed1e544b058e4aacd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Tue, 8 Sep 2020 18:43:52 +0200
Subject: [PATCH] msxml3: Implement FreeThreadedXMLHTTP60.
@@ -16,7 +16,7 @@ Update from Gijs Vermeulen <gijsvrm@gmail.com>
8 files changed, 915 insertions(+), 16 deletions(-)
diff --git a/dlls/msxml3/Makefile.in b/dlls/msxml3/Makefile.in
index 2bf789732da..e2d737599b1 100644
index 7e59a223143..5044c4e2c79 100644
--- a/dlls/msxml3/Makefile.in
+++ b/dlls/msxml3/Makefile.in
@@ -1,5 +1,5 @@
@@ -25,7 +25,7 @@ index 2bf789732da..e2d737599b1 100644
+IMPORTS = $(XSLT_PE_LIBS) $(XML2_PE_LIBS) uuid urlmon shlwapi oleaut32 ole32 user32 advapi32 rtworkq
EXTRAINCL = $(XSLT_PE_CFLAGS) $(XML2_PE_CFLAGS)
C_SRCS = \
SOURCES = \
diff --git a/dlls/msxml3/factory.c b/dlls/msxml3/factory.c
index 243ee379712..323c7b49848 100644
--- a/dlls/msxml3/factory.c
@@ -1101,5 +1101,5 @@ index 7396826a1f6..b2d8bd3b337 100644
helpstring("XML DOM Document 6.0"),
progid("Msxml2.DOMDocument.6.0"),
--
2.41.0
2.42.0

View File

@@ -1,144 +0,0 @@
From ed725c78b5deb6c482a60ac26eda5f5d58ab531c Mon Sep 17 00:00:00 2001
From: Paul Gofman <pgofman@codeweavers.com>
Date: Tue, 26 Oct 2021 19:07:26 +0300
Subject: [PATCH] ntdll: Don't use Wine frames during exception processing on
x64.
CW-Bug-ID: #19570
---
dlls/ntdll/signal_x86_64.c | 65 +++++++++++++++++++++++++++-----------
1 file changed, 46 insertions(+), 19 deletions(-)
diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index ac543338893..f2c7cad5675 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -348,15 +348,32 @@ __ASM_GLOBAL_FUNC( RtlCaptureContext,
"fxsave 0x100(%rcx)\n\t" /* context->FltSave */
"ret" );
-static DWORD __cdecl nested_exception_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame,
+DWORD __cdecl nested_exception_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame,
CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher )
{
+ TRACE( "exception flags %#x.\n", rec->ExceptionFlags );
+
if (!(rec->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND)))
- rec->ExceptionFlags |= EH_NESTED_CALL;
+ return ExceptionNestedException;
return ExceptionContinueSearch;
}
+/***********************************************************************
+ * exception_handler_call_wrapper
+ */
+DWORD exception_handler_call_wrapper( EXCEPTION_RECORD *rec, void *frame,
+ CONTEXT *context, DISPATCHER_CONTEXT *dispatch );
+__ASM_GLOBAL_FUNC( exception_handler_call_wrapper,
+ __ASM_SEH(".seh_endprologue\n\t")
+ "subq $0x28, %rsp\n\t"
+ __ASM_SEH(".seh_stackalloc 0x28\n\t")
+ __ASM_SEH(".seh_handler nested_exception_handler, @except\n\t")
+ "callq *0x30(%r9)\n\t" /* dispatch->LanguageHandler */
+ "nop\n\t"
+ "addq $0x28, %rsp\n\t"
+ "ret" );
+
/**********************************************************************
* call_handler
*
@@ -365,19 +382,19 @@ static DWORD __cdecl nested_exception_handler( EXCEPTION_RECORD *rec, EXCEPTION_
*/
static DWORD call_handler( EXCEPTION_RECORD *rec, CONTEXT *context, DISPATCHER_CONTEXT *dispatch )
{
- EXCEPTION_REGISTRATION_RECORD frame;
DWORD res;
- frame.Handler = nested_exception_handler;
- __wine_push_frame( &frame );
-
TRACE_(seh)( "calling handler %p (rec=%p, frame=%p context=%p, dispatch=%p)\n",
dispatch->LanguageHandler, rec, (void *)dispatch->EstablisherFrame, dispatch->ContextRecord, dispatch );
- res = dispatch->LanguageHandler( rec, (void *)dispatch->EstablisherFrame, context, dispatch );
+ res = exception_handler_call_wrapper( rec, (void *)dispatch->EstablisherFrame, context, dispatch );
TRACE_(seh)( "handler at %p returned %lu\n", dispatch->LanguageHandler, res );
rec->ExceptionFlags &= EH_NONCONTINUABLE;
- __wine_pop_frame( &frame );
+ if (res == ExceptionNestedException)
+ {
+ rec->ExceptionFlags |= EH_NESTED_CALL;
+ res = ExceptionContinueSearch;
+ }
return res;
}
@@ -992,7 +1009,8 @@ PVOID WINAPI RtlVirtualUnwind( ULONG type, ULONG64 base, ULONG64 pc,
struct unwind_exception_frame
{
- EXCEPTION_REGISTRATION_RECORD frame;
+ BYTE dummy[0x28];
+ void *rip;
DISPATCHER_CONTEXT *dispatch;
};
@@ -1001,7 +1019,7 @@ struct unwind_exception_frame
*
* Handler for exceptions happening while calling an unwind handler.
*/
-static DWORD __cdecl unwind_exception_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame,
+DWORD __cdecl unwind_exception_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame,
CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher )
{
struct unwind_exception_frame *unwind_frame = (struct unwind_exception_frame *)frame;
@@ -1021,27 +1039,36 @@ static DWORD __cdecl unwind_exception_handler( EXCEPTION_RECORD *rec, EXCEPTION_
return ExceptionCollidedUnwind;
}
+/***********************************************************************
+ * exception_handler_call_wrapper
+ */
+DWORD unwind_handler_call_wrapper( EXCEPTION_RECORD *rec, void *frame,
+ CONTEXT *context, DISPATCHER_CONTEXT *dispatch );
+__ASM_GLOBAL_FUNC( unwind_handler_call_wrapper,
+ __ASM_SEH(".seh_endprologue\n\t")
+ "movq %r9, 0x8(%rsp)\n\t"
+ "subq $0x28, %rsp\n\t"
+ __ASM_SEH(".seh_stackalloc 0x28\n\t")
+ __ASM_SEH(".seh_handler unwind_exception_handler, @except, @unwind\n\t")
+ "callq *0x30(%r9)\n\t" /* dispatch->LanguageHandler */
+ "nop\n\t"
+ "addq $0x28, %rsp\n\t"
+ "ret" );
+
/**********************************************************************
* call_unwind_handler
*
* Call a single unwind handler.
*/
-static DWORD call_unwind_handler( EXCEPTION_RECORD *rec, DISPATCHER_CONTEXT *dispatch )
+DWORD call_unwind_handler( EXCEPTION_RECORD *rec, DISPATCHER_CONTEXT *dispatch )
{
- struct unwind_exception_frame frame;
DWORD res;
- frame.frame.Handler = unwind_exception_handler;
- frame.dispatch = dispatch;
- __wine_push_frame( &frame.frame );
-
TRACE( "calling handler %p (rec=%p, frame=%p context=%p, dispatch=%p)\n",
dispatch->LanguageHandler, rec, (void *)dispatch->EstablisherFrame, dispatch->ContextRecord, dispatch );
- res = dispatch->LanguageHandler( rec, (void *)dispatch->EstablisherFrame, dispatch->ContextRecord, dispatch );
+ res = unwind_handler_call_wrapper( rec, (void *)dispatch->EstablisherFrame, dispatch->ContextRecord, dispatch );
TRACE( "handler %p returned %lx\n", dispatch->LanguageHandler, res );
- __wine_pop_frame( &frame.frame );
-
switch (res)
{
case ExceptionContinueSearch:
--
2.38.1

View File

@@ -1 +0,0 @@
Fixes: [52396] ntdll: Don't use Wine frames during exception processing on x64.

View File

@@ -1,4 +1,4 @@
From 41373705396aeb4703a6267148ccf663bf9a42bc Mon Sep 17 00:00:00 2001
From 6fd6c8a87ca47b28314b815f1c71a224c9598528 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 3 Mar 2016 04:52:35 +0100
Subject: [PATCH] setupapi: Rewrite DiskSpaceList logic using lists.
@@ -288,5 +288,5 @@ index 5b89fd5ca99..04bc2696236 100644
return TRUE;
}
--
2.40.1
2.42.0

View File

@@ -1,4 +1,4 @@
From 133fbf15df8b8fd81052d545da7d7d85d4bbe16e Mon Sep 17 00:00:00 2001
From 38d743d160a9bc0def832b7dc2b87e5b50fd1998 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 3 Mar 2016 05:02:21 +0100
Subject: [PATCH] setupapi: Implement SetupAddToDiskSpaceList.
@@ -9,7 +9,7 @@ Subject: [PATCH] setupapi: Implement SetupAddToDiskSpaceList.
2 files changed, 285 insertions(+), 11 deletions(-)
diff --git a/dlls/setupapi/diskspace.c b/dlls/setupapi/diskspace.c
index dcfa39b5a92..cc309f9393c 100644
index 04bc2696236..e261f6ea4b7 100644
--- a/dlls/setupapi/diskspace.c
+++ b/dlls/setupapi/diskspace.c
@@ -48,7 +48,21 @@ struct space_list
@@ -389,5 +389,5 @@ index 577b1f84a2a..3cd83c8471f 100644
+ test_SetupAddToDiskSpaceListA();
}
--
2.35.1
2.42.0

View File

@@ -1,4 +1,4 @@
From 49440e98e566e15c9785415e966b4ceb80077f06 Mon Sep 17 00:00:00 2001
From 0a4c0d6d28e4f64d693d06d3c8110b5c91089415 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 3 Mar 2016 05:03:11 +0100
Subject: [PATCH] setupapi: Implement SetupQueryDrivesInDiskSpaceList.
@@ -10,7 +10,7 @@ Subject: [PATCH] setupapi: Implement SetupQueryDrivesInDiskSpaceList.
3 files changed, 155 insertions(+), 18 deletions(-)
diff --git a/dlls/setupapi/diskspace.c b/dlls/setupapi/diskspace.c
index cc309f9393c..e59b2736300 100644
index e261f6ea4b7..1b49b9600c8 100644
--- a/dlls/setupapi/diskspace.c
+++ b/dlls/setupapi/diskspace.c
@@ -419,3 +419,88 @@ BOOL WINAPI SetupAddToDiskSpaceListA(HDSKSPC diskspace, PCSTR targetfile,
@@ -103,7 +103,7 @@ index cc309f9393c..e59b2736300 100644
+ return ret;
+}
diff --git a/dlls/setupapi/stubs.c b/dlls/setupapi/stubs.c
index af058b8eac8..55483941033 100644
index 75185de047c..7f7aed6c3fe 100644
--- a/dlls/setupapi/stubs.c
+++ b/dlls/setupapi/stubs.c
@@ -230,24 +230,6 @@ INT WINAPI SetupPromptReboot( HSPFILEQ file_queue, HWND owner, BOOL scan_only )
@@ -218,5 +218,5 @@ index 3cd83c8471f..930b957e913 100644
+ test_SetupQueryDrivesInDiskSpaceListA();
}
--
2.35.1
2.42.0

View File

@@ -1,18 +1,19 @@
From a9ca8eed486e1a1deb479643ce00a149a93b0f38 Mon Sep 17 00:00:00 2001
From 48e72ae0c9b216449b7551582802d25386ea4dc2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 4 Mar 2016 04:21:18 +0100
Subject: setupapi: Ignore deletion of added files in SetupAddToDiskSpaceList.
Subject: [PATCH] setupapi: Ignore deletion of added files in
SetupAddToDiskSpaceList.
---
dlls/setupapi/diskspace.c | 6 +++++
dlls/setupapi/tests/diskspace.c | 60 ++++++++++++++++++++++++++++++++++++++++-
dlls/setupapi/diskspace.c | 6 ++++
dlls/setupapi/tests/diskspace.c | 60 ++++++++++++++++++++++++++++++++-
2 files changed, 65 insertions(+), 1 deletion(-)
diff --git a/dlls/setupapi/diskspace.c b/dlls/setupapi/diskspace.c
index 378aa59d..0cadf72 100644
index 1b49b9600c8..ee9fdb801bb 100644
--- a/dlls/setupapi/diskspace.c
+++ b/dlls/setupapi/diskspace.c
@@ -373,6 +373,12 @@ BOOL WINAPI SetupAddToDiskSpaceListW(HDSKSPC diskspace, PCWSTR targetfile,
@@ -372,6 +372,12 @@ BOOL WINAPI SetupAddToDiskSpaceListW(HDSKSPC diskspace, PCWSTR targetfile,
list_add_tail(&list->files, &file->entry);
}
@@ -26,10 +27,10 @@ index 378aa59d..0cadf72 100644
file->operation = operation;
if (operation == FILEOP_COPY)
diff --git a/dlls/setupapi/tests/diskspace.c b/dlls/setupapi/tests/diskspace.c
index 60087d1..793d3a1 100644
index 930b957e913..0cacf9a75aa 100644
--- a/dlls/setupapi/tests/diskspace.c
+++ b/dlls/setupapi/tests/diskspace.c
@@ -440,7 +440,15 @@ static void test_SetupQuerySpaceRequiredOnDriveA(void)
@@ -428,7 +428,15 @@ static void test_SetupQuerySpaceRequiredOnDriveA(void)
ret = SetupQuerySpaceRequiredOnDriveA(handle, "F:", &space, NULL, 0);
ok(ret, "Expected SetupQuerySpaceRequiredOnDriveA to succeed\n");
@@ -46,7 +47,7 @@ index 60087d1..793d3a1 100644
ok(SetupDestroyDiskSpaceList(handle),
"Expected SetupDestroyDiskSpaceList to succeed\n");
@@ -478,6 +486,45 @@ static void test_SetupQuerySpaceRequiredOnDriveA(void)
@@ -466,6 +474,45 @@ static void test_SetupQuerySpaceRequiredOnDriveA(void)
ok(SetupDestroyDiskSpaceList(handle),
"Expected SetupDestroyDiskSpaceList to succeed\n");
@@ -92,7 +93,7 @@ index 60087d1..793d3a1 100644
handle = SetupCreateDiskSpaceListA(NULL, 0, 0);
ok(handle != NULL,
"Expected SetupCreateDiskSpaceListA to return a valid handle, got NULL\n");
@@ -492,6 +539,7 @@ static void test_SetupQuerySpaceRequiredOnDriveA(void)
@@ -480,6 +527,7 @@ static void test_SetupQuerySpaceRequiredOnDriveA(void)
ok(SetupDestroyDiskSpaceList(handle),
"Expected SetupDestroyDiskSpaceList to succeed\n");
@@ -100,7 +101,7 @@ index 60087d1..793d3a1 100644
handle = SetupCreateDiskSpaceListA(NULL, 0, SPDSL_IGNORE_DISK);
ok(handle != NULL,
"Expected SetupCreateDiskSpaceListA to return a valid handle, got NULL\n");
@@ -503,6 +551,16 @@ static void test_SetupQuerySpaceRequiredOnDriveA(void)
@@ -491,6 +539,16 @@ static void test_SetupQuerySpaceRequiredOnDriveA(void)
ok(ret, "Expected SetupQuerySpaceRequiredOnDriveA to succeed\n");
ok(space == 0, "Expected size = 0, got %s\n", debugstr_longlong(space));
@@ -118,5 +119,5 @@ index 60087d1..793d3a1 100644
"Expected SetupDestroyDiskSpaceList to succeed\n");
}
--
2.7.1
2.42.0

View File

@@ -1,4 +1,4 @@
From e332b9169147c9956e498133be4164ae8597681b Mon Sep 17 00:00:00 2001
From f38d21bbc42cc448931a4c1f4c7781db0b525c91 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 4 Mar 2016 04:53:00 +0100
Subject: [PATCH] setupapi: ImplementSetupAddSectionToDiskSpaceList.
@@ -432,5 +432,5 @@ index 0cacf9a75aa..8e2eb88bf93 100644
+ test_SetupAddSectionToDiskSpaceListA();
}
--
2.40.1
2.42.0

View File

@@ -1,4 +1,4 @@
From 1d7906d21e3a04ed01e0b6ba49879c18c7061fb8 Mon Sep 17 00:00:00 2001
From c3ba1fbd5560fa0aaa791d8099ed25be93176b97 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 4 Mar 2016 04:54:37 +0100
Subject: [PATCH] setupapi: Implement SetupAddInstallSectionToDiskSpaceList.
@@ -11,7 +11,7 @@ Subject: [PATCH] setupapi: Implement SetupAddInstallSectionToDiskSpaceList.
4 files changed, 266 insertions(+), 5 deletions(-)
diff --git a/dlls/setupapi/diskspace.c b/dlls/setupapi/diskspace.c
index 436af0ec1f0..3ef91e79632 100644
index 3d1e96f43c3..39663aac07a 100644
--- a/dlls/setupapi/diskspace.c
+++ b/dlls/setupapi/diskspace.c
@@ -295,14 +295,93 @@ BOOL WINAPI SetupAddSectionToDiskSpaceListA(HDSKSPC diskspace, HINF hinf, HINF h
@@ -335,5 +335,5 @@ index 21992ead500..41a0f720c7c 100644
BOOL WINAPI SetupAddSectionToDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, UINT, PVOID, UINT);
#define SetupAddSectionToDiskSpaceList WINELIB_NAME_AW(SetupAddSectionToDiskSpaceList)
--
2.38.1
2.42.0

View File

@@ -1,4 +1,4 @@
From 4c2973947ad85bbed99b3149462eb73e823c977a Mon Sep 17 00:00:00 2001
From b652c99cce554343ab9a25b9b0c043a7ffdf53f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Mon, 8 May 2017 23:33:45 +0200
Subject: [PATCH] shell32: Add security property tab.
@@ -11,7 +11,7 @@ Subject: [PATCH] shell32: Add security property tab.
4 files changed, 438 insertions(+), 1 deletion(-)
diff --git a/dlls/shell32/Makefile.in b/dlls/shell32/Makefile.in
index ad2f8cc0e45..8efcbfb4dbf 100644
index 743df597ee4..9342384b6ba 100644
--- a/dlls/shell32/Makefile.in
+++ b/dlls/shell32/Makefile.in
@@ -1,7 +1,7 @@
@@ -22,7 +22,7 @@ index ad2f8cc0e45..8efcbfb4dbf 100644
+IMPORTS = uuid shlwapi user32 gdi32 advapi32 aclui
DELAYIMPORTS = ole32 oleaut32 shdocvw version comctl32 comdlg32 gdiplus
C_SRCS = \
SOURCES = \
diff --git a/dlls/shell32/shell32.rc b/dlls/shell32/shell32.rc
index 264947d337d..90898b7ed98 100644
--- a/dlls/shell32/shell32.rc
@@ -515,5 +515,5 @@ index 210046e729d..0f3a64f16d2 100644
#define IDS_RECYCLEBIN_FOLDER_NAME 8964
--
2.40.1
2.42.0

View File

@@ -29,11 +29,11 @@ index 374adf3991a..faa863d3ea4 100644
+ FILETIME kernelTime;
+ FILETIME userTime;
+ ULARGE_INTEGER li;
+
+
+ GetProcessTimes(GetCurrentProcess(), &createTime, &exitTime, &kernelTime, &userTime);
+ li.LowPart = userTime.dwLowDateTime;
+ li.HighPart = userTime.dwHighDateTime;
+
+
+ return (double)li.QuadPart / 10000000.0;
+}
+

Some files were not shown because too many files have changed in this diff Show More