Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/combase/combase.c | 20 ++++++++++++++++++++ dlls/combase/combase.spec | 2 +- dlls/ole32/compobj.c | 33 --------------------------------- dlls/ole32/ole32.spec | 2 +- 4 files changed, 22 insertions(+), 35 deletions(-)
diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c index e63cce00dda..7f1d6a63201 100644 --- a/dlls/combase/combase.c +++ b/dlls/combase/combase.c @@ -567,3 +567,23 @@ HRESULT WINAPI CoImpersonateClient(void)
return hr; } + +/*********************************************************************** + * CoRevertToSelf (combase.@) + */ +HRESULT WINAPI CoRevertToSelf(void) +{ + IServerSecurity *server_security; + HRESULT hr; + + TRACE("\n"); + + hr = CoGetCallContext(&IID_IServerSecurity, (void **)&server_security); + if (SUCCEEDED(hr)) + { + hr = IServerSecurity_RevertToSelf(server_security); + IServerSecurity_Release(server_security); + } + + return hr; +} diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec index 3122588d7e3..83a3d32aa65 100644 --- a/dlls/combase/combase.spec +++ b/dlls/combase/combase.spec @@ -149,7 +149,7 @@ @ stdcall CoReleaseServerProcess() ole32.CoReleaseServerProcess @ stdcall CoResumeClassObjects() ole32.CoResumeClassObjects @ stub CoRetireServer -@ stdcall CoRevertToSelf() ole32.CoRevertToSelf +@ stdcall CoRevertToSelf() @ stdcall CoRevokeClassObject(long) ole32.CoRevokeClassObject @ stdcall CoRevokeInitializeSpy(int64) ole32.CoRevokeInitializeSpy @ stdcall CoRevokeMallocSpy() diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index 507cc451e20..06dd4aefc72 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -4250,39 +4250,6 @@ HRESULT WINAPI CoSwitchCallContext(IUnknown *pObject, IUnknown **ppOldObject) return S_OK; }
-/*********************************************************************** - * CoRevertToSelf [OLE32.@] - * - * Ends the impersonation of the client of the currently executing server - * call in the current thread. - * - * PARAMS - * None. - * - * RETURNS - * Success: S_OK. - * Failure: HRESULT code. - * - * SEE ALSO - * CoImpersonateClient, CoQueryClientBlanket, CoGetCallContext. - */ -HRESULT WINAPI CoRevertToSelf(void) -{ - IServerSecurity *pSrvSec; - HRESULT hr; - - TRACE("\n"); - - hr = CoGetCallContext(&IID_IServerSecurity, (void **)&pSrvSec); - if (SUCCEEDED(hr)) - { - hr = IServerSecurity_RevertToSelf(pSrvSec); - IServerSecurity_Release(pSrvSec); - } - - return hr; -} - static BOOL COM_PeekMessage(struct apartment *apt, MSG *msg) { /* first try to retrieve messages for incoming COM calls to the apartment window */ diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec index 049dd0ad616..e23c57b4041 100644 --- a/dlls/ole32/ole32.spec +++ b/dlls/ole32/ole32.spec @@ -75,7 +75,7 @@ @ stdcall CoReleaseMarshalData(ptr) @ stdcall CoReleaseServerProcess() @ stdcall CoResumeClassObjects() -@ stdcall CoRevertToSelf() +@ stdcall CoRevertToSelf() combase.CoRevertToSelf @ stdcall CoRevokeClassObject(long) @ stdcall CoRevokeInitializeSpy(int64) @ stdcall CoRevokeMallocSpy() combase.CoRevokeMallocSpy
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/combase/combase.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec index 83a3d32aa65..e67e7159bde 100644 --- a/dlls/combase/combase.spec +++ b/dlls/combase/combase.spec @@ -76,7 +76,7 @@ @ stub CoAllowUnmarshalerCLSID @ stub CoCancelCall @ stdcall CoCopyProxy(ptr ptr) -@ stub CoCreateErrorInfo +@ stdcall CoCreateErrorInfo(ptr) CreateErrorInfo @ stdcall CoCreateFreeThreadedMarshaler(ptr ptr) ole32.CoCreateFreeThreadedMarshaler @ stdcall CoCreateGuid(ptr) @ stdcall CoCreateInstance(ptr ptr long ptr ptr) ole32.CoCreateInstance
Signed-off-by: Huw Davies huw@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/combase/combase.c | 20 ++++++++++++++++++++ dlls/combase/combase.spec | 2 +- dlls/ole32/compobj.c | 28 ---------------------------- dlls/ole32/ole32.spec | 2 +- 4 files changed, 22 insertions(+), 30 deletions(-)
diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c index 7f1d6a63201..752658012c4 100644 --- a/dlls/combase/combase.c +++ b/dlls/combase/combase.c @@ -20,6 +20,8 @@ #define COBJMACROS #define NONAMELESSUNION
+#define USE_COM_CONTEXT_DEF +#include "objbase.h" #include "oleauto.h"
#include "wine/debug.h" @@ -587,3 +589,21 @@ HRESULT WINAPI CoRevertToSelf(void)
return hr; } + +/*********************************************************************** + * CoGetObjectContext (combase.@) + */ +HRESULT WINAPI CoGetObjectContext(REFIID riid, void **ppv) +{ + IObjContext *context; + HRESULT hr; + + TRACE("%s, %p.\n", debugstr_guid(riid), ppv); + + *ppv = NULL; + hr = CoGetContextToken((ULONG_PTR *)&context); + if (FAILED(hr)) + return hr; + + return IObjContext_QueryInterface(context, riid, ppv); +} diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec index e67e7159bde..c84c10a21f1 100644 --- a/dlls/combase/combase.spec +++ b/dlls/combase/combase.spec @@ -113,7 +113,7 @@ @ stdcall CoGetMalloc(long ptr) @ stdcall CoGetMarshalSizeMax(ptr ptr ptr long ptr long) ole32.CoGetMarshalSizeMax @ stub CoGetModuleType -@ stdcall CoGetObjectContext(ptr ptr) ole32.CoGetObjectContext +@ stdcall CoGetObjectContext(ptr ptr) @ stdcall CoGetPSClsid(ptr ptr) ole32.CoGetPSClsid @ stub CoGetProcessIdentifier @ stdcall CoGetStandardMarshal(ptr ptr long ptr long ptr) ole32.CoGetStandardMarshal diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index 06dd4aefc72..6a0c518081e 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -4789,34 +4789,6 @@ static const IObjContextVtbl Context_Object_Vtbl = Context_OC_Reserved7 };
-/*********************************************************************** - * CoGetObjectContext [OLE32.@] - * - * Retrieves an object associated with the current context (i.e. apartment). - * - * PARAMS - * riid [I] ID of the interface of the object to retrieve. - * ppv [O] Address where object will be stored on return. - * - * RETURNS - * Success: S_OK. - * Failure: HRESULT code. - */ -HRESULT WINAPI CoGetObjectContext(REFIID riid, void **ppv) -{ - IObjContext *context; - HRESULT hr; - - TRACE("(%s, %p)\n", debugstr_guid(riid), ppv); - - *ppv = NULL; - hr = CoGetContextToken((ULONG_PTR*)&context); - if (FAILED(hr)) - return hr; - - return IObjContext_QueryInterface(context, riid, ppv); -} - /*********************************************************************** * CoGetContextToken [OLE32.@] */ diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec index e23c57b4041..faccb54292d 100644 --- a/dlls/ole32/ole32.spec +++ b/dlls/ole32/ole32.spec @@ -41,7 +41,7 @@ @ stdcall CoGetMalloc(long ptr) combase.CoGetMalloc @ stdcall CoGetMarshalSizeMax(ptr ptr ptr long ptr long) @ stdcall CoGetObject(wstr ptr ptr ptr) -@ stdcall CoGetObjectContext(ptr ptr) +@ stdcall CoGetObjectContext(ptr ptr) combase.CoGetObjectContext @ stdcall CoGetPSClsid(ptr ptr) @ stdcall CoGetStandardMarshal(ptr ptr long ptr long ptr) @ stdcall CoGetState(ptr)
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=76639
Your paranoid android.
=== debiant (32 bit WoW report) ===
ole32: clipboard.c:1051: Test failed: OleIsCurrentClipboard returned 0 clipboard.c:1119: Test failed: 1 WM_DRAWCLIPBOARD received
Signed-off-by: Huw Davies huw@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/combase/combase.c | 10 ++++++++++ dlls/combase/combase.spec | 2 +- dlls/ole32/ole32.spec | 2 +- dlls/ole32/ole32_main.c | 9 --------- 4 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c index 752658012c4..7947109fef5 100644 --- a/dlls/combase/combase.c +++ b/dlls/combase/combase.c @@ -607,3 +607,13 @@ HRESULT WINAPI CoGetObjectContext(REFIID riid, void **ppv)
return IObjContext_QueryInterface(context, riid, ppv); } + +/*********************************************************************** + * CoGetCallState (combase.@) + */ +HRESULT WINAPI CoGetCallState(int arg1, ULONG *arg2) +{ + FIXME("%d, %p.\n", arg1, arg2); + + return E_NOTIMPL; +} diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec index c84c10a21f1..b9ccea59132 100644 --- a/dlls/combase/combase.spec +++ b/dlls/combase/combase.spec @@ -97,7 +97,7 @@ @ stub CoGetApartmentID @ stdcall CoGetApartmentType(ptr ptr) ole32.CoGetApartmentType @ stdcall CoGetCallContext(ptr ptr) ole32.CoGetCallContext -@ stdcall CoGetCallState(long ptr) ole32.CoGetCallState +@ stdcall CoGetCallState(long ptr) @ stdcall CoGetCallerTID(ptr) ole32.CoGetCallerTID @ stub CoGetCancelObject @ stdcall CoGetClassObject(ptr long ptr ptr ptr) ole32.CoGetClassObject diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec index faccb54292d..370a32eeaed 100644 --- a/dlls/ole32/ole32.spec +++ b/dlls/ole32/ole32.spec @@ -28,7 +28,7 @@ @ stdcall CoGetActivationState(int128 long ptr) @ stdcall CoGetApartmentType(ptr ptr) @ stdcall CoGetCallContext(ptr ptr) -@ stdcall CoGetCallState(long ptr) +@ stdcall CoGetCallState(long ptr) combase.CoGetCallState @ stdcall CoGetCallerTID(ptr) @ stdcall CoGetClassObject(ptr long ptr ptr ptr) @ stdcall CoGetContextToken(ptr) diff --git a/dlls/ole32/ole32_main.c b/dlls/ole32/ole32_main.c index 414fdf2b36f..13b3d3681b1 100644 --- a/dlls/ole32/ole32_main.c +++ b/dlls/ole32/ole32_main.c @@ -167,15 +167,6 @@ HRESULT WINAPI CoGetActivationState(GUID guid, DWORD unknown, DWORD *unknown2) return E_NOTIMPL; }
-/*********************************************************************** - * CoGetCallState (ole32.@) - */ -HRESULT WINAPI CoGetCallState(int unknown, PULONG unknown2) -{ - FIXME("%d, %p\n", unknown, unknown2); - return E_NOTIMPL; -} - /****************************************************************************** * IsValidInterface [OLE32.@] *
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=76640
Your paranoid android.
=== debiant (32 bit WoW report) ===
ole32: clipboard.c:1051: Test failed: OleIsCurrentClipboard returned 0 clipboard.c:1119: Test failed: 1 WM_DRAWCLIPBOARD received
Signed-off-by: Huw Davies huw@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/combase/combase.c | 10 ++++++++++ dlls/combase/combase.spec | 2 +- dlls/ole32/ole32.spec | 2 +- dlls/ole32/ole32_main.c | 9 --------- 4 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c index 7947109fef5..1370aa82718 100644 --- a/dlls/combase/combase.c +++ b/dlls/combase/combase.c @@ -617,3 +617,13 @@ HRESULT WINAPI CoGetCallState(int arg1, ULONG *arg2)
return E_NOTIMPL; } + +/*********************************************************************** + * CoGetActivationState (combase.@) + */ +HRESULT WINAPI CoGetActivationState(GUID guid, DWORD arg2, DWORD *arg3) +{ + FIXME("%s, %x, %p.\n", debugstr_guid(&guid), arg2, arg3); + + return E_NOTIMPL; +} diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec index b9ccea59132..4f737aeb53a 100644 --- a/dlls/combase/combase.spec +++ b/dlls/combase/combase.spec @@ -93,7 +93,7 @@ @ stdcall CoFileTimeNow(ptr) @ stdcall CoFreeUnusedLibraries() ole32.CoFreeUnusedLibraries @ stdcall CoFreeUnusedLibrariesEx(long long) ole32.CoFreeUnusedLibrariesEx -@ stdcall CoGetActivationState(int128 long ptr) ole32.CoGetActivationState +@ stdcall CoGetActivationState(int128 long ptr) @ stub CoGetApartmentID @ stdcall CoGetApartmentType(ptr ptr) ole32.CoGetApartmentType @ stdcall CoGetCallContext(ptr ptr) ole32.CoGetCallContext diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec index 370a32eeaed..ef074bbc26e 100644 --- a/dlls/ole32/ole32.spec +++ b/dlls/ole32/ole32.spec @@ -25,7 +25,7 @@ @ stdcall CoFreeLibrary(long) @ stdcall CoFreeUnusedLibraries() @ stdcall CoFreeUnusedLibrariesEx(long long) -@ stdcall CoGetActivationState(int128 long ptr) +@ stdcall CoGetActivationState(int128 long ptr) combase.CoGetActivationState @ stdcall CoGetApartmentType(ptr ptr) @ stdcall CoGetCallContext(ptr ptr) @ stdcall CoGetCallState(long ptr) combase.CoGetCallState diff --git a/dlls/ole32/ole32_main.c b/dlls/ole32/ole32_main.c index 13b3d3681b1..daff46864ba 100644 --- a/dlls/ole32/ole32_main.c +++ b/dlls/ole32/ole32_main.c @@ -158,15 +158,6 @@ HGLOBAL WINAPI OleMetafilePictFromIconAndLabel(HICON hIcon, LPOLESTR lpszLabel, return hmem; }
-/*********************************************************************** - * CoGetActivationState (ole32.@) - */ -HRESULT WINAPI CoGetActivationState(GUID guid, DWORD unknown, DWORD *unknown2) -{ - FIXME("%s, %x, %p\n", debugstr_guid(&guid), unknown, unknown2); - return E_NOTIMPL; -} - /****************************************************************************** * IsValidInterface [OLE32.@] *
Signed-off-by: Huw Davies huw@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/combase/combase.c | 98 +++++++++++++++++++++++++++++++++++++++ dlls/combase/combase.spec | 2 +- dlls/ole32/compobj.c | 73 ----------------------------- dlls/ole32/ole32.spec | 2 +- 4 files changed, 100 insertions(+), 75 deletions(-)
diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c index 1370aa82718..06fc97e17d4 100644 --- a/dlls/combase/combase.c +++ b/dlls/combase/combase.c @@ -627,3 +627,101 @@ HRESULT WINAPI CoGetActivationState(GUID guid, DWORD arg2, DWORD *arg3)
return E_NOTIMPL; } + +static void init_multi_qi(DWORD count, MULTI_QI *mqi, HRESULT hr) +{ + ULONG i; + + for (i = 0; i < count; i++) + { + mqi[i].pItf = NULL; + mqi[i].hr = hr; + } +} + +static HRESULT return_multi_qi(IUnknown *unk, DWORD count, MULTI_QI *mqi, BOOL include_unk) +{ + ULONG index = 0, fetched = 0; + + if (include_unk) + { + mqi[0].hr = S_OK; + mqi[0].pItf = unk; + index = fetched = 1; + } + + for (; index < count; index++) + { + mqi[index].hr = IUnknown_QueryInterface(unk, mqi[index].pIID, (void **)&mqi[index].pItf); + if (mqi[index].hr == S_OK) + fetched++; + } + + if (!include_unk) + IUnknown_Release(unk); + + if (fetched == 0) + return E_NOINTERFACE; + + return fetched == count ? S_OK : CO_S_NOTALLINTERFACES; +} + +/*********************************************************************** + * CoGetInstanceFromFile (combase.@) + */ +HRESULT WINAPI DECLSPEC_HOTPATCH CoGetInstanceFromFile(COSERVERINFO *server_info, CLSID *rclsid, + IUnknown *outer, DWORD cls_context, DWORD grfmode, OLECHAR *filename, DWORD count, + MULTI_QI *results) +{ + IPersistFile *pf = NULL; + IUnknown *obj = NULL; + CLSID clsid; + HRESULT hr; + + if (!count || !results) + return E_INVALIDARG; + + if (server_info) + FIXME("() non-NULL server_info not supported\n"); + + init_multi_qi(count, results, E_NOINTERFACE); + + if (!rclsid) + { + hr = GetClassFile(filename, &clsid); + if (FAILED(hr)) + { + ERR("Failed to get CLSID from a file.\n"); + return hr; + } + + rclsid = &clsid; + } + + hr = CoCreateInstance(rclsid, outer, cls_context, &IID_IUnknown, (void **)&obj); + if (hr != S_OK) + { + init_multi_qi(count, results, hr); + return hr; + } + + /* Init from file */ + hr = IUnknown_QueryInterface(obj, &IID_IPersistFile, (void **)&pf); + if (FAILED(hr)) + { + init_multi_qi(count, results, hr); + IUnknown_Release(obj); + return hr; + } + + hr = IPersistFile_Load(pf, filename, grfmode); + IPersistFile_Release(pf); + if (SUCCEEDED(hr)) + return return_multi_qi(obj, count, results, FALSE); + else + { + init_multi_qi(count, results, hr); + IUnknown_Release(obj); + return hr; + } +} diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec index 4f737aeb53a..e90df05446e 100644 --- a/dlls/combase/combase.spec +++ b/dlls/combase/combase.spec @@ -107,7 +107,7 @@ @ stdcall CoGetCurrentProcess() ole32.CoGetCurrentProcess @ stdcall CoGetDefaultContext(long ptr ptr) ole32.CoGetDefaultContext @ stub CoGetErrorInfo -@ stdcall CoGetInstanceFromFile(ptr ptr ptr long long wstr long ptr) ole32.CoGetInstanceFromFile +@ stdcall CoGetInstanceFromFile(ptr ptr ptr long long wstr long ptr) @ stdcall CoGetInstanceFromIStorage(ptr ptr ptr long ptr long ptr) ole32.CoGetInstanceFromIStorage @ stdcall CoGetInterfaceAndReleaseStream(ptr ptr ptr) ole32.CoGetInterfaceAndReleaseStream @ stdcall CoGetMalloc(long ptr) diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index 6a0c518081e..1ad8a4b1d1d 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -3434,79 +3434,6 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx( return return_multi_qi(unk, cmq, pResults, TRUE); }
-/*********************************************************************** - * CoGetInstanceFromFile [OLE32.@] - */ -HRESULT WINAPI DECLSPEC_HOTPATCH CoGetInstanceFromFile( - COSERVERINFO *server_info, - CLSID *rclsid, - IUnknown *outer, - DWORD cls_context, - DWORD grfmode, - OLECHAR *filename, - DWORD count, - MULTI_QI *results -) -{ - IPersistFile *pf = NULL; - IUnknown* unk = NULL; - CLSID clsid; - HRESULT hr; - - if (count == 0 || !results) - return E_INVALIDARG; - - if (server_info) - FIXME("() non-NULL server_info not supported\n"); - - init_multi_qi(count, results, E_NOINTERFACE); - - /* optionally get CLSID from a file */ - if (!rclsid) - { - hr = GetClassFile(filename, &clsid); - if (FAILED(hr)) - { - ERR("failed to get CLSID from a file\n"); - return hr; - } - - rclsid = &clsid; - } - - hr = CoCreateInstance(rclsid, - outer, - cls_context, - &IID_IUnknown, - (void**)&unk); - - if (hr != S_OK) - { - init_multi_qi(count, results, hr); - return hr; - } - - /* init from file */ - hr = IUnknown_QueryInterface(unk, &IID_IPersistFile, (void**)&pf); - if (FAILED(hr)) - { - init_multi_qi(count, results, hr); - IUnknown_Release(unk); - return hr; - } - - hr = IPersistFile_Load(pf, filename, grfmode); - IPersistFile_Release(pf); - if (SUCCEEDED(hr)) - return return_multi_qi(unk, count, results, FALSE); - else - { - init_multi_qi(count, results, hr); - IUnknown_Release(unk); - return hr; - } -} - /*********************************************************************** * CoGetInstanceFromIStorage [OLE32.@] */ diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec index ef074bbc26e..b1949eec8ec 100644 --- a/dlls/ole32/ole32.spec +++ b/dlls/ole32/ole32.spec @@ -35,7 +35,7 @@ @ stdcall CoGetCurrentLogicalThreadId(ptr) @ stdcall CoGetCurrentProcess() @ stdcall CoGetDefaultContext(long ptr ptr) -@ stdcall CoGetInstanceFromFile(ptr ptr ptr long long wstr long ptr) +@ stdcall CoGetInstanceFromFile(ptr ptr ptr long long wstr long ptr) combase.CoGetInstanceFromFile @ stdcall CoGetInstanceFromIStorage(ptr ptr ptr long ptr long ptr) @ stdcall CoGetInterfaceAndReleaseStream(ptr ptr ptr) @ stdcall CoGetMalloc(long ptr) combase.CoGetMalloc
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=76642
Your paranoid android.
=== debiant (32 bit Chinese:China report) ===
ole32: clipboard.c:1529: Test failed: gle 5 clipboard.c:1531: Test failed: gle 1418 clipboard.c:1533: Test failed: gle 1418 clipboard.c:1541: Test failed: got 800401d0 Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x00406970).
Report validation errors: ole32:clipboard crashed (c0000005)
Signed-off-by: Huw Davies huw@codeweavers.com