Rebase against dd2624a24fba400bf59b9396e496d16c43d399d9

This commit is contained in:
Alistair Leslie-Hughes 2018-04-10 08:59:38 +10:00
parent 35999cf261
commit a596208a7f
8 changed files with 12 additions and 358 deletions

View File

@ -1,4 +1,4 @@
From 877a0c022af59c3b863edf358242829565ed7cbb Mon Sep 17 00:00:00 2001
From 89e0f1fded64240d2f59fd800232e9e9f8dd90d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 4 Mar 2016 22:22:42 +0100
Subject: [PATCH] ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
@ -12,7 +12,7 @@ Subject: [PATCH] ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
5 files changed, 106 insertions(+)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 33e18b8d6a..2628b7654f 100644
index 33e18b8..2628b76 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -1542,6 +1542,8 @@ static HRESULT WINAPI ddraw7_GetCaps(IDirectDraw7 *iface, DDCAPS *DriverCaps, DD
@ -25,11 +25,11 @@ index 33e18b8d6a..2628b7654f 100644
if(DriverCaps)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index 626b07bace..a7e5bcd6e7 100644
index c63ddee..b9eec25 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -11247,6 +11247,31 @@ static void test_enum_surfaces(void)
IDirectDraw_Release(ddraw);
@@ -11373,6 +11373,31 @@ static void test_execute_data(void)
DestroyWindow(window);
}
+static void test_caps(void)
@ -60,14 +60,14 @@ index 626b07bace..a7e5bcd6e7 100644
START_TEST(ddraw1)
{
DDDEVICEIDENTIFIER identifier;
@@ -11348,4 +11373,5 @@ START_TEST(ddraw1)
test_depth_readback();
@@ -11475,4 +11500,5 @@ START_TEST(ddraw1)
test_clear();
test_enum_surfaces();
test_execute_data();
+ test_caps();
}
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index 1ab1f9c591..272f364b7f 100644
index 1ab1f9c..272f364 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -12646,6 +12646,31 @@ static void test_enum_surfaces(void)
@ -109,7 +109,7 @@ index 1ab1f9c591..272f364b7f 100644
+ test_caps();
}
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 550d73a1bd..f3c020c89c 100644
index 550d73a..f3c020c 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -14751,6 +14751,31 @@ static void test_enum_surfaces(void)
@ -151,7 +151,7 @@ index 550d73a1bd..f3c020c89c 100644
+ test_caps();
}
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index b4910c196c..bf1e1cf120 100644
index b4910c1..bf1e1cf 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -14289,6 +14289,31 @@ static void test_viewport(void)
@ -193,5 +193,5 @@ index b4910c196c..bf1e1cf120 100644
+ test_caps();
}
--
2.16.2
1.9.1

View File

@ -1,61 +0,0 @@
From 67b4323b39e2ec316ea698d9ecd9176b472983eb Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 28 Mar 2018 16:16:27 +1100
Subject: [PATCH] ntoskrnl: Add
PsAcquireProcessExitSynchronization/PsReleaseProcessExitSynchronization stub
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/ntoskrnl.exe/ntoskrnl.c | 18 ++++++++++++++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 ++
2 files changed, 20 insertions(+)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 58383e5..0ebe365 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -3511,3 +3511,21 @@ __ASM_STDCALL_FUNC( _chkstk, 0,
__ASM_GLOBAL_FUNC( __chkstk, "lsl r4, r4, #2\n\t"
"bx lr" )
#endif
+
+/*********************************************************************
+ * PsAcquireProcessExitSynchronization (NTOSKRNL.@)
+*/
+NTSTATUS WINAPI PsAcquireProcessExitSynchronization(PEPROCESS process)
+{
+ FIXME("stub: %p\n", process);
+
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+/*********************************************************************
+ * PsReleaseProcessExitSynchronization (NTOSKRNL.@)
+ */
+void WINAPI PsReleaseProcessExitSynchronization(PEPROCESS process)
+{
+ FIXME("stub: %p\n", process);
+}
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index de3307d..7b7b4d4 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -844,6 +844,7 @@
@ stub PoUnregisterSystemState
@ stdcall ProbeForRead(ptr long long)
@ stdcall ProbeForWrite(ptr long long)
+@ stdcall PsAcquireProcessExitSynchronization(ptr)
@ stub PsAssignImpersonationToken
@ stub PsChargePoolQuota
@ stub PsChargeProcessNonPagedPoolQuota
@@ -905,6 +906,7 @@
@ stub PsProcessType
@ stub PsReferenceImpersonationToken
@ stub PsReferencePrimaryToken
+@ stdcall PsReleaseProcessExitSynchronization(ptr)
@ stdcall PsRemoveCreateThreadNotifyRoutine(ptr)
@ stdcall PsRemoveLoadImageNotifyRoutine(ptr)
@ stub PsRestoreImpersonation
--
1.9.1

View File

@ -1,49 +0,0 @@
From 4a6df954553de0f5a82e3e24eaf73bd48b22389e Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 28 Mar 2018 17:09:46 +1100
Subject: [PATCH] ntoskrnl: Add ExfUnblockPushLock stub
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/ntoskrnl.exe/ntoskrnl.c | 15 +++++++++++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 1 +
2 files changed, 16 insertions(+)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 0ebe365..f9a3a63 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -3529,3 +3529,18 @@ void WINAPI PsReleaseProcessExitSynchronization(PEPROCESS process)
{
FIXME("stub: %p\n", process);
}
+
+typedef struct _EX_PUSH_LOCK_WAIT_BLOCK *PEX_PUSH_LOCK_WAIT_BLOCK;
+/*********************************************************************
+ * ExfUnblockPushLock (NTOSKRNL.@)
+ */
+#ifdef DEFINE_FASTCALL2_ENTRYPOINT
+DEFINE_FASTCALL2_ENTRYPOINT( ExfUnblockPushLock )
+void WINAPI DECLSPEC_HIDDEN __regs_ExfUnblockPushLock( EX_PUSH_LOCK *lock,
+ PEX_PUSH_LOCK_WAIT_BLOCK block)
+#else
+void WINAPI ExfUnblockPushLock( EX_PUSH_LOCK *lock, PEX_PUSH_LOCK_WAIT_BLOCK block )
+#endif
+{
+ FIXME( "stub: %p, %p\n", lock, block );
+}
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 7b7b4d4..87e5685 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -133,6 +133,7 @@
@ stub ExEnumHandleTable
@ stub ExEventObjectType
@ stub ExExtendZone
+@ stdcall -norelay ExfUnblockPushLock(ptr ptr)
@ stdcall ExFreePool(ptr)
@ stdcall ExFreePoolWithTag(ptr long)
@ stub ExFreeToPagedLookasideList
--
1.9.1

View File

@ -1,45 +0,0 @@
From 8796964cd51e0edc14963425bd7ab5ef11f9c5f1 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 28 Mar 2018 18:00:30 +1100
Subject: [PATCH] ntoskrnl: Add PsGetProcessId stub
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/ntoskrnl.exe/ntoskrnl.c | 10 ++++++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index f9a3a63..a06479c 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -3544,3 +3544,13 @@ void WINAPI ExfUnblockPushLock( EX_PUSH_LOCK *lock, PEX_PUSH_LOCK_WAIT_BLOCK blo
{
FIXME( "stub: %p, %p\n", lock, block );
}
+
+/*********************************************************************
+ * PsGetProcessId (NTOSKRNL.@)
+ */
+HANDLE WINAPI PsGetProcessId(PEPROCESS process)
+{
+ FIXME("stub: %p\n", process);
+
+ return 0;
+}
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 87e5685..7801b1a 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -874,7 +874,7 @@
@ stub PsGetProcessExitProcessCalled
@ stub PsGetProcessExitStatus
@ stub PsGetProcessExitTime
-@ stub PsGetProcessId
+@ stdcall PsGetProcessId(ptr)
@ stub PsGetProcessImageFileName
@ stub PsGetProcessInheritedFromUniqueProcessId
@ stub PsGetProcessJob
--
1.9.1

View File

@ -1,47 +0,0 @@
From f3217f682f823e40dc09cd5cb07792666472aa32 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 28 Mar 2018 18:54:25 +1100
Subject: [PATCH] ntoskrnl: Add ObGetObjectType stub
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/ntoskrnl.exe/ntoskrnl.c | 10 ++++++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 1 +
2 files changed, 11 insertions(+)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index a06479c..3f3c798 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -2440,6 +2440,16 @@ USHORT WINAPI ObGetFilterVersion(void)
}
/***********************************************************************
+ * ObGetObjectType (NTOSKRNL.EXE.@)
+ */
+POBJECT_TYPE WINAPI ObGetObjectType(void *object)
+{
+ FIXME("stub: %p\n", object);
+
+ return NULL;
+}
+
+/***********************************************************************
* IoGetAttachedDeviceReference (NTOSKRNL.EXE.@)
*/
DEVICE_OBJECT* WINAPI IoGetAttachedDeviceReference( DEVICE_OBJECT *device )
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 7801b1a..8714ccd 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -808,6 +808,7 @@
@ stub ObFindHandleForObject
@ stdcall ObGetFilterVersion()
@ stub ObGetObjectSecurity
+@ stdcall ObGetObjectType(ptr)
@ stub ObInsertObject
@ stub ObLogSecurityDescriptor
@ stub ObMakeTemporaryObject
--
1.9.1

View File

@ -1,5 +1,3 @@
Fixes: Implement stubs for ntoskrnl.Ex{Acquire,Release}FastMutexUnsafe
Fixes: Implement stubs for ntoskrnl.ObReferenceObjectByPointer and ntoskrnl.ObDereferenceObject
Fixes: Fix wrong defition of ntoskrnl.IoReleaseCancelSpinLock function.
Fixes: Add stub for ntoskrnl.Mm{Map,Unmap}LockedPages
Fixes: Implement ntoskrnl.KeInitializeMutex
@ -7,5 +5,4 @@ Fixes: Add stub for ntoskrnl.IoGetDeviceAttachmentBaseRef
Fixes: Implement ntoskrnl.ExInterlockedPopEntrySList
Fixes: Implement ntoskrnl.NtBuildNumber
Fixes: Implement ntoskrnl.ExInitializeNPagedLookasideList
Fixes: [44837] Add stub for ntoskrnl.exe.Ps{Acquire,Release}ProcessExitSynchronization
Depends: Compiler_Warnings

View File

@ -1,128 +0,0 @@
From 46aa3907c61a91e1f6199088a129b838e3b900fe Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Wed, 28 Mar 2018 20:15:55 -0500
Subject: [PATCH 1/7] ole32: Always grab a reference to apt in
CoGetClassObject().
This necessitates tracking whether the apartment is currently being destroyed
(or something similar), but this would become necessary anyway.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
---
dlls/ole32/compobj.c | 26 +++++++++++++++++---------
dlls/ole32/compobj_private.h | 1 +
2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index a317bf7..1c7645b 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -1162,9 +1162,17 @@ DWORD apartment_release(struct apartment *apt)
ret = InterlockedDecrement(&apt->refs);
TRACE("%s: after = %d\n", wine_dbgstr_longlong(apt->oxid), ret);
+
+ if (apt->being_destroyed)
+ {
+ LeaveCriticalSection(&csApartment);
+ return ret;
+ }
+
/* destruction stuff that needs to happen under csApartment CS */
if (ret == 0)
{
+ apt->being_destroyed = TRUE;
if (apt == MTA) MTA = NULL;
else if (apt == MainApartment) MainApartment = NULL;
list_remove(&apt->entry);
@@ -2981,7 +2989,6 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(
IUnknown *regClassObject;
HRESULT hres = E_UNEXPECTED;
APARTMENT *apt;
- BOOL release_apt = FALSE;
TRACE("CLSID: %s,IID: %s\n", debugstr_guid(rclsid), debugstr_guid(iid));
@@ -2990,14 +2997,15 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(
*ppv = NULL;
- if (!(apt = COM_CurrentApt()))
+ if ((apt = COM_CurrentApt()))
+ apartment_addref(apt);
+ else
{
if (!(apt = apartment_find_mta()))
{
ERR("apartment not initialised\n");
return CO_E_NOTINITIALIZED;
}
- release_apt = TRUE;
}
if (pServerInfo) {
@@ -3009,7 +3017,7 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(
{
if (IsEqualCLSID(rclsid, &CLSID_InProcFreeMarshaler))
{
- if (release_apt) apartment_release(apt);
+ apartment_release(apt);
return FTMarshalCF_Create(iid, ppv);
}
if (IsEqualCLSID(rclsid, &CLSID_GlobalOptions))
@@ -3035,7 +3043,7 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(
hres = get_inproc_class_object(apt, &clsreg, &comclass->clsid, iid, !(dwClsContext & WINE_CLSCTX_DONT_HOST), ppv);
ReleaseActCtx(data.hActCtx);
- if (release_apt) apartment_release(apt);
+ apartment_release(apt);
return hres;
}
}
@@ -3056,7 +3064,7 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(
* is good since we are not returning it in the "out" parameter.
*/
IUnknown_Release(regClassObject);
- if (release_apt) apartment_release(apt);
+ apartment_release(apt);
return hres;
}
@@ -3091,7 +3099,7 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(
* other types */
if (SUCCEEDED(hres))
{
- if (release_apt) apartment_release(apt);
+ apartment_release(apt);
return hres;
}
}
@@ -3127,11 +3135,11 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(
* other types */
if (SUCCEEDED(hres))
{
- if (release_apt) apartment_release(apt);
+ apartment_release(apt);
return hres;
}
}
- if (release_apt) apartment_release(apt);
+ apartment_release(apt);
/* Next try out of process */
if (CLSCTX_LOCAL_SERVER & dwClsContext)
diff --git a/dlls/ole32/compobj_private.h b/dlls/ole32/compobj_private.h
index 9e65c3e..12413f7 100644
--- a/dlls/ole32/compobj_private.h
+++ b/dlls/ole32/compobj_private.h
@@ -142,6 +142,7 @@ struct apartment
DWORD host_apt_tid; /* thread ID of apartment hosting objects of differing threading model (CS cs) */
HWND host_apt_hwnd; /* handle to apartment window of host apartment (CS cs) */
LocalServer *local_server; /* A marshallable object exposing local servers (CS cs) */
+ BOOL being_destroyed; /* is currently being destroyed */
/* FIXME: OIDs should be given out by RPCSS */
OID oidc; /* object ID counter, starts at 1, zero is invalid OID (CS cs) */
--
2.7.4

View File

@ -52,7 +52,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "3263d51a1fd86abf195c5be224f6fdb4db284b53"
echo "dd2624a24fba400bf59b9396e496d16c43d399d9"
}
# Show version information
@ -5675,9 +5675,6 @@ fi
# | This patchset has the following (direct or indirect) dependencies:
# | * Compiler_Warnings
# |
# | This patchset fixes the following Wine bugs:
# | * [#44837] Add stub for ntoskrnl.exe.Ps{Acquire,Release}ProcessExitSynchronization
# |
# | Modified files:
# | * dlls/ntoskrnl.exe/ntoskrnl.c, dlls/ntoskrnl.exe/ntoskrnl.exe.spec, include/ddk/wdm.h, include/winnt.h
# |
@ -5691,10 +5688,6 @@ if test "$enable_ntoskrnl_Stubs" -eq 1; then
patch_apply ntoskrnl-Stubs/0012-ntoskrnl-Implement-ExInterlockedPopEntrySList.patch
patch_apply ntoskrnl-Stubs/0013-ntoskrnl.exe-Implement-NtBuildNumber.patch
patch_apply ntoskrnl-Stubs/0014-ntoskrnl.exe-Implement-ExInitializeNPagedLookasideLi.patch
patch_apply ntoskrnl-Stubs/0015-ntoskrnl-Add-PsAcquireProcessExitSynchronization-PsR.patch
patch_apply ntoskrnl-Stubs/0016-ntoskrnl-Add-ExfUnblockPushLock-stub.patch
patch_apply ntoskrnl-Stubs/0017-ntoskrnl-Add-PsGetProcessId-stub.patch
patch_apply ntoskrnl-Stubs/0018-ntoskrnl-Add-ObGetObjectType-stub.patch
(
printf '%s\n' '+ { "Alexander Morozov", "ntoskrnl.exe: Improve KeReleaseMutex stub.", 1 },';
printf '%s\n' '+ { "Alexander Morozov", "ntoskrnl.exe: Improve KeInitializeSemaphore stub.", 1 },';
@ -5705,10 +5698,6 @@ if test "$enable_ntoskrnl_Stubs" -eq 1; then
printf '%s\n' '+ { "Michael Müller", "ntoskrnl: Implement ExInterlockedPopEntrySList.", 1 },';
printf '%s\n' '+ { "Michael Müller", "ntoskrnl.exe: Implement NtBuildNumber.", 1 },';
printf '%s\n' '+ { "Michael Müller", "ntoskrnl.exe: Implement ExInitializeNPagedLookasideList.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "ntoskrnl: Add PsAcquireProcessExitSynchronization/PsReleaseProcessExitSynchronization stub.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "ntoskrnl: Add ExfUnblockPushLock stub.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "ntoskrnl: Add PsGetProcessId stub.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "ntoskrnl: Add ObGetObjectType stub.", 1 },';
) >> "$patchlist"
fi
@ -5878,7 +5867,6 @@ fi
# | dlls/ole32/tests/compobj.c, dlls/ole32/tests/marshal.c
# |
if test "$enable_ole32_Implicit_MTA" -eq 1; then
patch_apply ole32-Implicit_MTA/0001-ole32-Always-grab-a-reference-to-apt-in-CoGetClassOb.patch
patch_apply ole32-Implicit_MTA/0002-ole32-Add-a-helper-for-grabbing-the-current-apartmen.patch
patch_apply ole32-Implicit_MTA/0003-ole32-Allow-more-functions-to-use-the-implicit-MTA.patch
patch_apply ole32-Implicit_MTA/0004-ole32-Report-the-implicit-MTA-in-CoGetApartmentType.patch
@ -5886,7 +5874,6 @@ if test "$enable_ole32_Implicit_MTA" -eq 1; then
patch_apply ole32-Implicit_MTA/0006-ole32-Allow-unmarshalling-objects-into-an-implicit-M.patch
patch_apply ole32-Implicit_MTA/0007-ole32-Allow-marshalling-objects-from-an-implicit-MTA.patch
(
printf '%s\n' '+ { "Zebediah Figura", "ole32: Always grab a reference to apt in CoGetClassObject().", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "ole32: Add a helper for grabbing the current apartment or MTA.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "ole32: Allow more functions to use the implicit MTA.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "ole32: Report the implicit MTA in CoGetApartmentType().", 1 },';