mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-09-13 09:17:20 -07:00
Rebase against bc282905d9491b9f9fe4ae4b69a8ccdf99c5aaa8.
This commit is contained in:
parent
8402c95961
commit
7766c17912
@ -1,4 +1,4 @@
|
||||
From ed999d4430c1aca8f90f26670d3615cdaaab300d Mon Sep 17 00:00:00 2001
|
||||
From 44e752d89a76ba4a686f5d6b822d95c427b35bc0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 5 Aug 2017 01:45:29 +0200
|
||||
Subject: [PATCH] ntdll: Add function to create new tokens for elevation
|
||||
@ -28,12 +28,12 @@ index 0d19e12768f..e313d5807b3 100644
|
||||
@ cdecl wine_get_version() NTDLL_wine_get_version
|
||||
@ cdecl wine_get_build_id() NTDLL_wine_get_build_id
|
||||
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
|
||||
index 47800db41b1..12e7b721cb5 100644
|
||||
index e2e4d378085..14cd0bafdc0 100644
|
||||
--- a/dlls/ntdll/ntdll_misc.h
|
||||
+++ b/dlls/ntdll/ntdll_misc.h
|
||||
@@ -86,6 +86,9 @@ extern int __wine_main_argc;
|
||||
extern char **__wine_main_argv;
|
||||
extern WCHAR **__wine_main_wargv;
|
||||
@@ -73,6 +73,9 @@ extern void init_user_process_params( SIZE_T data_size ) DECLSPEC_HIDDEN;
|
||||
extern char **build_envp( const WCHAR *envW ) DECLSPEC_HIDDEN;
|
||||
extern NTSTATUS restart_process( RTL_USER_PROCESS_PARAMETERS *params, NTSTATUS status ) DECLSPEC_HIDDEN;
|
||||
|
||||
+/* token */
|
||||
+extern HANDLE CDECL __wine_create_default_token(BOOL admin);
|
||||
|
@ -1,373 +0,0 @@
|
||||
From 7d82a3f5a5bcdbf2b362c456080e59f882842b85 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 26 Jul 2019 09:51:05 +1000
|
||||
Subject: [PATCH] directmanipulation: Implement IDirectManipulationManager2
|
||||
CreateViewport
|
||||
|
||||
---
|
||||
dlls/directmanipulation/directmanipulation.c | 341 ++++++++++++++++++-
|
||||
1 file changed, 339 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c
|
||||
index 629a41c845..86e9556e70 100644
|
||||
--- a/dlls/directmanipulation/directmanipulation.c
|
||||
+++ b/dlls/directmanipulation/directmanipulation.c
|
||||
@@ -177,6 +177,334 @@ static HRESULT create_update_manager(IDirectManipulationUpdateManager **obj)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
+struct directviewport
|
||||
+{
|
||||
+ IDirectManipulationViewport2 IDirectManipulationViewport2_iface;
|
||||
+ LONG ref;
|
||||
+};
|
||||
+
|
||||
+static inline struct directviewport *impl_from_IDirectManipulationViewport2(IDirectManipulationViewport2 *iface)
|
||||
+{
|
||||
+ return CONTAINING_RECORD(iface, struct directviewport, IDirectManipulationViewport2_iface);
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_QueryInterface(IDirectManipulationViewport2 *iface, REFIID riid, void **ppv)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppv);
|
||||
+
|
||||
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
|
||||
+ IsEqualGUID(riid, &IID_IDirectManipulationViewport) ||
|
||||
+ IsEqualGUID(riid, &IID_IDirectManipulationViewport2))
|
||||
+ {
|
||||
+ IDirectManipulationViewport2_AddRef(&This->IDirectManipulationViewport2_iface);
|
||||
+ *ppv = &This->IDirectManipulationViewport2_iface;
|
||||
+ return S_OK;
|
||||
+ }
|
||||
+
|
||||
+ FIXME("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppv);
|
||||
+ return E_NOINTERFACE;
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI viewport_AddRef(IDirectManipulationViewport2 *iface)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ ULONG ref = InterlockedIncrement(&This->ref);
|
||||
+
|
||||
+ TRACE("(%p) ref=%u\n", This, ref);
|
||||
+
|
||||
+ return ref;
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI viewport_Release(IDirectManipulationViewport2 *iface)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ ULONG ref = InterlockedDecrement(&This->ref);
|
||||
+
|
||||
+ TRACE("(%p) ref=%u\n", This, ref);
|
||||
+
|
||||
+ if (!ref)
|
||||
+ {
|
||||
+ heap_free(This);
|
||||
+ }
|
||||
+ return ref;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_Enable(IDirectManipulationViewport2 *iface)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p\n", This);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_Disable(IDirectManipulationViewport2 *iface)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p\n", This);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_SetContact(IDirectManipulationViewport2 *iface, UINT32 id)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, id);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_ReleaseContact(IDirectManipulationViewport2 *iface, UINT32 id)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, id);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_ReleaseAllContacts(IDirectManipulationViewport2 *iface)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p\n", This);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_GetStatus(IDirectManipulationViewport2 *iface, DIRECTMANIPULATION_STATUS *status)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %p\n", This, status);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_GetTag(IDirectManipulationViewport2 *iface, REFIID riid, void **object, UINT32 *id)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %s, %p, %p\n", This, debugstr_guid(riid), object, id);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_SetTag(IDirectManipulationViewport2 *iface, IUnknown *object, UINT32 id)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %p, %p\n", This, object, id);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_GetViewportRect(IDirectManipulationViewport2 *iface, RECT *viewport)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %p\n", This, viewport);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_SetViewportRect(IDirectManipulationViewport2 *iface, const RECT *viewport)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %p\n", This, viewport);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_ZoomToRect(IDirectManipulationViewport2 *iface, const float left,
|
||||
+ const float top, const float right, const float bottom, BOOL animate)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %f, %f, %f, %f, %d\n", This, left, top, right, bottom, animate);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_SetViewportTransform(IDirectManipulationViewport2 *iface,
|
||||
+ const float *matrix, DWORD count)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %p, %d\n", This, matrix, count);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_SyncDisplayTransform(IDirectManipulationViewport2 *iface,
|
||||
+ const float *matrix, DWORD count)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %p, %d\n", This, matrix, count);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_GetPrimaryContent(IDirectManipulationViewport2 *iface, REFIID riid, void **object)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %s, %p\n", This, debugstr_guid(riid), object);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_AddContent(IDirectManipulationViewport2 *iface, IDirectManipulationContent *content)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %p\n", This, content);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_RemoveContent(IDirectManipulationViewport2 *iface, IDirectManipulationContent *content)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %p\n", This, content);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_SetViewportOptions(IDirectManipulationViewport2 *iface, DIRECTMANIPULATION_VIEWPORT_OPTIONS options)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, options);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_AddConfiguration(IDirectManipulationViewport2 *iface, DIRECTMANIPULATION_CONFIGURATION configuration)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, configuration);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_RemoveConfiguration(IDirectManipulationViewport2 *iface, DIRECTMANIPULATION_CONFIGURATION configuration)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, configuration);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_ActivateConfiguration(IDirectManipulationViewport2 *iface, DIRECTMANIPULATION_CONFIGURATION configuration)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, configuration);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_SetManualGesture(IDirectManipulationViewport2 *iface, DIRECTMANIPULATION_GESTURE_CONFIGURATION configuration)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, configuration);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_SetChaining(IDirectManipulationViewport2 *iface, DIRECTMANIPULATION_MOTION_TYPES enabledTypes)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, enabledTypes);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_AddEventHandler(IDirectManipulationViewport2 *iface, HWND window,
|
||||
+ IDirectManipulationViewportEventHandler *eventHandler, DWORD *cookie)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %p, %p, %p\n", This, window, eventHandler, cookie);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_RemoveEventHandler(IDirectManipulationViewport2 *iface, DWORD cookie)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, cookie);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_SetInputMode(IDirectManipulationViewport2 *iface, DIRECTMANIPULATION_INPUT_MODE mode)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, mode);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_SetUpdateMode(IDirectManipulationViewport2 *iface, DIRECTMANIPULATION_INPUT_MODE mode)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, mode);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_Stop(IDirectManipulationViewport2 *iface)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p\n", This);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_Abandon(IDirectManipulationViewport2 *iface)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p\n", This);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_AddBehavior(IDirectManipulationViewport2 *iface, IUnknown *behavior, DWORD *cookie)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %p, %p\n", This, behavior, cookie);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_RemoveBehavior(IDirectManipulationViewport2 *iface, DWORD cookie)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p, %d\n", This, cookie);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI viewport_RemoveAllBehaviors(IDirectManipulationViewport2 *iface)
|
||||
+{
|
||||
+ struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
+ FIXME("%p\n", This);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static const IDirectManipulationViewport2Vtbl viewportVtbl =
|
||||
+{
|
||||
+ viewport_QueryInterface,
|
||||
+ viewport_AddRef,
|
||||
+ viewport_Release,
|
||||
+ viewport_Enable,
|
||||
+ viewport_Disable,
|
||||
+ viewport_SetContact,
|
||||
+ viewport_ReleaseContact,
|
||||
+ viewport_ReleaseAllContacts,
|
||||
+ viewport_GetStatus,
|
||||
+ viewport_GetTag,
|
||||
+ viewport_SetTag,
|
||||
+ viewport_GetViewportRect,
|
||||
+ viewport_SetViewportRect,
|
||||
+ viewport_ZoomToRect,
|
||||
+ viewport_SetViewportTransform,
|
||||
+ viewport_SyncDisplayTransform,
|
||||
+ viewport_GetPrimaryContent,
|
||||
+ viewport_AddContent,
|
||||
+ viewport_RemoveContent,
|
||||
+ viewport_SetViewportOptions,
|
||||
+ viewport_AddConfiguration,
|
||||
+ viewport_RemoveConfiguration,
|
||||
+ viewport_ActivateConfiguration,
|
||||
+ viewport_SetManualGesture,
|
||||
+ viewport_SetChaining,
|
||||
+ viewport_AddEventHandler,
|
||||
+ viewport_RemoveEventHandler,
|
||||
+ viewport_SetInputMode,
|
||||
+ viewport_SetUpdateMode,
|
||||
+ viewport_Stop,
|
||||
+ viewport_Abandon,
|
||||
+ viewport_AddBehavior,
|
||||
+ viewport_RemoveBehavior,
|
||||
+ viewport_RemoveAllBehaviors
|
||||
+};
|
||||
+
|
||||
+static HRESULT create_viewport(IDirectManipulationViewport2 **obj)
|
||||
+{
|
||||
+ struct directviewport *object;
|
||||
+
|
||||
+ object = heap_alloc(sizeof(*object));
|
||||
+ if(!object)
|
||||
+ return E_OUTOFMEMORY;
|
||||
+
|
||||
+ object->IDirectManipulationViewport2_iface.lpVtbl = &viewportVtbl;
|
||||
+ object->ref = 1;
|
||||
+
|
||||
+ *obj = &object->IDirectManipulationViewport2_iface;
|
||||
+
|
||||
+ return S_OK;
|
||||
+}
|
||||
+
|
||||
static HRESULT WINAPI direct_manip_QueryInterface(IDirectManipulationManager2 *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
if (IsEqualGUID(riid, &IID_IUnknown) ||
|
||||
@@ -278,9 +606,18 @@ static HRESULT WINAPI direct_manip_GetUpdateManager(IDirectManipulationManager2
|
||||
static HRESULT WINAPI direct_manip_CreateViewport(IDirectManipulationManager2 *iface, IDirectManipulationFrameInfoProvider *frame,
|
||||
HWND window, REFIID riid, void **obj)
|
||||
{
|
||||
+ HRESULT hr = E_NOTIMPL;
|
||||
struct directmanipulation *This = impl_from_IDirectManipulationManager2(iface);
|
||||
- FIXME("%p, %p, %p, %s, %p\n", This, frame, window, debugstr_guid(riid), obj);
|
||||
- return E_NOTIMPL;
|
||||
+ TRACE("%p, %p, %p, %s, %p\n", This, frame, window, debugstr_guid(riid), obj);
|
||||
+
|
||||
+ if(IsEqualGUID(riid, &IID_IDirectManipulationViewport) ||
|
||||
+ IsEqualGUID(riid, &IID_IDirectManipulationViewport2) )
|
||||
+ {
|
||||
+ hr = create_viewport( (IDirectManipulationViewport2**)obj);
|
||||
+ }
|
||||
+ else
|
||||
+ FIXME("Unsupported interface %s\n", debugstr_guid(riid));
|
||||
+ return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI direct_manip_CreateContent(IDirectManipulationManager2 *iface, IDirectManipulationFrameInfoProvider *frame,
|
||||
--
|
||||
2.17.1
|
||||
|
@ -1,186 +0,0 @@
|
||||
From 52d03476a908684bb201ae69032f39bf2a745190 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 23 Aug 2019 11:34:16 +1000
|
||||
Subject: [PATCH 3/4] directmanipulation: Implement
|
||||
IDirectManipulationViewport2 GetPrimaryContent
|
||||
|
||||
---
|
||||
dlls/directmanipulation/directmanipulation.c | 155 ++++++++++++++++++-
|
||||
1 file changed, 154 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c
|
||||
index f1e008bc7f..ca60e76db6 100644
|
||||
--- a/dlls/directmanipulation/directmanipulation.c
|
||||
+++ b/dlls/directmanipulation/directmanipulation.c
|
||||
@@ -177,6 +177,142 @@ static HRESULT create_update_manager(IDirectManipulationUpdateManager **obj)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
+
|
||||
+struct primarycontext
|
||||
+{
|
||||
+ IDirectManipulationPrimaryContent IDirectManipulationPrimaryContent_iface;
|
||||
+ LONG ref;
|
||||
+};
|
||||
+
|
||||
+static inline struct primarycontext *impl_from_IDirectManipulationPrimaryContent(IDirectManipulationPrimaryContent *iface)
|
||||
+{
|
||||
+ return CONTAINING_RECORD(iface, struct primarycontext, IDirectManipulationPrimaryContent_iface);
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI primary_QueryInterface(IDirectManipulationPrimaryContent *iface, REFIID riid, void **ppv)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppv);
|
||||
+
|
||||
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
|
||||
+ IsEqualGUID(riid, &IID_IDirectManipulationPrimaryContent))
|
||||
+ {
|
||||
+ IDirectManipulationPrimaryContent_AddRef(&This->IDirectManipulationPrimaryContent_iface);
|
||||
+ *ppv = &This->IDirectManipulationPrimaryContent_iface;
|
||||
+ return S_OK;
|
||||
+ }
|
||||
+
|
||||
+ FIXME("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppv);
|
||||
+ return E_NOINTERFACE;
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI primary_AddRef(IDirectManipulationPrimaryContent *iface)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ ULONG ref = InterlockedIncrement(&This->ref);
|
||||
+
|
||||
+ TRACE("(%p) ref=%u\n", This, ref);
|
||||
+
|
||||
+ return ref;
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI primary_Release(IDirectManipulationPrimaryContent *iface)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ ULONG ref = InterlockedDecrement(&This->ref);
|
||||
+
|
||||
+ TRACE("(%p) ref=%u\n", This, ref);
|
||||
+
|
||||
+ if (!ref)
|
||||
+ {
|
||||
+ heap_free(This);
|
||||
+ }
|
||||
+ return ref;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI primary_SetSnapInterval(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_MOTION_TYPES motion,
|
||||
+ float interval, float offset)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ FIXME("%p, %d, %f, %f\n", This, motion, interval, offset);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI primary_SetSnapPoints(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_MOTION_TYPES motion,
|
||||
+ const float *points, DWORD count)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ FIXME("%p, %d, %p, %d\n", This, motion, points, count);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI primary_SetSnapType(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_MOTION_TYPES motion,
|
||||
+ DIRECTMANIPULATION_SNAPPOINT_TYPE type)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ FIXME("%p, %d, %d\n", This, motion, type);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI primary_SetSnapCoordinate(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_MOTION_TYPES motion,
|
||||
+ DIRECTMANIPULATION_SNAPPOINT_COORDINATE coordinate, float origin)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ FIXME("%p, %d, %d, %f\n", This, motion, coordinate, origin);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI primary_SetZoomBoundaries(IDirectManipulationPrimaryContent *iface, float minimum, float maximum)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ FIXME("%p, %f, %f\n", This, minimum, maximum);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI primary_SetHorizontalAlignment(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_HORIZONTALALIGNMENT alignment)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ FIXME("%p, %d\n", This, alignment);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI primary_SetVerticalAlignment(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_VERTICALALIGNMENT alignment)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ FIXME("%p, %d\n", This, alignment);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI primary_GetInertiaEndTransform(IDirectManipulationPrimaryContent *iface, float *matrix, DWORD count)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ FIXME("%p, %p, %d\n", This, matrix, count);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI primary_GetCenterPoint(IDirectManipulationPrimaryContent *iface, float *x, float *y)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
+ FIXME("%p, %p, %p\n", This, x, y);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static const IDirectManipulationPrimaryContentVtbl primaryVtbl =
|
||||
+{
|
||||
+ primary_QueryInterface,
|
||||
+ primary_AddRef,
|
||||
+ primary_Release,
|
||||
+ primary_SetSnapInterval,
|
||||
+ primary_SetSnapPoints,
|
||||
+ primary_SetSnapType,
|
||||
+ primary_SetSnapCoordinate,
|
||||
+ primary_SetZoomBoundaries,
|
||||
+ primary_SetHorizontalAlignment,
|
||||
+ primary_SetVerticalAlignment,
|
||||
+ primary_GetInertiaEndTransform,
|
||||
+ primary_GetCenterPoint
|
||||
+};
|
||||
+
|
||||
struct directviewport
|
||||
{
|
||||
IDirectManipulationViewport2 IDirectManipulationViewport2_iface;
|
||||
@@ -327,7 +463,24 @@ static HRESULT WINAPI viewport_SyncDisplayTransform(IDirectManipulationViewport2
|
||||
static HRESULT WINAPI viewport_GetPrimaryContent(IDirectManipulationViewport2 *iface, REFIID riid, void **object)
|
||||
{
|
||||
struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
|
||||
- FIXME("%p, %s, %p\n", This, debugstr_guid(riid), object);
|
||||
+ TRACE("%p, %s, %p\n", This, debugstr_guid(riid), object);
|
||||
+ if(IsEqualGUID(riid, &IID_IDirectManipulationPrimaryContent))
|
||||
+ {
|
||||
+ struct primarycontext *primary;
|
||||
+ TRACE("IDirectManipulationPrimaryContent\n");
|
||||
+ primary = heap_alloc( sizeof(*primary));
|
||||
+ if(!primary)
|
||||
+ return E_OUTOFMEMORY;
|
||||
+
|
||||
+ primary->IDirectManipulationPrimaryContent_iface.lpVtbl = &primaryVtbl;
|
||||
+ primary->ref = 1;
|
||||
+
|
||||
+ *object = &primary->IDirectManipulationPrimaryContent_iface;
|
||||
+
|
||||
+ return S_OK;
|
||||
+ }
|
||||
+ else
|
||||
+ FIXME("Unsupported interface %s\n", debugstr_guid(riid));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -1,166 +0,0 @@
|
||||
From b86977f6822d286b595c756c814c2cc986968050 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Sun, 22 Dec 2019 19:35:25 +1100
|
||||
Subject: [PATCH 1/2] directmanipulation: Support IDirectManipulationContent in
|
||||
IDirectManipulationPrimaryContent interface
|
||||
|
||||
Based of patch by Gijs Vermeulen.
|
||||
---
|
||||
dlls/directmanipulation/directmanipulation.c | 110 ++++++++++++++++++-
|
||||
1 file changed, 109 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c
|
||||
index ca60e76db6e..05601abbd45 100644
|
||||
--- a/dlls/directmanipulation/directmanipulation.c
|
||||
+++ b/dlls/directmanipulation/directmanipulation.c
|
||||
@@ -177,10 +177,10 @@ static HRESULT create_update_manager(IDirectManipulationUpdateManager **obj)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
-
|
||||
struct primarycontext
|
||||
{
|
||||
IDirectManipulationPrimaryContent IDirectManipulationPrimaryContent_iface;
|
||||
+ IDirectManipulationContent IDirectManipulationContent_iface;
|
||||
LONG ref;
|
||||
};
|
||||
|
||||
@@ -189,6 +189,11 @@ static inline struct primarycontext *impl_from_IDirectManipulationPrimaryContent
|
||||
return CONTAINING_RECORD(iface, struct primarycontext, IDirectManipulationPrimaryContent_iface);
|
||||
}
|
||||
|
||||
+static inline struct primarycontext *impl_from_IDirectManipulationContent(IDirectManipulationContent *iface)
|
||||
+{
|
||||
+ return CONTAINING_RECORD(iface, struct primarycontext, IDirectManipulationContent_iface);
|
||||
+}
|
||||
+
|
||||
static HRESULT WINAPI primary_QueryInterface(IDirectManipulationPrimaryContent *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
|
||||
@@ -201,6 +206,12 @@ static HRESULT WINAPI primary_QueryInterface(IDirectManipulationPrimaryContent *
|
||||
*ppv = &This->IDirectManipulationPrimaryContent_iface;
|
||||
return S_OK;
|
||||
}
|
||||
+ else if(IsEqualGUID(riid, &IID_IDirectManipulationContent))
|
||||
+ {
|
||||
+ IUnknown_AddRef(iface);
|
||||
+ *ppv = &This->IDirectManipulationContent_iface;
|
||||
+ return S_OK;
|
||||
+ }
|
||||
|
||||
FIXME("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppv);
|
||||
return E_NOINTERFACE;
|
||||
@@ -313,6 +324,102 @@ static const IDirectManipulationPrimaryContentVtbl primaryVtbl =
|
||||
primary_GetCenterPoint
|
||||
};
|
||||
|
||||
+
|
||||
+static HRESULT WINAPI content_QueryInterface(IDirectManipulationContent *iface, REFIID riid, void **ppv)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationContent(iface);
|
||||
+ TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppv);
|
||||
+
|
||||
+ return IDirectManipulationPrimaryContent_QueryInterface(&This->IDirectManipulationPrimaryContent_iface,
|
||||
+ riid, ppv);
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI content_AddRef(IDirectManipulationContent *iface)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationContent(iface);
|
||||
+ return IDirectManipulationPrimaryContent_AddRef(&This->IDirectManipulationPrimaryContent_iface);
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI content_Release(IDirectManipulationContent *iface)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationContent(iface);
|
||||
+ return IDirectManipulationPrimaryContent_Release(&This->IDirectManipulationPrimaryContent_iface);
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI content_GetContentRect(IDirectManipulationContent *iface, RECT *size)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationContent(iface);
|
||||
+ FIXME("%p, %p\n", This, size);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI content_SetContentRect(IDirectManipulationContent *iface, const RECT *size)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationContent(iface);
|
||||
+ FIXME("%p, %p\n", This, size);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI content_GetViewport(IDirectManipulationContent *iface, REFIID riid, void **object)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationContent(iface);
|
||||
+ FIXME("%p, %p, %p\n", This, debugstr_guid(riid), object);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI content_GetTag(IDirectManipulationContent *iface, REFIID riid, void **object, UINT32 *id)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationContent(iface);
|
||||
+ FIXME("%p, %p, %p, %p\n", This, debugstr_guid(riid), object, id);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI content_SetTag(IDirectManipulationContent *iface, IUnknown *object, UINT32 id)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationContent(iface);
|
||||
+ FIXME("%p, %p, %d\n", This, object, id);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI content_GetOutputTransform(IDirectManipulationContent *iface,
|
||||
+ float *matrix, DWORD count)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationContent(iface);
|
||||
+ FIXME("%p, %p, %d\n", This, matrix, count);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI content_GetContentTransform(IDirectManipulationContent *iface,
|
||||
+ float *matrix, DWORD count)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationContent(iface);
|
||||
+ FIXME("%p, %p, %d\n", This, matrix, count);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI content_SyncContentTransform(IDirectManipulationContent *iface,
|
||||
+ const float *matrix, DWORD count)
|
||||
+{
|
||||
+ struct primarycontext *This = impl_from_IDirectManipulationContent(iface);
|
||||
+ FIXME("%p, %p, %d\n", This, matrix, count);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static const IDirectManipulationContentVtbl contentVtbl =
|
||||
+{
|
||||
+ content_QueryInterface,
|
||||
+ content_AddRef,
|
||||
+ content_Release,
|
||||
+ content_GetContentRect,
|
||||
+ content_SetContentRect,
|
||||
+ content_GetViewport,
|
||||
+ content_GetTag,
|
||||
+ content_SetTag,
|
||||
+ content_GetOutputTransform,
|
||||
+ content_GetContentTransform,
|
||||
+ content_SyncContentTransform
|
||||
+};
|
||||
+
|
||||
struct directviewport
|
||||
{
|
||||
IDirectManipulationViewport2 IDirectManipulationViewport2_iface;
|
||||
@@ -473,6 +580,7 @@ static HRESULT WINAPI viewport_GetPrimaryContent(IDirectManipulationViewport2 *i
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
primary->IDirectManipulationPrimaryContent_iface.lpVtbl = &primaryVtbl;
|
||||
+ primary->IDirectManipulationContent_iface.lpVtbl = &contentVtbl;
|
||||
primary->ref = 1;
|
||||
|
||||
*object = &primary->IDirectManipulationPrimaryContent_iface;
|
||||
--
|
||||
2.24.0
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 440f90abdcbe7e9a1d43e06900a4674e6fabd805 Mon Sep 17 00:00:00 2001
|
||||
From cd8b9cfdbc4ab1c7120c411b65ac079eddd3a675 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Tue, 9 Jul 2019 14:13:28 +1000
|
||||
Subject: [PATCH] user32: Improve GetKeyboardLayoutList
|
||||
@ -59,10 +59,10 @@ index 6d916c7d65d..b9e0dc60e7c 100644
|
||||
if (baselayout != 0)
|
||||
{
|
||||
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
|
||||
index 913fabfbd85..dd84ff5cbb2 100644
|
||||
index 9ec829860af..56fbc558de2 100644
|
||||
--- a/dlls/user32/tests/input.c
|
||||
+++ b/dlls/user32/tests/input.c
|
||||
@@ -3010,6 +3010,40 @@ static void test_UnregisterDeviceNotification(void)
|
||||
@@ -3385,6 +3385,40 @@ static void test_UnregisterDeviceNotification(void)
|
||||
ok(ret == FALSE, "Unregistering NULL Device Notification returned: %d\n", ret);
|
||||
}
|
||||
|
||||
@ -102,15 +102,15 @@ index 913fabfbd85..dd84ff5cbb2 100644
|
||||
+
|
||||
START_TEST(input)
|
||||
{
|
||||
POINT pos;
|
||||
@@ -3033,6 +3067,7 @@ START_TEST(input)
|
||||
char **argv;
|
||||
@@ -3417,6 +3451,7 @@ START_TEST(input)
|
||||
test_GetKeyState();
|
||||
test_OemKeyScan();
|
||||
test_GetRawInputData();
|
||||
+ test_GetKeyboardLayoutList();
|
||||
test_RegisterRawInputDevices();
|
||||
test_rawinput(argv[0]);
|
||||
|
||||
if(pGetMouseMovePointsEx)
|
||||
--
|
||||
2.26.2
|
||||
2.27.0
|
||||
|
||||
|
@ -1,13 +1,13 @@
|
||||
From b1af584b5d5b8905bf4dd3ec6be9227e5221a744 Mon Sep 17 00:00:00 2001
|
||||
From 250b8699aa64096bb4b38d454c03b57afe91a619 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.
|
||||
|
||||
---
|
||||
dlls/kernel32/tests/loader.c | 76 ++++++++++++++++++++++++++++++++++++
|
||||
dlls/ntdll/loader.c | 65 ++++++++++++++++++++++++++++++
|
||||
dlls/ntdll/loader.c | 64 ++++++++++++++++++++++++++++++
|
||||
include/winternl.h | 2 +-
|
||||
3 files changed, 142 insertions(+), 1 deletion(-)
|
||||
3 files changed, 141 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
|
||||
index 59965984a67..95f18fb71e3 100644
|
||||
@ -115,10 +115,10 @@ index 59965984a67..95f18fb71e3 100644
|
||||
test_Loader();
|
||||
}
|
||||
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
|
||||
index c90cdcc860b..63e1227cc55 100644
|
||||
index 42cdc628021..df8e0c69185 100644
|
||||
--- a/dlls/ntdll/loader.c
|
||||
+++ b/dlls/ntdll/loader.c
|
||||
@@ -128,6 +128,9 @@ struct file_id
|
||||
@@ -121,6 +121,9 @@ struct file_id
|
||||
BYTE ObjectId[16];
|
||||
};
|
||||
|
||||
@ -128,7 +128,7 @@ index c90cdcc860b..63e1227cc55 100644
|
||||
/* internal representation of loaded modules */
|
||||
typedef struct _wine_modref
|
||||
{
|
||||
@@ -467,6 +470,52 @@ static void call_ldr_notifications( ULONG reason, LDR_DATA_TABLE_ENTRY *module )
|
||||
@@ -446,6 +449,52 @@ static void call_ldr_notifications( ULONG reason, LDR_DATA_TABLE_ENTRY *module )
|
||||
}
|
||||
}
|
||||
|
||||
@ -181,7 +181,7 @@ index c90cdcc860b..63e1227cc55 100644
|
||||
/*************************************************************************
|
||||
* get_modref
|
||||
*
|
||||
@@ -1231,7 +1280,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, const UNICODE_STRING *nt_name
|
||||
@@ -1188,7 +1237,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, const UNICODE_STRING *nt_name
|
||||
&wm->ldr.InLoadOrderLinks);
|
||||
InsertTailList(&NtCurrentTeb()->Peb->LdrData->InMemoryOrderModuleList,
|
||||
&wm->ldr.InMemoryOrderLinks);
|
||||
@ -194,15 +194,7 @@ index c90cdcc860b..63e1227cc55 100644
|
||||
|
||||
if (!(nt->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NX_COMPAT))
|
||||
{
|
||||
@@ -1892,6 +1946,7 @@ static NTSTATUS build_so_dll_module( const WCHAR *load_path, const UNICODE_STRIN
|
||||
/* the module has only been inserted in the load & memory order lists */
|
||||
RemoveEntryList(&wm->ldr.InLoadOrderLinks);
|
||||
RemoveEntryList(&wm->ldr.InMemoryOrderLinks);
|
||||
+ RemoveEntryList(&wm->ldr.HashLinks);
|
||||
/* FIXME: free the modref */
|
||||
return status;
|
||||
}
|
||||
@@ -2433,6 +2488,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, const UNICODE_STRING *nt_nam
|
||||
@@ -1894,6 +1948,7 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name,
|
||||
/* the module has only be inserted in the load & memory order lists */
|
||||
RemoveEntryList(&wm->ldr.InLoadOrderLinks);
|
||||
RemoveEntryList(&wm->ldr.InMemoryOrderLinks);
|
||||
@ -210,7 +202,7 @@ index c90cdcc860b..63e1227cc55 100644
|
||||
|
||||
/* FIXME: there are several more dangling references
|
||||
* left. Including dlls loaded by this dll before the
|
||||
@@ -3652,6 +3708,7 @@ static void free_modref( WINE_MODREF *wm )
|
||||
@@ -3226,6 +3281,7 @@ static void free_modref( WINE_MODREF *wm )
|
||||
{
|
||||
RemoveEntryList(&wm->ldr.InLoadOrderLinks);
|
||||
RemoveEntryList(&wm->ldr.InMemoryOrderLinks);
|
||||
@ -218,7 +210,7 @@ index c90cdcc860b..63e1227cc55 100644
|
||||
if (wm->ldr.InInitializationOrderLinks.Flink)
|
||||
RemoveEntryList(&wm->ldr.InInitializationOrderLinks);
|
||||
|
||||
@@ -4372,6 +4429,7 @@ void __wine_process_init(void)
|
||||
@@ -3945,6 +4001,7 @@ void __wine_process_init(void)
|
||||
SIZE_T info_size;
|
||||
TEB *teb;
|
||||
PEB *peb;
|
||||
@ -226,7 +218,7 @@ index c90cdcc860b..63e1227cc55 100644
|
||||
|
||||
if (!unix_funcs) load_ntdll_so( ntdll_module, &__wine_spec_nt_header );
|
||||
|
||||
@@ -4388,6 +4446,10 @@ void __wine_process_init(void)
|
||||
@@ -3961,6 +4018,10 @@ void __wine_process_init(void)
|
||||
load_global_options();
|
||||
version_init();
|
||||
|
||||
@ -237,7 +229,7 @@ index c90cdcc860b..63e1227cc55 100644
|
||||
/* setup the load callback and create ntdll modref */
|
||||
RtlInitUnicodeString( &nt_name, ntdllW );
|
||||
status = build_so_dll_module( params->DllPath.Buffer, &nt_name, ntdll_module, 0, &wm );
|
||||
@@ -4463,6 +4525,9 @@ void __wine_process_init(void)
|
||||
@@ -4034,6 +4095,9 @@ void __wine_process_init(void)
|
||||
teb->Tib.StackLimit = stack.StackLimit;
|
||||
teb->DeallocationStack = stack.DeallocationStack;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 4236b5607067148efa76cbe090d9efd58b297e32 Mon Sep 17 00:00:00 2001
|
||||
From 6a2146342b48977513f83a59cd16d182850767a9 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <pgofman@codeweavers.com>
|
||||
Date: Mon, 30 Dec 2019 13:27:53 +0300
|
||||
Subject: [PATCH] ntdll: Support x86_64 syscall emulation.
|
||||
@ -12,14 +12,14 @@ is used for trapping syscalls.
|
||||
configure.ac | 1 +
|
||||
dlls/ntdll/thread.c | 8 ++-
|
||||
dlls/ntdll/unix/signal_x86_64.c | 105 ++++++++++++++++++++++++++++++++
|
||||
dlls/ntdll/unix/thread.c | 8 ++-
|
||||
dlls/ntdll/unix/unix_private.h | 6 +-
|
||||
dlls/ntdll/unixlib.h | 3 +-
|
||||
dlls/ntdll/unix/thread.c | 7 ++-
|
||||
dlls/ntdll/unix/unix_private.h | 5 +-
|
||||
dlls/ntdll/unixlib.h | 2 +-
|
||||
tools/winebuild/spec32.c | 9 ++-
|
||||
7 files changed, 134 insertions(+), 6 deletions(-)
|
||||
7 files changed, 131 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 9c5f76669df..f245c2f1507 100644
|
||||
index a78610c6490..eabd16b4732 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -464,6 +464,7 @@ AC_CHECK_HEADERS(\
|
||||
@ -31,10 +31,10 @@ index 9c5f76669df..f245c2f1507 100644
|
||||
linux/types.h \
|
||||
linux/ucdrom.h \
|
||||
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
|
||||
index 557747062e4..0d65546588f 100644
|
||||
index 0eb7d901c4d..c5391fb0512 100644
|
||||
--- a/dlls/ntdll/thread.c
|
||||
+++ b/dlls/ntdll/thread.c
|
||||
@@ -103,6 +103,12 @@ void __wine_syscall_dispatcher( void )
|
||||
@@ -105,6 +105,12 @@ void __wine_syscall_dispatcher( void )
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -47,14 +47,14 @@ index 557747062e4..0d65546588f 100644
|
||||
void *WINAPI __wine_fakedll_dispatcher( const char *module, ULONG ord )
|
||||
{
|
||||
UNICODE_STRING name;
|
||||
@@ -146,7 +152,7 @@ void *WINAPI __wine_fakedll_dispatcher( const char *module, ULONG ord )
|
||||
TEB *thread_init( SIZE_T *info_size, BOOL *suspend )
|
||||
@@ -148,7 +154,7 @@ void *WINAPI __wine_fakedll_dispatcher( const char *module, ULONG ord )
|
||||
TEB *thread_init( SIZE_T *info_size )
|
||||
{
|
||||
TEB *teb = unix_funcs->init_threading( &nb_threads, &__wine_ldt_copy, info_size, suspend, &server_cpus,
|
||||
- &is_wow64, &server_start_time, __wine_syscall_dispatcher );
|
||||
+ &is_wow64, &server_start_time, __wine_syscall_dispatcher, __wine_nb_syscalls );
|
||||
teb->Spare2 = (ULONG_PTR)__wine_fakedll_dispatcher;
|
||||
ULONG_PTR val;
|
||||
- TEB *teb = unix_funcs->init_threading( &nb_threads, &__wine_ldt_copy, info_size, __wine_syscall_dispatcher );
|
||||
+ TEB *teb = unix_funcs->init_threading( &nb_threads, &__wine_ldt_copy, info_size, __wine_syscall_dispatcher, __wine_nb_syscalls );
|
||||
|
||||
teb->Spare2 = (ULONG_PTR)__wine_fakedll_dispatcher;
|
||||
peb = teb->Peb;
|
||||
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
|
||||
index 12ea74f7f5c..26097702985 100644
|
||||
@ -194,7 +194,7 @@ index 12ea74f7f5c..26097702985 100644
|
||||
|
||||
error:
|
||||
diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c
|
||||
index 196dc2d8c4e..dae792bd78b 100644
|
||||
index ca5eba4da88..36126a56f45 100644
|
||||
--- a/dlls/ntdll/unix/thread.c
|
||||
+++ b/dlls/ntdll/unix/thread.c
|
||||
@@ -58,6 +58,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(seh);
|
||||
@ -207,17 +207,16 @@ index 196dc2d8c4e..dae792bd78b 100644
|
||||
static int *nb_threads;
|
||||
|
||||
static inline int get_unix_exit_code( NTSTATUS status )
|
||||
@@ -85,7 +88,8 @@ static void pthread_exit_wrapper( int status )
|
||||
@@ -84,7 +87,7 @@ static void pthread_exit_wrapper( int status )
|
||||
/***********************************************************************
|
||||
* init_threading
|
||||
*/
|
||||
TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, BOOL *suspend,
|
||||
- unsigned int *cpus, BOOL *wow64, timeout_t *start_time, void *syscall_handler )
|
||||
+ unsigned int *cpus, BOOL *wow64, timeout_t *start_time, void *syscall_handler,
|
||||
+ unsigned int syscall_count )
|
||||
-TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, void *syscall_handler )
|
||||
+TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, void *syscall_handler, unsigned int syscall_count )
|
||||
{
|
||||
TEB *teb;
|
||||
SIZE_T info_size;
|
||||
@@ -94,6 +98,8 @@ TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZ
|
||||
BOOL suspend;
|
||||
@@ -94,6 +97,8 @@ TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZ
|
||||
*ldt_copy = &__wine_ldt_copy;
|
||||
#endif
|
||||
nb_threads = nb_threads_ptr;
|
||||
@ -227,20 +226,19 @@ index 196dc2d8c4e..dae792bd78b 100644
|
||||
teb = virtual_alloc_first_teb();
|
||||
teb->WOW32Reserved = syscall_handler;
|
||||
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
|
||||
index df508e569f9..bcb80ddab85 100644
|
||||
index 15be5d3715a..516a6cfa1fe 100644
|
||||
--- a/dlls/ntdll/unix/unix_private.h
|
||||
+++ b/dlls/ntdll/unix/unix_private.h
|
||||
@@ -113,7 +113,8 @@ extern void CDECL server_release_fd( HANDLE handle, int unix_fd ) DECLSPEC_HIDDE
|
||||
@@ -115,7 +115,7 @@ extern NTSTATUS CDECL server_handle_to_fd( HANDLE handle, unsigned int access, i
|
||||
unsigned int *options ) DECLSPEC_HIDDEN;
|
||||
extern void CDECL server_release_fd( HANDLE handle, int unix_fd ) DECLSPEC_HIDDEN;
|
||||
extern void CDECL server_init_process_done( void *relay ) DECLSPEC_HIDDEN;
|
||||
extern TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size,
|
||||
BOOL *suspend, unsigned int *cpus, BOOL *wow64,
|
||||
- timeout_t *start_time, void *syscall_handler ) DECLSPEC_HIDDEN;
|
||||
+ timeout_t *start_time, void *syscall_handler,
|
||||
+ unsigned int syscall_count ) DECLSPEC_HIDDEN;
|
||||
-extern TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, void *syscall_handler ) DECLSPEC_HIDDEN;
|
||||
+extern TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, void *syscall_handler, unsigned int syscall_count ) DECLSPEC_HIDDEN;
|
||||
extern void CDECL DECLSPEC_NORETURN exit_thread( int status ) DECLSPEC_HIDDEN;
|
||||
extern void CDECL DECLSPEC_NORETURN exit_process( int status ) DECLSPEC_HIDDEN;
|
||||
extern NTSTATUS CDECL exec_process( UNICODE_STRING *path, UNICODE_STRING *cmdline, NTSTATUS status ) DECLSPEC_HIDDEN;
|
||||
@@ -146,6 +147,9 @@ extern NTSTATUS exec_wineloader( char **argv, int socketfd, int is_child_64bit,
|
||||
@@ -152,6 +152,9 @@ extern NTSTATUS exec_wineloader( char **argv, int socketfd, int is_child_64bit,
|
||||
extern void start_server( BOOL debug ) DECLSPEC_HIDDEN;
|
||||
extern ULONG_PTR get_image_address(void) DECLSPEC_HIDDEN;
|
||||
|
||||
@ -251,16 +249,15 @@ index df508e569f9..bcb80ddab85 100644
|
||||
extern void server_enter_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset ) DECLSPEC_HIDDEN;
|
||||
extern void server_leave_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset ) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h
|
||||
index a9803478a37..e3bb8f7ce8e 100644
|
||||
index b5b7cb07c80..f61e0ed8525 100644
|
||||
--- a/dlls/ntdll/unixlib.h
|
||||
+++ b/dlls/ntdll/unixlib.h
|
||||
@@ -302,7 +302,8 @@ struct unix_funcs
|
||||
@@ -304,7 +304,7 @@ struct unix_funcs
|
||||
void (CDECL *virtual_set_large_address_space)(void);
|
||||
|
||||
/* thread/process functions */
|
||||
TEB * (CDECL *init_threading)( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size,
|
||||
- BOOL *suspend, unsigned int *cpus, BOOL *wow64, timeout_t *start_time, void *syscall_handler );
|
||||
+ BOOL *suspend, unsigned int *cpus, BOOL *wow64, timeout_t *start_time,
|
||||
+ void *syscall_handler, unsigned int syscall_count );
|
||||
- TEB * (CDECL *init_threading)( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, void *syscall_handler );
|
||||
+ TEB * (CDECL *init_threading)( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, void *syscall_handler, unsigned int syscall_count );
|
||||
void (CDECL *exit_thread)( int status );
|
||||
void (CDECL *exit_process)( int status );
|
||||
NTSTATUS (CDECL *exec_process)( UNICODE_STRING *path, UNICODE_STRING *cmdline, NTSTATUS status );
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 7421907b2ecc21493308aa31478b6828f4341e29 Mon Sep 17 00:00:00 2001
|
||||
From ab4c2acb67c445abb2b6db274f6e94bd5f3877ba Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 22 May 2020 16:37:37 +1000
|
||||
Subject: [PATCH] ntdll: NtQuerySystemInformation support
|
||||
@ -7,47 +7,48 @@ Subject: [PATCH] ntdll: NtQuerySystemInformation support
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49192
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/ntdll/nt.c | 21 +++++++++++++++++++++
|
||||
include/winternl.h | 22 ++++++++++++++++++++++
|
||||
2 files changed, 43 insertions(+)
|
||||
dlls/ntdll/unix/system.c | 22 ++++++++++++++++++++++
|
||||
include/winternl.h | 22 ++++++++++++++++++++++
|
||||
2 files changed, 44 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
|
||||
index 1d31f80a5f55..99b0d8dc0921 100644
|
||||
--- a/dlls/ntdll/nt.c
|
||||
+++ b/dlls/ntdll/nt.c
|
||||
@@ -3179,6 +3179,27 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
memset(SystemInformation, 0, Length);
|
||||
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
|
||||
index c5b2018bf30..6a0f4778790 100644
|
||||
--- a/dlls/ntdll/unix/system.c
|
||||
+++ b/dlls/ntdll/unix/system.c
|
||||
@@ -2151,6 +2151,28 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
ret = STATUS_SUCCESS;
|
||||
break;
|
||||
|
||||
+ case SystemCodeIntegrityInformation:
|
||||
+ {
|
||||
+ SYSTEM_CODEINTEGRITY_INFORMATION *info = (SYSTEM_CODEINTEGRITY_INFORMATION*)SystemInformation;
|
||||
+ SYSTEM_CODEINTEGRITY_INFORMATION *scii = info;
|
||||
+
|
||||
+ FIXME("SystemCodeIntegrityInformation, len %u, buffer %p, stub!\n", Length, info);
|
||||
+ FIXME("SystemCodeIntegrityInformation, size %u, info %p, stub!\n", size, info);
|
||||
+
|
||||
+ if (Length < sizeof(SYSTEM_CODEINTEGRITY_INFORMATION))
|
||||
+ if (size < sizeof(SYSTEM_CODEINTEGRITY_INFORMATION))
|
||||
+ {
|
||||
+ ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (!SystemInformation)
|
||||
+ if (!info)
|
||||
+ {
|
||||
+ ret = STATUS_ACCESS_VIOLATION;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ info->CodeIntegrityOptions = CODEINTEGRITY_OPTION_ENABLED;
|
||||
+ scii->CodeIntegrityOptions = CODEINTEGRITY_OPTION_ENABLED;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
default:
|
||||
FIXME("(0x%08x,%p,0x%08x,%p) stub\n",
|
||||
SystemInformationClass,SystemInformation,Length,ResultLength);
|
||||
FIXME( "(0x%08x,%p,0x%08x,%p) stub\n", class, info, size, ret_size );
|
||||
|
||||
diff --git a/include/winternl.h b/include/winternl.h
|
||||
index 640dbe5db354..1ae249c59404 100644
|
||||
index 3ff15f28c15..bcc20b2d99e 100644
|
||||
--- a/include/winternl.h
|
||||
+++ b/include/winternl.h
|
||||
@@ -972,10 +972,32 @@ typedef enum _SYSTEM_INFORMATION_CLASS {
|
||||
@@ -986,10 +986,32 @@ typedef enum _SYSTEM_INFORMATION_CLASS {
|
||||
SystemSuperfetchInformation = 79,
|
||||
SystemMemoryListInformation = 80,
|
||||
SystemFileCacheInformationEx = 81,
|
||||
@ -81,5 +82,5 @@ index 640dbe5db354..1ae249c59404 100644
|
||||
ThreadBasicInformation = 0,
|
||||
ThreadTimes,
|
||||
--
|
||||
2.26.2
|
||||
2.27.0
|
||||
|
||||
|
@ -1,29 +1,30 @@
|
||||
From 317b8941e2c36fd568799915c8023332b5054331 Mon Sep 17 00:00:00 2001
|
||||
From a74718ea86178b8aa580d542bed872a313bdd546 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Sat, 6 Apr 2019 21:31:55 -0500
|
||||
Subject: [PATCH] ntdll: Add stub for
|
||||
NtQuerySystemInformation(SystemExtendedProcessInformation).
|
||||
|
||||
---
|
||||
dlls/ntdll/nt.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
dlls/ntdll/unix/system.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
|
||||
index f42934969..c019a9c29 100644
|
||||
--- a/dlls/ntdll/nt.c
|
||||
+++ b/dlls/ntdll/nt.c
|
||||
@@ -2768,6 +2768,11 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
}
|
||||
}
|
||||
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
|
||||
index 68de16b7e5b..c5b2018bf30 100644
|
||||
--- a/dlls/ntdll/unix/system.c
|
||||
+++ b/dlls/ntdll/unix/system.c
|
||||
@@ -2145,6 +2145,12 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
break;
|
||||
}
|
||||
|
||||
+ case SystemExtendedProcessInformation:
|
||||
+ FIXME("SystemExtendedProcessInformation, len %u, buffer %p, stub!\n", Length, SystemInformation);
|
||||
+ memset(SystemInformation, 0, Length);
|
||||
+ FIXME("SystemExtendedProcessInformation, size %u, info %p, stub!\n", size, info);
|
||||
+ memset( info, 0, size );
|
||||
+ ret = STATUS_SUCCESS;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
FIXME("(0x%08x,%p,0x%08x,%p) stub\n",
|
||||
SystemInformationClass,SystemInformation,Length,ResultLength);
|
||||
FIXME( "(0x%08x,%p,0x%08x,%p) stub\n", class, info, size, ret_size );
|
||||
|
||||
--
|
||||
2.20.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,39 +1,38 @@
|
||||
From e42cdb8305dcebca77afba4a56e59391f2cb4a38 Mon Sep 17 00:00:00 2001
|
||||
From 0cb2647baa3ea72babb05e24d2f1fa23cdedb0a1 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Thu, 7 Jan 2016 06:01:01 +0100
|
||||
Subject: ntdll: Return buffer filled with random values from
|
||||
Subject: [PATCH] ntdll: Return buffer filled with random values from
|
||||
SystemInterruptInformation.
|
||||
|
||||
---
|
||||
dlls/ntdll/nt.c | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
dlls/ntdll/unix/system.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
|
||||
index 9ee1923..fe3e8e8 100644
|
||||
--- a/dlls/ntdll/nt.c
|
||||
+++ b/dlls/ntdll/nt.c
|
||||
@@ -2070,10 +2070,21 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
|
||||
index 68de16b7e5b..5ba9fb41156 100644
|
||||
--- a/dlls/ntdll/unix/system.c
|
||||
+++ b/dlls/ntdll/unix/system.c
|
||||
@@ -2003,8 +2003,20 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
case SystemInterruptInformation:
|
||||
{
|
||||
SYSTEM_INTERRUPT_INFORMATION sii;
|
||||
+ int dev_random;
|
||||
{
|
||||
SYSTEM_INTERRUPT_INFORMATION sii = {{ 0 }};
|
||||
+ int dev_random;
|
||||
|
||||
memset(&sii, 0, sizeof(sii));
|
||||
len = sizeof(sii);
|
||||
|
||||
+ /* Some applications use the returned buffer for random number
|
||||
+ * generation. Its unlikely that an app depends on the exact
|
||||
+ * layout, so just fill with values from /dev/urandom. */
|
||||
+ dev_random = open( "/dev/urandom", O_RDONLY );
|
||||
+ if (dev_random != -1)
|
||||
+ {
|
||||
+ read( dev_random, &sii, sizeof(sii) );
|
||||
+ close( dev_random );
|
||||
+ }
|
||||
len = sizeof(sii);
|
||||
+
|
||||
if ( Length >= len)
|
||||
{
|
||||
if (!SystemInformation) ret = STATUS_ACCESS_VIOLATION;
|
||||
+ /* Some applications use the returned buffer for random number
|
||||
+ * generation. Its unlikely that an app depends on the exact
|
||||
+ * layout, so just fill with values from /dev/urandom. */
|
||||
+ dev_random = open( "/dev/urandom", O_RDONLY );
|
||||
+ if (dev_random != -1)
|
||||
+ {
|
||||
+ read( dev_random, &sii, sizeof(sii) );
|
||||
+ close( dev_random );
|
||||
+ }
|
||||
+
|
||||
if (size >= len)
|
||||
{
|
||||
if (!info) ret = STATUS_ACCESS_VIOLATION;
|
||||
--
|
||||
2.6.4
|
||||
2.27.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From ee3f09c31baedd50ab53179249b482eb51fcb0f3 Mon Sep 17 00:00:00 2001
|
||||
From e2f505d4c63dde39dbbcc215a7801020b04e3c25 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Mon, 6 Aug 2018 21:32:56 -0500
|
||||
Subject: [PATCH] ntdll: Don't call LdrQueryProcessModuleInformation in
|
||||
@ -12,30 +12,30 @@ This makes the anticheat engine in League of Legends 8.15+ happy.
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45550
|
||||
---
|
||||
dlls/ntdll/nt.c | 19 ++++++++++++++++---
|
||||
dlls/ntdll/unix/system.c | 19 ++++++++++++++++---
|
||||
1 file changed, 16 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
|
||||
index af22e58..80d3ef8 100644
|
||||
--- a/dlls/ntdll/nt.c
|
||||
+++ b/dlls/ntdll/nt.c
|
||||
@@ -2493,9 +2493,22 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
}
|
||||
break;
|
||||
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
|
||||
index 68de16b7e5b..a57b040c533 100644
|
||||
--- a/dlls/ntdll/unix/system.c
|
||||
+++ b/dlls/ntdll/unix/system.c
|
||||
@@ -1930,9 +1930,22 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
}
|
||||
|
||||
case SystemModuleInformation:
|
||||
- /* FIXME: should be system-wide */
|
||||
- if (!SystemInformation) ret = STATUS_ACCESS_VIOLATION;
|
||||
- else ret = LdrQueryProcessModuleInformation( SystemInformation, Length, &len );
|
||||
+ if (!SystemInformation)
|
||||
- if (!info) ret = STATUS_ACCESS_VIOLATION;
|
||||
- else ret = LdrQueryProcessModuleInformation( info, size, &len );
|
||||
+ if (!info)
|
||||
+ ret = STATUS_ACCESS_VIOLATION;
|
||||
+ else if (Length < FIELD_OFFSET( SYSTEM_MODULE_INFORMATION, Modules[1] ))
|
||||
+ else if (size < FIELD_OFFSET( SYSTEM_MODULE_INFORMATION, Modules[1] ))
|
||||
+ {
|
||||
+ len = FIELD_OFFSET( SYSTEM_MODULE_INFORMATION, Modules[1] );
|
||||
+ ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ SYSTEM_MODULE_INFORMATION *smi = SystemInformation;
|
||||
+ SYSTEM_MODULE_INFORMATION *smi = info;
|
||||
+
|
||||
+ FIXME("returning fake driver list\n");
|
||||
+ smi->ModulesCount = 1;
|
||||
@ -43,8 +43,8 @@ index af22e58..80d3ef8 100644
|
||||
+ ret = STATUS_SUCCESS;
|
||||
+ }
|
||||
break;
|
||||
|
||||
case SystemHandleInformation:
|
||||
{
|
||||
--
|
||||
2.7.4
|
||||
2.27.0
|
||||
|
||||
|
@ -1,19 +1,19 @@
|
||||
From 77f0bfa7bbd70231a661397236124088af1ad76f Mon Sep 17 00:00:00 2001
|
||||
From b4fb299179bc4c04fd78909a21b24fd7a6667e4c Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Wesie <awesie@gmail.com>
|
||||
Date: Fri, 12 Apr 2019 20:04:03 -0500
|
||||
Subject: [PATCH] ntdll: Return ntdll.dll as the first entry for
|
||||
SystemModuleInformation.
|
||||
|
||||
---
|
||||
dlls/ntdll/nt.c | 29 ++++++++++++++++++++++++++++-
|
||||
1 file changed, 28 insertions(+), 1 deletion(-)
|
||||
dlls/ntdll/unix/system.c | 28 +++++++++++++++++++++++++++-
|
||||
1 file changed, 27 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
|
||||
index 54626307ede..77db670623c 100644
|
||||
--- a/dlls/ntdll/nt.c
|
||||
+++ b/dlls/ntdll/nt.c
|
||||
@@ -2493,6 +2493,33 @@ BOOLEAN WINAPI RtlIsProcessorFeaturePresent( UINT feature )
|
||||
return feature < PROCESSOR_FEATURE_MAX && user_shared_data->ProcessorFeatures[feature];
|
||||
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
|
||||
index a57b040c533..f118db8a89f 100644
|
||||
--- a/dlls/ntdll/unix/system.c
|
||||
+++ b/dlls/ntdll/unix/system.c
|
||||
@@ -1630,6 +1630,32 @@ static void get_performance_info( SYSTEM_PERFORMANCE_INFORMATION *info )
|
||||
info->TotalCommitLimit = (totalram + totalswap) / page_size;
|
||||
}
|
||||
|
||||
+static void get_ntdll_system_module(SYSTEM_MODULE *sm)
|
||||
@ -42,11 +42,10 @@ index 54626307ede..77db670623c 100644
|
||||
+ ptr = strrchr(str.Buffer, '\\');
|
||||
+ sm->NameOffset = (ptr != NULL) ? (ptr - str.Buffer + 1) : 0;
|
||||
+}
|
||||
+
|
||||
|
||||
/******************************************************************************
|
||||
* NtQuerySystemInformation [NTDLL.@]
|
||||
* ZwQuerySystemInformation [NTDLL.@]
|
||||
@@ -2829,7 +2856,7 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
* NtQuerySystemInformation (NTDLL.@)
|
||||
@@ -1943,7 +1969,7 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
|
||||
FIXME("returning fake driver list\n");
|
||||
smi->ModulesCount = 1;
|
||||
|
@ -1,33 +1,33 @@
|
||||
From 120d2e0cf3f75c087be14f65953980f5605f652e Mon Sep 17 00:00:00 2001
|
||||
From ab068a620223a6566c2a1d089fb4583992359bd2 Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Wesie <awesie@gmail.com>
|
||||
Date: Fri, 12 Apr 2019 20:06:08 -0500
|
||||
Subject: [PATCH] ntdll: Add stub for
|
||||
NtQuerySystemInformation(SystemModuleInformationEx).
|
||||
|
||||
---
|
||||
dlls/ntdll/nt.c | 21 +++++++++++++++++++++
|
||||
include/winternl.h | 9 +++++++++
|
||||
2 files changed, 30 insertions(+)
|
||||
dlls/ntdll/unix/system.c | 22 ++++++++++++++++++++++
|
||||
include/winternl.h | 9 +++++++++
|
||||
2 files changed, 31 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
|
||||
index 3ce1b344dbd..935c6abec7f 100644
|
||||
--- a/dlls/ntdll/nt.c
|
||||
+++ b/dlls/ntdll/nt.c
|
||||
@@ -3008,6 +3008,27 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
ret = STATUS_SUCCESS;
|
||||
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
|
||||
index f118db8a89f..eecde7dcf97 100644
|
||||
--- a/dlls/ntdll/unix/system.c
|
||||
+++ b/dlls/ntdll/unix/system.c
|
||||
@@ -1974,6 +1974,28 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
}
|
||||
break;
|
||||
|
||||
+ case SystemModuleInformationEx:
|
||||
+ if (!SystemInformation)
|
||||
+ if (!info)
|
||||
+ ret = STATUS_ACCESS_VIOLATION;
|
||||
+ else if (Length < sizeof(SYSTEM_MODULE_INFORMATION_EX))
|
||||
+ else if (size < sizeof(SYSTEM_MODULE_INFORMATION_EX))
|
||||
+ {
|
||||
+ len = sizeof(SYSTEM_MODULE_INFORMATION_EX);
|
||||
+ ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ SYSTEM_MODULE_INFORMATION_EX *info = SystemInformation;
|
||||
+ SYSTEM_MODULE_INFORMATION_EX *info = info;
|
||||
+
|
||||
+ FIXME("info_class SystemModuleInformationEx stub!\n");
|
||||
+ get_ntdll_system_module(&info->BaseInfo);
|
||||
@ -38,14 +38,15 @@ index 3ce1b344dbd..935c6abec7f 100644
|
||||
+ ret = STATUS_SUCCESS;
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
case SystemHandleInformation:
|
||||
{
|
||||
struct handle_info *info;
|
||||
{
|
||||
struct handle_info *handle_info;
|
||||
diff --git a/include/winternl.h b/include/winternl.h
|
||||
index d315d68be8f..d2d1001897d 100644
|
||||
index 3ff15f28c15..879b0931fc5 100644
|
||||
--- a/include/winternl.h
|
||||
+++ b/include/winternl.h
|
||||
@@ -2478,6 +2478,15 @@ typedef struct _SYSTEM_MODULE_INFORMATION
|
||||
@@ -2469,6 +2469,15 @@ typedef struct _SYSTEM_MODULE_INFORMATION
|
||||
#define PROCESS_CREATE_FLAGS_SUSPENDED 0x00000200
|
||||
#define PROCESS_CREATE_FLAGS_EXTENDED_UNKNOWN 0x00000400
|
||||
|
||||
@ -62,5 +63,5 @@ index d315d68be8f..d2d1001897d 100644
|
||||
#define THREAD_CREATE_FLAGS_SKIP_THREAD_ATTACH 0x00000002
|
||||
#define THREAD_CREATE_FLAGS_HIDE_FROM_DEBUGGER 0x00000004
|
||||
--
|
||||
2.26.2
|
||||
2.27.0
|
||||
|
||||
|
@ -1,28 +0,0 @@
|
||||
From 263b120ed5f5e9464f240e42800ab63752d16b96 Mon Sep 17 00:00:00 2001
|
||||
From: David Torok <dt@zeroitlab.com>
|
||||
Date: Tue, 19 Nov 2019 23:01:46 +0100
|
||||
Subject: [PATCH] ntdll: Stub NtQueryInformationThread(ThreadHideFromDebugger).
|
||||
|
||||
---
|
||||
dlls/ntdll/unix/thread.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c
|
||||
index d26e0a98cac..e2a092e30a8 100644
|
||||
--- a/dlls/ntdll/unix/thread.c
|
||||
+++ b/dlls/ntdll/unix/thread.c
|
||||
@@ -1063,6 +1063,11 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class,
|
||||
#endif
|
||||
}
|
||||
|
||||
+ case ThreadHideFromDebugger:
|
||||
+ if (length != sizeof(BOOLEAN)) return STATUS_INFO_LENGTH_MISMATCH;
|
||||
+ *(BOOLEAN *)data = TRUE;
|
||||
+ if (ret_len) *ret_len = sizeof(BOOLEAN);
|
||||
+ return STATUS_SUCCESS;
|
||||
case ThreadPriority:
|
||||
case ThreadBasePriority:
|
||||
case ThreadImpersonationToken:
|
||||
--
|
||||
2.27.0
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: [48138] League of Legends 9.23: Crash after champ select
|
@ -1,4 +1,4 @@
|
||||
From 9cdc9d195760a55263ba0bb7926e6e4d776cbd04 Mon Sep 17 00:00:00 2001
|
||||
From 2efee8f30caa027977f7cfb91a84b748a5fd17cd Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 4 Oct 2014 02:53:22 +0200
|
||||
Subject: [PATCH] ntdll: Setup a temporary signal handler during process
|
||||
@ -14,19 +14,19 @@ Subject: [PATCH] ntdll: Setup a temporary signal handler during process
|
||||
6 files changed, 73 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
|
||||
index 4db78fec823..91b98c44b3f 100644
|
||||
index 73c24eff549..8881d073684 100644
|
||||
--- a/dlls/ntdll/unix/loader.c
|
||||
+++ b/dlls/ntdll/unix/loader.c
|
||||
@@ -1244,6 +1244,7 @@ void __wine_main( int argc, char *argv[], char *envp[] )
|
||||
@@ -1761,6 +1761,7 @@ void __wine_main( int argc, char *argv[], char *envp[] )
|
||||
#endif
|
||||
|
||||
virtual_init();
|
||||
+ signal_init_early();
|
||||
|
||||
module = load_ntdll();
|
||||
fixup_ntdll_imports( &__wine_spec_nt_header, module );
|
||||
ntdll_module = load_ntdll();
|
||||
fixup_ntdll_imports( &__wine_spec_nt_header );
|
||||
diff --git a/dlls/ntdll/unix/signal_arm.c b/dlls/ntdll/unix/signal_arm.c
|
||||
index faa2952a483..43e0fb848a3 100644
|
||||
index e65b8a93d18..d7a9323a195 100644
|
||||
--- a/dlls/ntdll/unix/signal_arm.c
|
||||
+++ b/dlls/ntdll/unix/signal_arm.c
|
||||
@@ -869,6 +869,12 @@ void signal_init_process(void)
|
||||
@ -43,7 +43,7 @@ index faa2952a483..43e0fb848a3 100644
|
||||
/***********************************************************************
|
||||
* init_thread_context
|
||||
diff --git a/dlls/ntdll/unix/signal_arm64.c b/dlls/ntdll/unix/signal_arm64.c
|
||||
index e2c52a1a4f6..f3c67e1f5f4 100644
|
||||
index 7f8fb708ccd..574633dbd5d 100644
|
||||
--- a/dlls/ntdll/unix/signal_arm64.c
|
||||
+++ b/dlls/ntdll/unix/signal_arm64.c
|
||||
@@ -791,6 +791,13 @@ void signal_init_process(void)
|
||||
@ -61,7 +61,7 @@ index e2c52a1a4f6..f3c67e1f5f4 100644
|
||||
* init_thread_context
|
||||
*/
|
||||
diff --git a/dlls/ntdll/unix/signal_i386.c b/dlls/ntdll/unix/signal_i386.c
|
||||
index adf622ca673..44d0848a1ee 100644
|
||||
index 2f5d397ed55..c29a006736a 100644
|
||||
--- a/dlls/ntdll/unix/signal_i386.c
|
||||
+++ b/dlls/ntdll/unix/signal_i386.c
|
||||
@@ -1644,6 +1644,30 @@ static BOOL handle_interrupt( unsigned int interrupt, ucontext_t *sigcontext, st
|
||||
@ -131,7 +131,7 @@ index adf622ca673..44d0848a1ee 100644
|
||||
/***********************************************************************
|
||||
* init_thread_context
|
||||
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
|
||||
index 1bf8f5e8b8e..73c6ba4c34e 100644
|
||||
index 88ee18461a2..dedc17bf60e 100644
|
||||
--- a/dlls/ntdll/unix/signal_x86_64.c
|
||||
+++ b/dlls/ntdll/unix/signal_x86_64.c
|
||||
@@ -1415,6 +1415,12 @@ void signal_init_process(void)
|
||||
@ -148,10 +148,10 @@ index 1bf8f5e8b8e..73c6ba4c34e 100644
|
||||
/***********************************************************************
|
||||
* init_thread_context
|
||||
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
|
||||
index 95d4e2c2441..d88cf97f4b7 100644
|
||||
index 7dbfde43b34..fbcd200c420 100644
|
||||
--- a/dlls/ntdll/unix/unix_private.h
|
||||
+++ b/dlls/ntdll/unix/unix_private.h
|
||||
@@ -193,6 +193,7 @@ extern NTSTATUS signal_alloc_thread( TEB *teb ) DECLSPEC_HIDDEN;
|
||||
@@ -207,6 +207,7 @@ extern NTSTATUS signal_alloc_thread( TEB *teb ) DECLSPEC_HIDDEN;
|
||||
extern void signal_free_thread( TEB *teb ) DECLSPEC_HIDDEN;
|
||||
extern void signal_init_thread( TEB *teb ) DECLSPEC_HIDDEN;
|
||||
extern void signal_init_process(void) DECLSPEC_HIDDEN;
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 8fe1b6c64671ab1fc5af0099b23021eae0a046d7 Mon Sep 17 00:00:00 2001
|
||||
From d1536aa5b9df87c3764dc2090bdde76f708fda94 Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Wed, 9 Sep 2015 05:31:18 +0800
|
||||
Subject: [PATCH] ntdll: Initialize mod_name to zero.
|
||||
@ -8,11 +8,11 @@ Subject: [PATCH] ntdll: Initialize mod_name to zero.
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
|
||||
index 0568be63ad8..98472b060e1 100644
|
||||
index 42cdc628021..ef1e28af2e7 100644
|
||||
--- a/dlls/ntdll/loader.c
|
||||
+++ b/dlls/ntdll/loader.c
|
||||
@@ -1363,6 +1363,8 @@ static NTSTATUS MODULE_InitDLL( WINE_MODREF *wm, UINT reason, LPVOID lpReserved
|
||||
if (wm->so_handle && reason == DLL_PROCESS_ATTACH) call_constructors( wm );
|
||||
@@ -1299,6 +1299,8 @@ static NTSTATUS MODULE_InitDLL( WINE_MODREF *wm, UINT reason, LPVOID lpReserved
|
||||
unix_funcs->init_builtin_dll( wm->ldr.DllBase );
|
||||
if (!entry) return STATUS_SUCCESS;
|
||||
|
||||
+ memset( mod_name, 0, sizeof(mod_name) );
|
||||
@ -21,5 +21,5 @@ index 0568be63ad8..98472b060e1 100644
|
||||
{
|
||||
size_t len = min( wm->ldr.BaseDllName.Length, sizeof(mod_name)-sizeof(WCHAR) );
|
||||
--
|
||||
2.26.0
|
||||
2.27.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From e25066ea9c9e0442d4c18c13818071c104a9c5d2 Mon Sep 17 00:00:00 2001
|
||||
From f8c60f99727799ff3d5910e99155db0a356e4d77 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Storsjo <martin@martin.st>
|
||||
Date: Wed, 16 Aug 2017 23:48:40 +0300
|
||||
Subject: [PATCH] ntdll: Always restore TEB to x18 on aarch 64 on return from
|
||||
@ -20,24 +20,24 @@ Signed-off-by: Martin Storsjo <martin@martin.st>
|
||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
|
||||
index 0568be63ad8..b7612dcc9a7 100644
|
||||
index 42cdc628021..7b92330e874 100644
|
||||
--- a/dlls/ntdll/loader.c
|
||||
+++ b/dlls/ntdll/loader.c
|
||||
@@ -2036,7 +2036,13 @@ static NTSTATUS build_so_dll_module( const WCHAR *load_path, const UNICODE_STRIN
|
||||
SERVER_END_REQ;
|
||||
@@ -1924,7 +1924,13 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name,
|
||||
|
||||
/* setup relay debugging entry points */
|
||||
- if (TRACE_ON(relay)) RELAY_SetupDLL( module );
|
||||
if (image_info->image_flags & IMAGE_FLAGS_WineBuiltin)
|
||||
{
|
||||
- if (TRACE_ON(relay)) RELAY_SetupDLL( *module );
|
||||
+#ifdef __aarch64__
|
||||
+ /* Always enable relay entry points on aarch64, to allow restoring
|
||||
+ * the TEB to x18. */
|
||||
+ /* Always enable relay entry points on aarch64, to allow restoring
|
||||
+ * the TEB to x18. */
|
||||
+#else
|
||||
+ if (TRACE_ON(relay))
|
||||
+ if (TRACE_ON(relay))
|
||||
+#endif
|
||||
+ RELAY_SetupDLL( module );
|
||||
|
||||
*pwm = wm;
|
||||
return STATUS_SUCCESS;
|
||||
+ RELAY_SetupDLL( *module );
|
||||
}
|
||||
else
|
||||
{
|
||||
diff --git a/dlls/ntdll/relay.c b/dlls/ntdll/relay.c
|
||||
index acccf088811..35dd4161d8b 100644
|
||||
--- a/dlls/ntdll/relay.c
|
||||
@ -56,5 +56,5 @@ index acccf088811..35dd4161d8b 100644
|
||||
}
|
||||
|
||||
--
|
||||
2.26.0
|
||||
2.27.0
|
||||
|
||||
|
@ -52,7 +52,7 @@ usage()
|
||||
# Get the upstream commit sha
|
||||
upstream_commit()
|
||||
{
|
||||
echo "449b8c7e9212d0a80e28babff20f2755b7370872"
|
||||
echo "bc282905d9491b9f9fe4ae4b69a8ccdf99c5aaa8"
|
||||
}
|
||||
|
||||
# Show version information
|
||||
@ -196,7 +196,6 @@ patch_enable_all ()
|
||||
enable_ntdll_SystemInterruptInformation="$1"
|
||||
enable_ntdll_SystemModuleInformation="$1"
|
||||
enable_ntdll_SystemRoot_Symlink="$1"
|
||||
enable_ntdll_ThreadHideFromDebugger="$1"
|
||||
enable_ntdll_Threading="$1"
|
||||
enable_ntdll_WRITECOPY="$1"
|
||||
enable_ntdll_Zero_mod_name="$1"
|
||||
@ -681,9 +680,6 @@ patch_enable ()
|
||||
ntdll-SystemRoot_Symlink)
|
||||
enable_ntdll_SystemRoot_Symlink="$2"
|
||||
;;
|
||||
ntdll-ThreadHideFromDebugger)
|
||||
enable_ntdll_ThreadHideFromDebugger="$2"
|
||||
;;
|
||||
ntdll-Threading)
|
||||
enable_ntdll_Threading="$2"
|
||||
;;
|
||||
@ -1577,6 +1573,13 @@ if test "$enable_shell32_Progress_Dialog" -eq 1; then
|
||||
enable_shell32_SHFileOperation_Move=1
|
||||
fi
|
||||
|
||||
if test "$enable_server_Object_Types" -eq 1; then
|
||||
if test "$enable_ntdll_SystemModuleInformation" -gt 1; then
|
||||
abort "Patchset ntdll-SystemModuleInformation disabled, but server-Object_Types depends on that."
|
||||
fi
|
||||
enable_ntdll_SystemModuleInformation=1
|
||||
fi
|
||||
|
||||
if test "$enable_server_Inherited_ACLs" -eq 1; then
|
||||
if test "$enable_server_Stored_ACLs" -gt 1; then
|
||||
abort "Patchset server-Stored_ACLs disabled, but server-Inherited_ACLs depends on that."
|
||||
@ -1645,12 +1648,16 @@ if test "$enable_ntdll_Syscall_Emulation" -eq 1; then
|
||||
fi
|
||||
|
||||
if test "$enable_winebuild_Fake_Dlls" -eq 1; then
|
||||
if test "$enable_ntdll_ApiSetMap" -gt 1; then
|
||||
abort "Patchset ntdll-ApiSetMap disabled, but winebuild-Fake_Dlls depends on that."
|
||||
fi
|
||||
if test "$enable_ntdll_WRITECOPY" -gt 1; then
|
||||
abort "Patchset ntdll-WRITECOPY disabled, but winebuild-Fake_Dlls depends on that."
|
||||
fi
|
||||
if test "$enable_ws2_32_WSACleanup" -gt 1; then
|
||||
abort "Patchset ws2_32-WSACleanup disabled, but winebuild-Fake_Dlls depends on that."
|
||||
fi
|
||||
enable_ntdll_ApiSetMap=1
|
||||
enable_ntdll_WRITECOPY=1
|
||||
enable_ws2_32_WSACleanup=1
|
||||
fi
|
||||
@ -2691,16 +2698,10 @@ fi
|
||||
# | * dlls/directmanipulation/directmanipulation.c
|
||||
# |
|
||||
if test "$enable_directmanipulation_new_dll" -eq 1; then
|
||||
patch_apply directmanipulation-new-dll/0011-directmanipulation-Implement-IDirectManipulationMana.patch
|
||||
patch_apply directmanipulation-new-dll/0013-directmanipulation-Fake-success-from-IDirectManipula.patch
|
||||
patch_apply directmanipulation-new-dll/0015-directmanipulation-Implement-IDirectManipulationView.patch
|
||||
patch_apply directmanipulation-new-dll/0016-directmanipulation-Support-IDirectManipulationConten.patch
|
||||
patch_apply directmanipulation-new-dll/0017-directmanipulation-Fake-success-in-some-functions.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Implement IDirectManipulationManager2 CreateViewport.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Fake success from IDirectManipulationViewport2 ActivateConfiguration.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Implement IDirectManipulationViewport2 GetPrimaryContent.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Support IDirectManipulationContent in IDirectManipulationPrimaryContent interface.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Fake success in some functions.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
@ -3916,7 +3917,7 @@ fi
|
||||
# Patchset winebuild-Fake_Dlls
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
# | * ntdll-WRITECOPY, ws2_32-WSACleanup
|
||||
# | * ntdll-ApiSetMap, ntdll-WRITECOPY, ws2_32-WSACleanup
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#21232] Chromium-based browser engines (Chrome, Opera, Comodo Dragon, SRWare Iron) crash on startup unless '--no-
|
||||
@ -3968,7 +3969,7 @@ fi
|
||||
# Patchset ntdll-Syscall_Emulation
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
# | * ntdll-WRITECOPY, ws2_32-WSACleanup, winebuild-Fake_Dlls
|
||||
# | * ntdll-ApiSetMap, ntdll-WRITECOPY, ws2_32-WSACleanup, winebuild-Fake_Dlls
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#48291] Detroit: Become Human crashes on launch
|
||||
@ -3991,7 +3992,7 @@ fi
|
||||
# | SystemExtendedProcessInformation)
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/nt.c
|
||||
# | * dlls/ntdll/unix/system.c
|
||||
# |
|
||||
if test "$enable_ntdll_SystemExtendedProcessInformation" -eq 1; then
|
||||
patch_apply ntdll-SystemExtendedProcessInformation/0001-ntdll-Add-stub-for-NtQuerySystemInformation-SystemEx.patch
|
||||
@ -4009,7 +4010,7 @@ fi
|
||||
# | * [#49192] ntdll: NtQuerySystemInformation support SystemCodeIntegrityInformation
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/nt.c, include/winternl.h
|
||||
# | * dlls/ntdll/unix/system.c, include/winternl.h
|
||||
# |
|
||||
if test "$enable_ntdll_SystemCodeIntegrityInformation" -eq 1; then
|
||||
patch_apply ntdll-SystemCodeIntegrityInformation/0001-ntdll-NtQuerySystemInformation-support-SystemCodeInt.patch
|
||||
@ -4024,7 +4025,7 @@ fi
|
||||
# | * [#39123] Return buffer filled with random values from SystemInterruptInformation
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/nt.c
|
||||
# | * dlls/ntdll/unix/system.c
|
||||
# |
|
||||
if test "$enable_ntdll_SystemInterruptInformation" -eq 1; then
|
||||
patch_apply ntdll-SystemInterruptInformation/0001-ntdll-Return-buffer-filled-with-random-values-from-S.patch
|
||||
@ -4042,7 +4043,7 @@ fi
|
||||
# | NtQuerySystemInformation(SystemModuleInformationEx) in Windows Vista+ mode
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/nt.c, include/winternl.h
|
||||
# | * dlls/ntdll/unix/system.c, include/winternl.h
|
||||
# |
|
||||
if test "$enable_ntdll_SystemModuleInformation" -eq 1; then
|
||||
patch_apply ntdll-SystemModuleInformation/0001-ntdll-Don-t-call-LdrQueryProcessModuleInformation-in.patch
|
||||
@ -4067,21 +4068,6 @@ if test "$enable_ntdll_SystemRoot_Symlink" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-ThreadHideFromDebugger
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#48138] League of Legends 9.23: Crash after champ select
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/unix/thread.c
|
||||
# |
|
||||
if test "$enable_ntdll_ThreadHideFromDebugger" -eq 1; then
|
||||
patch_apply ntdll-ThreadHideFromDebugger/0001-ntdll-Stub-NtQueryInformationThread-ThreadHideFromDe.patch
|
||||
(
|
||||
printf '%s\n' '+ { "David Torok", "ntdll: Stub NtQueryInformationThread(ThreadHideFromDebugger).", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-Threading
|
||||
# |
|
||||
# | Modified files:
|
||||
@ -4429,21 +4415,19 @@ fi
|
||||
# | * [#46967] GOG Galaxy doesn't run in virtual desktop.
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/user32/tests/winstation.c, programs/explorer/desktop.c, server/async.c, server/atom.c, server/change.c,
|
||||
# | server/clipboard.c, server/completion.c, server/console.c, server/debugger.c, server/device.c, server/directory.c,
|
||||
# | server/event.c, server/fd.c, server/file.c, server/handle.c, server/handle.h, server/hook.c, server/mailslot.c,
|
||||
# | server/mapping.c, server/mutex.c, server/named_pipe.c, server/object.c, server/object.h, server/process.c,
|
||||
# | server/queue.c, server/registry.c, server/request.c, server/semaphore.c, server/serial.c, server/signal.c,
|
||||
# | server/snapshot.c, server/sock.c, server/symlink.c, server/thread.c, server/timer.c, server/token.c, server/winstation.c
|
||||
# | * programs/explorer/desktop.c, server/async.c, server/atom.c, server/change.c, server/clipboard.c, server/completion.c,
|
||||
# | server/console.c, server/debugger.c, server/device.c, server/directory.c, server/event.c, server/fd.c, server/file.c,
|
||||
# | server/handle.c, server/handle.h, server/hook.c, server/mailslot.c, server/mapping.c, server/mutex.c,
|
||||
# | server/named_pipe.c, server/object.c, server/object.h, server/process.c, server/queue.c, server/registry.c,
|
||||
# | server/request.c, server/semaphore.c, server/serial.c, server/signal.c, server/snapshot.c, server/sock.c,
|
||||
# | server/symlink.c, server/thread.c, server/timer.c, server/token.c, server/winstation.c
|
||||
# |
|
||||
if test "$enable_server_Desktop_Refcount" -eq 1; then
|
||||
patch_apply server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch
|
||||
patch_apply server-Desktop_Refcount/0002-server-Track-desktop-handle-count-more-correctly.patch
|
||||
patch_apply server-Desktop_Refcount/0004-server-Assign-random-name-when-no-name-was-passed-to.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Sebastian Lackner", "server: Introduce a new alloc_handle object callback.", 2 },';
|
||||
printf '%s\n' '+ { "Sebastian Lackner", "server: Track desktop handle count more correctly.", 1 },';
|
||||
printf '%s\n' '+ { "Sebastian Lackner", "server: Assign random name when no name was passed to create_winstation.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
@ -4559,12 +4543,15 @@ fi
|
||||
|
||||
# Patchset server-Object_Types
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
# | * ntdll-SystemModuleInformation
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#44629] Process Hacker can't enumerate handles
|
||||
# | * [#45374] Yet Another Process Monitor (.NET 2.0 app) reports System.AccessViolationException
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/nt.c, dlls/ntdll/om.c, dlls/ntdll/tests/info.c, dlls/ntdll/tests/om.c, include/winternl.h,
|
||||
# | * dlls/ntdll/om.c, dlls/ntdll/tests/info.c, dlls/ntdll/tests/om.c, dlls/ntdll/unix/system.c, include/winternl.h,
|
||||
# | server/completion.c, server/directory.c, server/event.c, server/file.c, server/handle.c, server/mailslot.c,
|
||||
# | server/main.c, server/mapping.c, server/mutex.c, server/named_pipe.c, server/object.c, server/object.h,
|
||||
# | server/process.c, server/protocol.def, server/registry.c, server/semaphore.c, server/symlink.c, server/thread.c,
|
||||
@ -5330,15 +5317,12 @@ fi
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/dinput/device_private.h, dlls/dinput/dinput_main.c, dlls/dinput/mouse.c, dlls/dinput8/tests/device.c,
|
||||
# | dlls/user32/input.c, dlls/user32/rawinput.c, dlls/user32/tests/input.c, dlls/user32/user32.spec,
|
||||
# | dlls/wineandroid.drv/keyboard.c, dlls/wineandroid.drv/window.c, dlls/winemac.drv/ime.c, dlls/winemac.drv/keyboard.c,
|
||||
# | dlls/winemac.drv/mouse.c, dlls/winex11.drv/event.c, dlls/winex11.drv/keyboard.c, dlls/winex11.drv/mouse.c,
|
||||
# | dlls/winex11.drv/x11drv.h, dlls/winex11.drv/x11drv_main.c, include/winuser.h, server/protocol.def, server/queue.c
|
||||
# | dlls/user32/input.c, dlls/user32/rawinput.c, dlls/user32/user32.spec, dlls/wineandroid.drv/keyboard.c,
|
||||
# | dlls/wineandroid.drv/window.c, dlls/winemac.drv/ime.c, dlls/winemac.drv/keyboard.c, dlls/winemac.drv/mouse.c,
|
||||
# | dlls/winex11.drv/event.c, dlls/winex11.drv/keyboard.c, dlls/winex11.drv/mouse.c, dlls/winex11.drv/x11drv.h,
|
||||
# | dlls/winex11.drv/x11drv_main.c, include/winuser.h, server/protocol.def, server/queue.c
|
||||
# |
|
||||
if test "$enable_user32_rawinput_mouse" -eq 1; then
|
||||
patch_apply user32-rawinput-mouse/0001-user32-tests-Add-rawinput-test-for-ClipCursor-intera.patch
|
||||
patch_apply user32-rawinput-mouse/0002-user32-tests-Add-rawinput-test-for-cross-thread-inte.patch
|
||||
patch_apply user32-rawinput-mouse/0003-user32-tests-Add-rawinput-test-for-cross-process-int.patch
|
||||
patch_apply user32-rawinput-mouse/0004-server-Add-send_hardware_message-flags-for-rawinput-.patch
|
||||
patch_apply user32-rawinput-mouse/0005-server-Broadcast-rawinput-message-if-request-flag-is.patch
|
||||
patch_apply user32-rawinput-mouse/0006-user32-Add-__wine_send_input-flags-to-hint-raw-input.patch
|
||||
@ -5350,9 +5334,6 @@ if test "$enable_user32_rawinput_mouse" -eq 1; then
|
||||
patch_apply user32-rawinput-mouse/0012-dinput8-Use-raw-input-interface-for-dinput8-mouse-de.patch
|
||||
patch_apply user32-rawinput-mouse/0013-dinput-Fix-rawinput-events-sequence-number.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Rémi Bernon", "user32/tests: Add rawinput test for ClipCursor interactions.", 1 },';
|
||||
printf '%s\n' '+ { "Rémi Bernon", "user32/tests: Add rawinput test for cross-thread interactions.", 1 },';
|
||||
printf '%s\n' '+ { "Rémi Bernon", "user32/tests: Add rawinput test for cross-process interactions.", 1 },';
|
||||
printf '%s\n' '+ { "Rémi Bernon", "server: Add send_hardware_message flags for rawinput translation.", 1 },';
|
||||
printf '%s\n' '+ { "Rémi Bernon", "server: Broadcast rawinput message if request flag is SEND_HWMSG_RAWINPUT.", 1 },';
|
||||
printf '%s\n' '+ { "Rémi Bernon", "user32: Add __wine_send_input flags to hint raw input translation.", 1 },';
|
||||
|
@ -1,79 +0,0 @@
|
||||
From 64f380eeb8ba1de36b47b6035510373fd1edeaac Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Wed, 24 Feb 2016 19:18:52 +0100
|
||||
Subject: [PATCH] server: Assign random name when no name was passed to
|
||||
create_winstation.
|
||||
|
||||
---
|
||||
dlls/user32/tests/winstation.c | 4 ++--
|
||||
server/winstation.c | 23 ++++++++++++++++++++++-
|
||||
2 files changed, 24 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/user32/tests/winstation.c b/dlls/user32/tests/winstation.c
|
||||
index 4aa5565b96c..9eb3b433c11 100644
|
||||
--- a/dlls/user32/tests/winstation.c
|
||||
+++ b/dlls/user32/tests/winstation.c
|
||||
@@ -225,8 +225,8 @@ static void test_handles(void)
|
||||
memset( buffer, 0, sizeof(buffer) );
|
||||
ret = GetUserObjectInformationA( w2, UOI_NAME, buffer, sizeof(buffer), &size );
|
||||
ok( ret, "GetUserObjectInformationA failed with error %u\n", GetLastError() );
|
||||
- todo_wine ok( !memcmp(buffer, "Service-0x0-", 12), "unexpected window station name '%s'\n", buffer );
|
||||
- todo_wine ok( buffer[strlen(buffer) - 1] == '$', "unexpected window station name '%s'\n", buffer );
|
||||
+ ok( !memcmp(buffer, "Service-0x0-", 12), "unexpected window station name '%s'\n", buffer );
|
||||
+ ok( buffer[strlen(buffer) - 1] == '$', "unexpected window station name '%s'\n", buffer );
|
||||
|
||||
SetLastError( 0xdeadbeef );
|
||||
w3 = OpenWindowStationA( "", TRUE, WINSTA_ALL_ACCESS );
|
||||
diff --git a/server/winstation.c b/server/winstation.c
|
||||
index b120859b39a..fee8980224c 100644
|
||||
--- a/server/winstation.c
|
||||
+++ b/server/winstation.c
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "user.h"
|
||||
#include "file.h"
|
||||
#include "security.h"
|
||||
+#include "unicode.h"
|
||||
|
||||
|
||||
static struct list winstation_list = LIST_INIT(winstation_list);
|
||||
@@ -114,9 +115,28 @@ static const struct object_ops desktop_ops =
|
||||
static struct winstation *create_winstation( struct object *root, const struct unicode_str *name,
|
||||
unsigned int attr, unsigned int flags )
|
||||
{
|
||||
+ static unsigned int id = 0x10000;
|
||||
struct winstation *winstation;
|
||||
+ struct unicode_str default_name;
|
||||
+ char buffer[32];
|
||||
|
||||
- if ((winstation = create_named_object( root, &winstation_ops, name, attr, NULL )))
|
||||
+ if (name->len)
|
||||
+ {
|
||||
+ winstation = create_named_object( root, &winstation_ops, name, attr, NULL );
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
+ do
|
||||
+ {
|
||||
+ if (!++id) id = 1; /* avoid an id of 0 */
|
||||
+ sprintf( buffer, "Service-0x0-%x$", id);
|
||||
+ ascii_to_unicode_str( buffer, &default_name );
|
||||
+ winstation = create_named_object( root, &winstation_ops, &default_name, attr & ~OBJ_OPENIF, NULL );
|
||||
+ }
|
||||
+ while (!winstation && get_error() == STATUS_OBJECT_NAME_COLLISION);
|
||||
+
|
||||
+done:
|
||||
+ if (winstation)
|
||||
{
|
||||
if (get_error() != STATUS_OBJECT_NAME_EXISTS)
|
||||
{
|
||||
@@ -134,6 +154,7 @@ static struct winstation *create_winstation( struct object *root, const struct u
|
||||
}
|
||||
else clear_error();
|
||||
}
|
||||
+
|
||||
return winstation;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,4 +1,3 @@
|
||||
Fixes: Fix possible leak of explorer.exe processes and implement proper desktop refcounting
|
||||
Fixes: Assign random name when trying to create Window Station without name
|
||||
Fixes: [46967] GOG Galaxy doesn't run in virtual desktop.
|
||||
Depends: ws2_32-WSACleanup
|
||||
|
@ -1,82 +1,20 @@
|
||||
From 0384d32afa328e76bff7f8e508201ce2535ee763 Mon Sep 17 00:00:00 2001
|
||||
From e57cb9c97ea1147595a9c29e236515a2be69f9bd Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 7 Mar 2017 18:30:33 +0100
|
||||
Subject: ntdll: Implement SystemExtendedHandleInformation in
|
||||
Subject: [PATCH] ntdll: Implement SystemExtendedHandleInformation in
|
||||
NtQuerySystemInformation.
|
||||
|
||||
---
|
||||
dlls/ntdll/nt.c | 51 +++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/ntdll/tests/info.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
include/winternl.h | 21 +++++++++++++++++
|
||||
3 files changed, 132 insertions(+)
|
||||
dlls/ntdll/tests/info.c | 60 ++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/ntdll/unix/system.c | 52 ++++++++++++++++++++++++++++++++++
|
||||
include/winternl.h | 21 ++++++++++++++
|
||||
3 files changed, 133 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
|
||||
index de8f16f9a0..a939298d19 100644
|
||||
--- a/dlls/ntdll/nt.c
|
||||
+++ b/dlls/ntdll/nt.c
|
||||
@@ -2294,6 +2294,57 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
RtlFreeHeap( GetProcessHeap(), 0, info );
|
||||
}
|
||||
break;
|
||||
+ case SystemExtendedHandleInformation:
|
||||
+ {
|
||||
+ struct handle_info *info;
|
||||
+ DWORD i, num_handles;
|
||||
+
|
||||
+ if (Length < sizeof(SYSTEM_HANDLE_INFORMATION_EX))
|
||||
+ {
|
||||
+ ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (!SystemInformation)
|
||||
+ {
|
||||
+ ret = STATUS_ACCESS_VIOLATION;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ num_handles = (Length - FIELD_OFFSET( SYSTEM_HANDLE_INFORMATION_EX, Handle ));
|
||||
+ num_handles /= sizeof(SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX);
|
||||
+ if (!(info = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*info) * num_handles )))
|
||||
+ return STATUS_NO_MEMORY;
|
||||
+
|
||||
+ SERVER_START_REQ( get_system_handles )
|
||||
+ {
|
||||
+ wine_server_set_reply( req, info, sizeof(*info) * num_handles );
|
||||
+ if (!(ret = wine_server_call( req )))
|
||||
+ {
|
||||
+ SYSTEM_HANDLE_INFORMATION_EX *shi = SystemInformation;
|
||||
+ shi->Count = wine_server_reply_size( req ) / sizeof(*info);
|
||||
+ shi->Reserved = 0;
|
||||
+ len = FIELD_OFFSET( SYSTEM_HANDLE_INFORMATION_EX, Handle[shi->Count] );
|
||||
+ for (i = 0; i < shi->Count; i++)
|
||||
+ {
|
||||
+ memset( &shi->Handle[i], 0, sizeof(shi->Handle[i]) );
|
||||
+ shi->Handle[i].UniqueProcessId = info[i].owner;
|
||||
+ shi->Handle[i].HandleValue = info[i].handle;
|
||||
+ shi->Handle[i].GrantedAccess = info[i].access;
|
||||
+ /* FIXME: Fill out remaining fields */
|
||||
+ }
|
||||
+ }
|
||||
+ else if (ret == STATUS_BUFFER_TOO_SMALL)
|
||||
+ {
|
||||
+ len = FIELD_OFFSET( SYSTEM_HANDLE_INFORMATION_EX, Handle[reply->count] );
|
||||
+ ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||
+ }
|
||||
+ }
|
||||
+ SERVER_END_REQ;
|
||||
+
|
||||
+ RtlFreeHeap( GetProcessHeap(), 0, info );
|
||||
+ }
|
||||
+ break;
|
||||
case SystemCacheInformation:
|
||||
{
|
||||
SYSTEM_CACHE_INFORMATION sci;
|
||||
diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c
|
||||
index 32cb4f5a5d..c65a74bf5e 100644
|
||||
index eaf2f1a45b7..1728ab82225 100644
|
||||
--- a/dlls/ntdll/tests/info.c
|
||||
+++ b/dlls/ntdll/tests/info.c
|
||||
@@ -561,6 +561,62 @@ done:
|
||||
@@ -662,6 +662,62 @@ done:
|
||||
HeapFree( GetProcessHeap(), 0, shi);
|
||||
}
|
||||
|
||||
@ -139,7 +77,7 @@ index 32cb4f5a5d..c65a74bf5e 100644
|
||||
static void test_query_cache(void)
|
||||
{
|
||||
NTSTATUS status;
|
||||
@@ -2147,6 +2203,10 @@ START_TEST(info)
|
||||
@@ -2715,6 +2771,10 @@ START_TEST(info)
|
||||
trace("Starting test_query_handle()\n");
|
||||
test_query_handle();
|
||||
|
||||
@ -150,11 +88,74 @@ index 32cb4f5a5d..c65a74bf5e 100644
|
||||
/* 0x15 SystemCacheInformation */
|
||||
trace("Starting test_query_cache()\n");
|
||||
test_query_cache();
|
||||
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
|
||||
index 5ba9fb41156..df4e11a0f56 100644
|
||||
--- a/dlls/ntdll/unix/system.c
|
||||
+++ b/dlls/ntdll/unix/system.c
|
||||
@@ -1985,6 +1985,58 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
break;
|
||||
}
|
||||
|
||||
+ case SystemExtendedHandleInformation:
|
||||
+ {
|
||||
+ struct handle_info *handle_info;
|
||||
+ DWORD i, num_handles;
|
||||
+
|
||||
+ if (size < sizeof(SYSTEM_HANDLE_INFORMATION_EX))
|
||||
+ {
|
||||
+ ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (!info)
|
||||
+ {
|
||||
+ ret = STATUS_ACCESS_VIOLATION;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ num_handles = size - FIELD_OFFSET( SYSTEM_HANDLE_INFORMATION_EX, Handle );
|
||||
+ num_handles /= sizeof(SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX);
|
||||
+ if (!(handle_info = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*handle_info) * num_handles )))
|
||||
+ return STATUS_NO_MEMORY;
|
||||
+
|
||||
+ SERVER_START_REQ( get_system_handles )
|
||||
+ {
|
||||
+ wine_server_set_reply( req, handle_info, sizeof(*handle_info) * num_handles );
|
||||
+ if (!(ret = wine_server_call( req )))
|
||||
+ {
|
||||
+ SYSTEM_HANDLE_INFORMATION_EX *shi = info;
|
||||
+ shi->Count = wine_server_reply_size( req ) / sizeof(*handle_info);
|
||||
+ shi->Reserved = 0;
|
||||
+ len = FIELD_OFFSET( SYSTEM_HANDLE_INFORMATION_EX, Handle[shi->Count] );
|
||||
+ for (i = 0; i < shi->Count; i++)
|
||||
+ {
|
||||
+ memset( &shi->Handle[i], 0, sizeof(shi->Handle[i]) );
|
||||
+ shi->Handle[i].UniqueProcessId = handle_info[i].owner;
|
||||
+ shi->Handle[i].HandleValue = handle_info[i].handle;
|
||||
+ shi->Handle[i].GrantedAccess = handle_info[i].access;
|
||||
+ /* FIXME: Fill out remaining fields */
|
||||
+ }
|
||||
+ }
|
||||
+ else if (ret == STATUS_BUFFER_TOO_SMALL)
|
||||
+ {
|
||||
+ len = FIELD_OFFSET( SYSTEM_HANDLE_INFORMATION_EX, Handle[reply->count] );
|
||||
+ ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||
+ }
|
||||
+ }
|
||||
+ SERVER_END_REQ;
|
||||
+
|
||||
+ RtlFreeHeap( GetProcessHeap(), 0, handle_info );
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
case SystemCacheInformation:
|
||||
{
|
||||
SYSTEM_CACHE_INFORMATION sci = { 0 };
|
||||
diff --git a/include/winternl.h b/include/winternl.h
|
||||
index 87b2c4d253..7ffe4f6c81 100644
|
||||
index 3ff15f28c15..66cd05dac15 100644
|
||||
--- a/include/winternl.h
|
||||
+++ b/include/winternl.h
|
||||
@@ -1442,6 +1442,27 @@ typedef struct _SYSTEM_HANDLE_INFORMATION {
|
||||
@@ -1531,6 +1531,27 @@ typedef struct _SYSTEM_HANDLE_INFORMATION {
|
||||
SYSTEM_HANDLE_ENTRY Handle[1];
|
||||
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
|
||||
|
||||
@ -183,5 +184,5 @@ index 87b2c4d253..7ffe4f6c81 100644
|
||||
|
||||
typedef struct _SYSTEM_CACHE_INFORMATION {
|
||||
--
|
||||
2.11.0
|
||||
2.27.0
|
||||
|
||||
|
@ -1,44 +1,44 @@
|
||||
From ba10e334a375c7dde7cd890554fbbade1be81a9d Mon Sep 17 00:00:00 2001
|
||||
From f4c44206896c0fdbcff7c465e631acff98bc920e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Wed, 8 Mar 2017 17:44:17 +0100
|
||||
Subject: ntdll: Set object type for System(Extended)HandleInformation in
|
||||
NtQuerySystemInformation.
|
||||
Subject: [PATCH] ntdll: Set object type for System(Extended)HandleInformation
|
||||
in NtQuerySystemInformation.
|
||||
|
||||
---
|
||||
dlls/ntdll/nt.c | 4 +++-
|
||||
server/directory.c | 6 ++++++
|
||||
server/handle.c | 10 ++++++++++
|
||||
server/object.h | 1 +
|
||||
server/protocol.def | 1 +
|
||||
dlls/ntdll/unix/system.c | 4 +++-
|
||||
server/directory.c | 6 ++++++
|
||||
server/handle.c | 10 ++++++++++
|
||||
server/object.h | 1 +
|
||||
server/protocol.def | 1 +
|
||||
5 files changed, 21 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
|
||||
index a939298d19..211b67f98b 100644
|
||||
--- a/dlls/ntdll/nt.c
|
||||
+++ b/dlls/ntdll/nt.c
|
||||
@@ -2280,7 +2280,8 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
shi->Handle[i].OwnerPid = info[i].owner;
|
||||
shi->Handle[i].HandleValue = info[i].handle;
|
||||
shi->Handle[i].AccessMask = info[i].access;
|
||||
- /* FIXME: Fill out ObjectType, HandleFlags, ObjectPointer */
|
||||
+ shi->Handle[i].ObjectType = info[i].type;
|
||||
+ /* FIXME: Fill out HandleFlags, ObjectPointer */
|
||||
}
|
||||
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
|
||||
index 34cea04f852..7ae3f12753b 100644
|
||||
--- a/dlls/ntdll/unix/system.c
|
||||
+++ b/dlls/ntdll/unix/system.c
|
||||
@@ -1970,7 +1970,8 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
shi->Handle[i].OwnerPid = handle_info[i].owner;
|
||||
shi->Handle[i].HandleValue = handle_info[i].handle;
|
||||
shi->Handle[i].AccessMask = handle_info[i].access;
|
||||
- /* FIXME: Fill out ObjectType, HandleFlags, ObjectPointer */
|
||||
+ shi->Handle[i].ObjectType = handle_info[i].type;
|
||||
+ /* FIXME: Fill out HandleFlags, ObjectPointer */
|
||||
}
|
||||
else if (ret == STATUS_BUFFER_TOO_SMALL)
|
||||
@@ -2331,6 +2332,7 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
shi->Handle[i].UniqueProcessId = info[i].owner;
|
||||
shi->Handle[i].HandleValue = info[i].handle;
|
||||
shi->Handle[i].GrantedAccess = info[i].access;
|
||||
+ shi->Handle[i].ObjectTypeIndex = info[i].type;
|
||||
/* FIXME: Fill out remaining fields */
|
||||
}
|
||||
}
|
||||
else if (ret == STATUS_BUFFER_TOO_SMALL)
|
||||
@@ -2022,6 +2023,7 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
shi->Handle[i].UniqueProcessId = handle_info[i].owner;
|
||||
shi->Handle[i].HandleValue = handle_info[i].handle;
|
||||
shi->Handle[i].GrantedAccess = handle_info[i].access;
|
||||
+ shi->Handle[i].ObjectTypeIndex = handle_info[i].type;
|
||||
/* FIXME: Fill out remaining fields */
|
||||
}
|
||||
}
|
||||
diff --git a/server/directory.c b/server/directory.c
|
||||
index 59c8194d09..f61a5cecf1 100644
|
||||
index e6c1edc719a..021bc149c4d 100644
|
||||
--- a/server/directory.c
|
||||
+++ b/server/directory.c
|
||||
@@ -249,6 +249,12 @@ struct object_type *get_object_type( const struct unicode_str *name )
|
||||
@@ -247,6 +247,12 @@ struct object_type *get_object_type( const struct unicode_str *name )
|
||||
return type;
|
||||
}
|
||||
|
||||
@ -52,10 +52,10 @@ index 59c8194d09..f61a5cecf1 100644
|
||||
|
||||
static void create_session( unsigned int id )
|
||||
diff --git a/server/handle.c b/server/handle.c
|
||||
index 0e909ff27e..e29cead46b 100644
|
||||
index a2a8bb5479c..e40e9e95d8f 100644
|
||||
--- a/server/handle.c
|
||||
+++ b/server/handle.c
|
||||
@@ -971,6 +971,7 @@ static int enum_handles( struct process *process, void *user )
|
||||
@@ -790,6 +790,7 @@ static int enum_handles( struct process *process, void *user )
|
||||
struct handle_table *table = process->handles;
|
||||
struct handle_entry *entry;
|
||||
struct handle_info *handle;
|
||||
@ -63,7 +63,7 @@ index 0e909ff27e..e29cead46b 100644
|
||||
unsigned int i;
|
||||
|
||||
if (!table)
|
||||
@@ -989,6 +990,15 @@ static int enum_handles( struct process *process, void *user )
|
||||
@@ -808,6 +809,15 @@ static int enum_handles( struct process *process, void *user )
|
||||
handle->owner = process->id;
|
||||
handle->handle = index_to_handle(i);
|
||||
handle->access = entry->access & ~RESERVED_ALL;
|
||||
@ -80,10 +80,10 @@ index 0e909ff27e..e29cead46b 100644
|
||||
}
|
||||
|
||||
diff --git a/server/object.h b/server/object.h
|
||||
index 3ba3f4b431..4a5d282a47 100644
|
||||
index f3f7617394d..1517e8c98fb 100644
|
||||
--- a/server/object.h
|
||||
+++ b/server/object.h
|
||||
@@ -264,6 +264,7 @@ static const WCHAR type_Type[] = {'T','y','p','e'};
|
||||
@@ -262,6 +262,7 @@ static const WCHAR type_Type[] = {'T','y','p','e'};
|
||||
static const WCHAR type_WindowStation[] = {'W','i','n','d','o','w','S','t','a','t','i','o','n'};
|
||||
|
||||
extern void init_types(void);
|
||||
@ -92,10 +92,10 @@ index 3ba3f4b431..4a5d282a47 100644
|
||||
/* symbolic link functions */
|
||||
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index d6847f8d55..35730d60cb 100644
|
||||
index 2ec81bb6ad1..72f148b12e7 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -3433,6 +3433,7 @@ struct handle_info
|
||||
@@ -3493,6 +3493,7 @@ struct handle_info
|
||||
process_id_t owner;
|
||||
obj_handle_t handle;
|
||||
unsigned int access;
|
||||
@ -104,5 +104,5 @@ index d6847f8d55..35730d60cb 100644
|
||||
|
||||
/* Return a list of all opened handles */
|
||||
--
|
||||
2.11.0
|
||||
2.27.0
|
||||
|
||||
|
@ -1,62 +1,20 @@
|
||||
From 963a3aedc5b1539187d9aa5065ff16d6c60b6477 Mon Sep 17 00:00:00 2001
|
||||
From aff46ac5cdbb7e202e4b153b2f869c55a17da1fa Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Wed, 8 Mar 2017 19:39:29 +0100
|
||||
Subject: [PATCH] ntdll: Mimic object type behavior for different windows
|
||||
versions.
|
||||
|
||||
---
|
||||
dlls/ntdll/nt.c | 17 +++++++++--
|
||||
dlls/ntdll/om.c | 5 +++-
|
||||
dlls/ntdll/tests/om.c | 65 ++++++++++++++++++++++++++++++++++++++++++-
|
||||
3 files changed, 83 insertions(+), 4 deletions(-)
|
||||
dlls/ntdll/om.c | 5 +++-
|
||||
dlls/ntdll/tests/om.c | 65 +++++++++++++++++++++++++++++++++++++++-
|
||||
dlls/ntdll/unix/system.c | 18 +++++++++--
|
||||
3 files changed, 83 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
|
||||
index d194f863..452fad15 100644
|
||||
--- a/dlls/ntdll/nt.c
|
||||
+++ b/dlls/ntdll/nt.c
|
||||
@@ -126,6 +126,19 @@ struct smbios_chassis {
|
||||
#define FIRM 0x4649524D
|
||||
#define RSMB 0x52534D42
|
||||
|
||||
+static DWORD translate_object_index(DWORD index)
|
||||
+{
|
||||
+ WORD version = MAKEWORD(NtCurrentTeb()->Peb->OSMinorVersion, NtCurrentTeb()->Peb->OSMajorVersion);
|
||||
+
|
||||
+ /* Process Hacker depends on this logic */
|
||||
+ if (version >= 0x0602)
|
||||
+ return index;
|
||||
+ else if (version == 0x0601)
|
||||
+ return index + 2;
|
||||
+ else
|
||||
+ return index + 1;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Token
|
||||
*/
|
||||
@@ -2617,7 +2630,7 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
shi->Handle[i].OwnerPid = info[i].owner;
|
||||
shi->Handle[i].HandleValue = info[i].handle;
|
||||
shi->Handle[i].AccessMask = info[i].access;
|
||||
- shi->Handle[i].ObjectType = info[i].type;
|
||||
+ shi->Handle[i].ObjectType = translate_object_index(info[i].type);
|
||||
/* FIXME: Fill out HandleFlags, ObjectPointer */
|
||||
}
|
||||
}
|
||||
@@ -2669,7 +2682,7 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
shi->Handle[i].UniqueProcessId = info[i].owner;
|
||||
shi->Handle[i].HandleValue = info[i].handle;
|
||||
shi->Handle[i].GrantedAccess = info[i].access;
|
||||
- shi->Handle[i].ObjectTypeIndex = info[i].type;
|
||||
+ shi->Handle[i].ObjectTypeIndex = translate_object_index(info[i].type);
|
||||
/* FIXME: Fill out remaining fields */
|
||||
}
|
||||
}
|
||||
diff --git a/dlls/ntdll/om.c b/dlls/ntdll/om.c
|
||||
index c0479ea6..2156fad5 100644
|
||||
index 4fea106cc46..eea095acbf9 100644
|
||||
--- a/dlls/ntdll/om.c
|
||||
+++ b/dlls/ntdll/om.c
|
||||
@@ -185,7 +185,10 @@ NTSTATUS WINAPI NtQueryObject(IN HANDLE handle,
|
||||
@@ -182,7 +182,10 @@ NTSTATUS WINAPI NtQueryObject(IN HANDLE handle,
|
||||
}
|
||||
if (status == STATUS_SUCCESS)
|
||||
{
|
||||
@ -69,10 +27,10 @@ index c0479ea6..2156fad5 100644
|
||||
}
|
||||
}
|
||||
diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
|
||||
index a94b9866..54ef3955 100644
|
||||
index 398ad6bed4e..b538160f6d0 100644
|
||||
--- a/dlls/ntdll/tests/om.c
|
||||
+++ b/dlls/ntdll/tests/om.c
|
||||
@@ -74,6 +74,7 @@ static NTSTATUS (WINAPI *pNtQuerySystemTime)( LARGE_INTEGER * );
|
||||
@@ -76,6 +76,7 @@ static NTSTATUS (WINAPI *pNtQuerySystemTime)( LARGE_INTEGER * );
|
||||
static NTSTATUS (WINAPI *pRtlWaitOnAddress)( const void *, const void *, SIZE_T, const LARGE_INTEGER * );
|
||||
static void (WINAPI *pRtlWakeAddressAll)( const void * );
|
||||
static void (WINAPI *pRtlWakeAddressSingle)( const void * );
|
||||
@ -80,7 +38,7 @@ index a94b9866..54ef3955 100644
|
||||
|
||||
#define KEYEDEVENT_WAIT 0x0001
|
||||
#define KEYEDEVENT_WAKE 0x0002
|
||||
@@ -1594,13 +1595,31 @@ static void test_query_object(void)
|
||||
@@ -1598,13 +1599,31 @@ static void test_query_object(void)
|
||||
|
||||
}
|
||||
|
||||
@ -113,7 +71,7 @@ index a94b9866..54ef3955 100644
|
||||
|
||||
buffer = HeapAlloc( GetProcessHeap(), 0, sizeof(OBJECT_TYPES_INFORMATION) );
|
||||
ok( buffer != NULL, "Failed to allocate memory\n" );
|
||||
@@ -1628,11 +1647,54 @@ static void test_query_object_types(void)
|
||||
@@ -1632,11 +1651,54 @@ static void test_query_object_types(void)
|
||||
ok( type->TypeName.Length == sizeof(typeW) && !strncmpW(typeW, type->TypeName.Buffer, 4),
|
||||
"Expected 'Type' as first type, got %s\n", wine_dbgstr_us(&type->TypeName) );
|
||||
}
|
||||
@ -168,7 +126,7 @@ index a94b9866..54ef3955 100644
|
||||
}
|
||||
|
||||
static void test_type_mismatch(void)
|
||||
@@ -2226,6 +2288,7 @@ START_TEST(om)
|
||||
@@ -2263,6 +2325,7 @@ START_TEST(om)
|
||||
pRtlWaitOnAddress = (void *)GetProcAddress(hntdll, "RtlWaitOnAddress");
|
||||
pRtlWakeAddressAll = (void *)GetProcAddress(hntdll, "RtlWakeAddressAll");
|
||||
pRtlWakeAddressSingle = (void *)GetProcAddress(hntdll, "RtlWakeAddressSingle");
|
||||
@ -176,6 +134,56 @@ index a94b9866..54ef3955 100644
|
||||
|
||||
test_case_sensitive();
|
||||
test_namespace_pipe();
|
||||
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
|
||||
index b1b53256905..e317d34755c 100644
|
||||
--- a/dlls/ntdll/unix/system.c
|
||||
+++ b/dlls/ntdll/unix/system.c
|
||||
@@ -1657,6 +1657,19 @@ static void get_ntdll_system_module(SYSTEM_MODULE *sm)
|
||||
sm->NameOffset = (ptr != NULL) ? (ptr - str.Buffer + 1) : 0;
|
||||
}
|
||||
|
||||
+static DWORD translate_object_index(DWORD index)
|
||||
+{
|
||||
+ WORD version = MAKEWORD(NtCurrentTeb()->Peb->OSMinorVersion, NtCurrentTeb()->Peb->OSMajorVersion);
|
||||
+
|
||||
+ /* Process Hacker depends on this logic */
|
||||
+ if (version >= 0x0602)
|
||||
+ return index;
|
||||
+ else if (version == 0x0601)
|
||||
+ return index + 2;
|
||||
+ else
|
||||
+ return index + 1;
|
||||
+}
|
||||
+
|
||||
/******************************************************************************
|
||||
* NtQuerySystemInformation (NTDLL.@)
|
||||
*/
|
||||
@@ -2031,7 +2044,7 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
shi->Handle[i].OwnerPid = handle_info[i].owner;
|
||||
shi->Handle[i].HandleValue = handle_info[i].handle;
|
||||
shi->Handle[i].AccessMask = handle_info[i].access;
|
||||
- shi->Handle[i].ObjectType = handle_info[i].type;
|
||||
+ shi->Handle[i].ObjectType = translate_object_index( handle_info[i].type );
|
||||
/* FIXME: Fill out HandleFlags, ObjectPointer */
|
||||
}
|
||||
}
|
||||
@@ -2084,7 +2097,7 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
shi->Handle[i].UniqueProcessId = handle_info[i].owner;
|
||||
shi->Handle[i].HandleValue = handle_info[i].handle;
|
||||
shi->Handle[i].GrantedAccess = handle_info[i].access;
|
||||
- shi->Handle[i].ObjectTypeIndex = handle_info[i].type;
|
||||
+ shi->Handle[i].ObjectTypeIndex = translate_object_index( handle_info[i].type );
|
||||
/* FIXME: Fill out remaining fields */
|
||||
}
|
||||
}
|
||||
@@ -2314,7 +2327,6 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
|
||||
return ret;
|
||||
}
|
||||
|
||||
-
|
||||
/******************************************************************************
|
||||
* NtQuerySystemInformationEx (NTDLL.@)
|
||||
*/
|
||||
--
|
||||
2.20.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
Fixes: [44629] Process Hacker can't enumerate handles
|
||||
Fixes: [45374] Yet Another Process Monitor (.NET 2.0 app) reports System.AccessViolationException
|
||||
Depends: ntdll-SystemModuleInformation
|
||||
#Depends: server-Shared_Memory
|
||||
|
@ -1,16 +1,15 @@
|
||||
From 8102136961bf8ed57bcde4b74548562e5e3e21a0 Mon Sep 17 00:00:00 2001
|
||||
From fdaeb6ba616ef833c275e2aa53fc06abacefc1ad Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Thu, 26 Feb 2015 23:21:26 +0100
|
||||
Subject: [PATCH] shell32: Pass FILE_INFORMATION into SHNotify*
|
||||
functions.
|
||||
Subject: [PATCH] shell32: Pass FILE_INFORMATION into SHNotify* functions.
|
||||
|
||||
Preparation of the progressbar work. Based on a patch by Huw Campbell.
|
||||
---
|
||||
dlls/shell32/shlfileop.c | 201 +++++++++++++++++++++++------------------------
|
||||
dlls/shell32/shlfileop.c | 201 +++++++++++++++++++--------------------
|
||||
1 file changed, 98 insertions(+), 103 deletions(-)
|
||||
|
||||
diff --git a/dlls/shell32/shlfileop.c b/dlls/shell32/shlfileop.c
|
||||
index 91d5781..71de462 100644
|
||||
index e4c7449f05e..028a1d76e4f 100644
|
||||
--- a/dlls/shell32/shlfileop.c
|
||||
+++ b/dlls/shell32/shlfileop.c
|
||||
@@ -59,16 +59,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||
@ -215,7 +214,7 @@ index 91d5781..71de462 100644
|
||||
/* Destination file may already exist with read only attribute */
|
||||
attribs = GetFileAttributesW(dest);
|
||||
if (IsAttrib(attribs, FILE_ATTRIBUTE_READONLY))
|
||||
@@ -899,30 +922,6 @@ int WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp)
|
||||
@@ -904,30 +927,6 @@ int WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp)
|
||||
return retCode;
|
||||
}
|
||||
|
||||
@ -246,7 +245,7 @@ index 91d5781..71de462 100644
|
||||
static inline void grow_list(FILE_LIST *list)
|
||||
{
|
||||
FILE_ENTRY *new = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, list->feFiles,
|
||||
@@ -1085,7 +1084,7 @@ static void destroy_file_list(FILE_LIST *flList)
|
||||
@@ -1093,7 +1092,7 @@ static void destroy_file_list(FILE_LIST *flList)
|
||||
static void copy_dir_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, LPCWSTR szDestPath)
|
||||
{
|
||||
WCHAR szFrom[MAX_PATH], szTo[MAX_PATH];
|
||||
@ -255,7 +254,7 @@ index 91d5781..71de462 100644
|
||||
|
||||
static const WCHAR wildCardFiles[] = {'*','.','*',0};
|
||||
|
||||
@@ -1113,17 +1112,16 @@ static void copy_dir_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, LPCWST
|
||||
@@ -1121,17 +1120,16 @@ static void copy_dir_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, LPCWST
|
||||
PathCombineW(szFrom, feFrom->szFullPath, wildCardFiles);
|
||||
szFrom[lstrlenW(szFrom) + 1] = '\0';
|
||||
|
||||
@ -281,7 +280,7 @@ index 91d5781..71de462 100644
|
||||
}
|
||||
|
||||
static BOOL copy_file_to_file(FILE_OPERATION *op, const WCHAR *szFrom, const WCHAR *szTo)
|
||||
@@ -1134,7 +1132,7 @@ static BOOL copy_file_to_file(FILE_OPERATION *op, const WCHAR *szFrom, const WCH
|
||||
@@ -1142,7 +1140,7 @@ static BOOL copy_file_to_file(FILE_OPERATION *op, const WCHAR *szFrom, const WCH
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -290,7 +289,7 @@ index 91d5781..71de462 100644
|
||||
}
|
||||
|
||||
/* copy a file or directory to another directory */
|
||||
@@ -1174,7 +1172,7 @@ static void create_dest_dirs(LPCWSTR szDestDir)
|
||||
@@ -1182,7 +1180,7 @@ static void create_dest_dirs(LPCWSTR szDestDir)
|
||||
}
|
||||
|
||||
/* the FO_COPY operation */
|
||||
@ -299,16 +298,16 @@ index 91d5781..71de462 100644
|
||||
{
|
||||
DWORD i;
|
||||
const FILE_ENTRY *entryToCopy;
|
||||
@@ -1197,7 +1195,7 @@ static int copy_files(FILE_OPERATION *op, const FILE_LIST *flFrom, FILE_LIST *fl
|
||||
@@ -1205,7 +1203,7 @@ static int copy_files(FILE_OPERATION *op, const FILE_LIST *flFrom, FILE_LIST *fl
|
||||
fileDest = &flTo->feFiles[0];
|
||||
}
|
||||
|
||||
- if (op->req->fFlags & FOF_MULTIDESTFILES)
|
||||
+ if (multidest)
|
||||
- if (op->req->fFlags & FOF_MULTIDESTFILES && flTo->dwNumFiles > 1)
|
||||
+ if (multidest && flTo->dwNumFiles > 1)
|
||||
{
|
||||
if (flFrom->bAnyFromWildcard)
|
||||
return ERROR_CANCELLED;
|
||||
@@ -1249,8 +1247,7 @@ static int copy_files(FILE_OPERATION *op, const FILE_LIST *flFrom, FILE_LIST *fl
|
||||
@@ -1257,8 +1255,7 @@ static int copy_files(FILE_OPERATION *op, const FILE_LIST *flFrom, FILE_LIST *fl
|
||||
{
|
||||
entryToCopy = &flFrom->feFiles[i];
|
||||
|
||||
@ -318,7 +317,7 @@ index 91d5781..71de462 100644
|
||||
{
|
||||
fileDest = &flTo->feFiles[i];
|
||||
}
|
||||
@@ -1322,7 +1319,7 @@ static BOOL confirm_delete_list(HWND hWnd, DWORD fFlags, BOOL fTrash, const FILE
|
||||
@@ -1330,7 +1327,7 @@ static BOOL confirm_delete_list(HWND hWnd, DWORD fFlags, BOOL fTrash, const FILE
|
||||
}
|
||||
|
||||
/* the FO_DELETE operation */
|
||||
@ -327,7 +326,7 @@ index 91d5781..71de462 100644
|
||||
{
|
||||
const FILE_ENTRY *fileEntry;
|
||||
DWORD i;
|
||||
@@ -1333,13 +1330,13 @@ static int delete_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom)
|
||||
@@ -1341,13 +1338,13 @@ static int delete_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom)
|
||||
return ERROR_SUCCESS;
|
||||
|
||||
/* Windows also checks only the first item */
|
||||
@ -345,7 +344,7 @@ index 91d5781..71de462 100644
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1348,7 +1345,7 @@ static int delete_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom)
|
||||
@@ -1356,7 +1353,7 @@ static int delete_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom)
|
||||
fileEntry = &flFrom->feFiles[i];
|
||||
|
||||
if (!IsAttribFile(fileEntry->attributes) &&
|
||||
@ -354,7 +353,7 @@ index 91d5781..71de462 100644
|
||||
continue;
|
||||
|
||||
if (bTrash)
|
||||
@@ -1358,14 +1355,14 @@ static int delete_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom)
|
||||
@@ -1366,14 +1363,14 @@ static int delete_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom)
|
||||
continue;
|
||||
|
||||
/* Note: Windows silently deletes the file in such a situation, we show a dialog */
|
||||
@ -372,7 +371,7 @@ index 91d5781..71de462 100644
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1375,7 +1372,7 @@ static int delete_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom)
|
||||
@@ -1383,7 +1380,7 @@ static int delete_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom)
|
||||
ret = DeleteFileW(fileEntry->szFullPath) ?
|
||||
ERROR_SUCCESS : GetLastError();
|
||||
else
|
||||
@ -381,7 +380,7 @@ index 91d5781..71de462 100644
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -1385,16 +1382,16 @@ static int delete_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom)
|
||||
@@ -1393,16 +1390,16 @@ static int delete_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom)
|
||||
}
|
||||
|
||||
/* moves a file or directory to another directory */
|
||||
@ -401,7 +400,7 @@ index 91d5781..71de462 100644
|
||||
{
|
||||
DWORD i;
|
||||
INT mismatched = 0;
|
||||
@@ -1407,14 +1404,12 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
@@ -1415,14 +1412,12 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
if (!flTo->dwNumFiles)
|
||||
return ERROR_FILE_NOT_FOUND;
|
||||
|
||||
@ -418,7 +417,7 @@ index 91d5781..71de462 100644
|
||||
flFrom->dwNumFiles > flTo->dwNumFiles)
|
||||
{
|
||||
return ERROR_CANCELLED;
|
||||
@@ -1427,7 +1422,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
@@ -1435,7 +1430,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -427,7 +426,7 @@ index 91d5781..71de462 100644
|
||||
mismatched = flFrom->dwNumFiles - flTo->dwNumFiles;
|
||||
|
||||
fileDest = &flTo->feFiles[0];
|
||||
@@ -1438,7 +1433,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
@@ -1446,7 +1441,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
if (!PathFileExistsW(fileDest->szDirectory))
|
||||
return ERROR_CANCELLED;
|
||||
|
||||
@ -436,7 +435,7 @@ index 91d5781..71de462 100644
|
||||
{
|
||||
if (i >= flTo->dwNumFiles)
|
||||
break;
|
||||
@@ -1452,9 +1447,9 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
@@ -1460,9 +1455,9 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
}
|
||||
|
||||
if (fileDest->bExists && IsAttribDir(fileDest->attributes))
|
||||
@ -448,7 +447,7 @@ index 91d5781..71de462 100644
|
||||
}
|
||||
|
||||
if (mismatched > 0)
|
||||
@@ -1469,7 +1464,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
@@ -1477,7 +1472,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
}
|
||||
|
||||
/* the FO_RENAME files */
|
||||
@ -457,7 +456,7 @@ index 91d5781..71de462 100644
|
||||
{
|
||||
const FILE_ENTRY *feFrom;
|
||||
const FILE_ENTRY *feTo;
|
||||
@@ -1491,7 +1486,7 @@ static int rename_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, con
|
||||
@@ -1499,7 +1494,7 @@ static int rename_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, con
|
||||
if (feTo->bExists)
|
||||
return ERROR_ALREADY_EXISTS;
|
||||
|
||||
@ -466,7 +465,7 @@ index 91d5781..71de462 100644
|
||||
}
|
||||
|
||||
/* alert the user if an unsupported flag is used */
|
||||
@@ -1538,16 +1533,16 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
|
||||
@@ -1546,16 +1541,16 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
|
||||
switch (lpFileOp->wFunc)
|
||||
{
|
||||
case FO_COPY:
|
||||
@ -488,5 +487,5 @@ index 91d5781..71de462 100644
|
||||
default:
|
||||
ret = ERROR_INVALID_PARAMETER;
|
||||
--
|
||||
1.9.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,262 +0,0 @@
|
||||
From fe1ae8a2e1ee05143a9a0b7248420edada9bc09d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
||||
Date: Thu, 14 Nov 2019 16:41:43 +0100
|
||||
Subject: [PATCH 01/12] user32/tests: Add rawinput test for ClipCursor
|
||||
interactions.
|
||||
|
||||
This shows unexpected rawinput messages triggered from cursor clipping.
|
||||
|
||||
The sleeps are required to let native cursor clipping time to activate.
|
||||
We also repeat the clipping multiple times to be increase the chances
|
||||
that the counts will be wrong as it doesn't always trigger.
|
||||
---
|
||||
dlls/user32/tests/input.c | 226 ++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 226 insertions(+)
|
||||
|
||||
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
|
||||
index 478c269017a..bf9d19906a8 100644
|
||||
--- a/dlls/user32/tests/input.c
|
||||
+++ b/dlls/user32/tests/input.c
|
||||
@@ -1826,6 +1826,231 @@ static void test_RegisterRawInputDevices(void)
|
||||
DestroyWindow(hwnd);
|
||||
}
|
||||
|
||||
+static int rawinput_received;
|
||||
+static int rawinput_received_foreground;
|
||||
+static int rawinput_motion_x;
|
||||
+static int rawinput_motion_y;
|
||||
+static HANDLE rawinput_wndproc_done;
|
||||
+
|
||||
+static LRESULT CALLBACK rawinput_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
|
||||
+{
|
||||
+ UINT ret, raw_size;
|
||||
+ RAWINPUT raw;
|
||||
+
|
||||
+ if (msg == WM_INPUT)
|
||||
+ {
|
||||
+ rawinput_received++;
|
||||
+
|
||||
+ ok(wparam == RIM_INPUT || wparam == RIM_INPUTSINK, "Unexpected wparam: %lu\n", wparam);
|
||||
+ if (wparam == RIM_INPUT)
|
||||
+ rawinput_received_foreground++;
|
||||
+
|
||||
+ ret = GetRawInputData((HRAWINPUT)lparam, RID_INPUT, NULL, &raw_size, sizeof(RAWINPUTHEADER));
|
||||
+ ok(ret == 0, "GetRawInputData failed\n");
|
||||
+ ok(raw_size <= sizeof(raw), "Unexpected rawinput data size: %u", raw_size);
|
||||
+
|
||||
+ if (raw_size <= sizeof(raw))
|
||||
+ {
|
||||
+ ret = GetRawInputData((HRAWINPUT)lparam, RID_INPUT, &raw, &raw_size, sizeof(RAWINPUTHEADER));
|
||||
+ ok(ret > 0 && ret != (UINT)-1, "GetRawInputData failed\n");
|
||||
+ ok(raw.header.dwType == RIM_TYPEMOUSE, "Unexpected rawinput type: %u\n", raw.header.dwType);
|
||||
+
|
||||
+ if (raw.header.dwType == RIM_TYPEMOUSE)
|
||||
+ {
|
||||
+ ok(!(raw.data.mouse.usFlags & MOUSE_MOVE_ABSOLUTE), "Unexpected absolute rawinput motion\n");
|
||||
+ ok(!(raw.data.mouse.usFlags & MOUSE_VIRTUAL_DESKTOP), "Unexpected virtual desktop rawinput motion\n");
|
||||
+ rawinput_motion_x += raw.data.mouse.lLastX;
|
||||
+ rawinput_motion_y += raw.data.mouse.lLastY;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (msg == WM_USER)
|
||||
+ SetEvent(rawinput_wndproc_done);
|
||||
+
|
||||
+ return DefWindowProcA(hwnd, msg, wparam, lparam);
|
||||
+}
|
||||
+
|
||||
+struct rawinput_mouse_thread_params
|
||||
+{
|
||||
+ int step;
|
||||
+ HWND window;
|
||||
+ HANDLE ready;
|
||||
+ HANDLE start;
|
||||
+};
|
||||
+
|
||||
+static DWORD WINAPI rawinput_mouse_thread(void *arg)
|
||||
+{
|
||||
+ struct rawinput_mouse_thread_params *params = arg;
|
||||
+ RECT rect_105 = { 105, 105, 105, 105 };
|
||||
+ RECT rect_110 = { 110, 110, 110, 110 };
|
||||
+ int i;
|
||||
+
|
||||
+ while (WaitForSingleObject(params->ready, INFINITE) == 0)
|
||||
+ {
|
||||
+ ResetEvent(params->ready);
|
||||
+ SetEvent(params->start);
|
||||
+
|
||||
+ switch (params->step)
|
||||
+ {
|
||||
+ case 0:
|
||||
+ case 1:
|
||||
+ case 2:
|
||||
+ mouse_event(MOUSEEVENTF_MOVE, -1, 0, 0, 0);
|
||||
+ mouse_event(MOUSEEVENTF_MOVE, 0, -1, 0, 0);
|
||||
+ break;
|
||||
+ case 3:
|
||||
+ for (i = 0; i < 10; ++i)
|
||||
+ {
|
||||
+ ClipCursor(&rect_105);
|
||||
+ Sleep(5);
|
||||
+ ClipCursor(&rect_110);
|
||||
+ Sleep(5);
|
||||
+ ClipCursor(NULL);
|
||||
+ Sleep(5);
|
||||
+ }
|
||||
+ break;
|
||||
+ case 4:
|
||||
+ for (i = 0; i < 10; ++i)
|
||||
+ {
|
||||
+ ClipCursor(&rect_110);
|
||||
+ Sleep(5);
|
||||
+ mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);
|
||||
+ ClipCursor(NULL);
|
||||
+ Sleep(5);
|
||||
+ mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);
|
||||
+ ClipCursor(&rect_110);
|
||||
+ ClipCursor(NULL);
|
||||
+ Sleep(5);
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ PostMessageA(params->window, WM_USER, 0, 0);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+struct rawinput_mouse_test
|
||||
+{
|
||||
+ BOOL register_device;
|
||||
+ BOOL register_window;
|
||||
+ DWORD register_flags;
|
||||
+ int expect_received;
|
||||
+ int expect_received_foreground;
|
||||
+ int expect_motion_x;
|
||||
+ int expect_motion_y;
|
||||
+ BOOL todo;
|
||||
+};
|
||||
+
|
||||
+static void test_rawinput_mouse(void)
|
||||
+{
|
||||
+ struct rawinput_mouse_thread_params params;
|
||||
+ RAWINPUTDEVICE raw_devices[1];
|
||||
+ HANDLE thread;
|
||||
+ DWORD ret;
|
||||
+ int i;
|
||||
+
|
||||
+ struct rawinput_mouse_test tests[] =
|
||||
+ {
|
||||
+ { FALSE, FALSE, 0, 0, 0, 0, 0, FALSE },
|
||||
+ { TRUE, FALSE, 0, 2, 2, -1, -1, FALSE },
|
||||
+ { TRUE, TRUE, 0, 2, 2, -1, -1, FALSE },
|
||||
+ { TRUE, TRUE, 0, 0, 0, 0, 0, TRUE },
|
||||
+ { TRUE, TRUE, 0, 20, 20, 20, 20, TRUE },
|
||||
+ };
|
||||
+
|
||||
+ mouse_event(MOUSEEVENTF_ABSOLUTE, 100, 100, 0, 0);
|
||||
+ SetCursorPos(100, 100);
|
||||
+
|
||||
+ rawinput_wndproc_done = CreateEventA(NULL, FALSE, FALSE, NULL);
|
||||
+ ok(rawinput_wndproc_done != NULL, "CreateEvent failed\n");
|
||||
+
|
||||
+ params.window = CreateWindowA("static", "static", WS_VISIBLE | WS_POPUP, 100, 100, 100, 100, 0, NULL, NULL, NULL);
|
||||
+ ok(params.window != 0, "CreateWindow failed\n");
|
||||
+
|
||||
+ ShowWindow(params.window, SW_SHOW);
|
||||
+ SetWindowPos(params.window, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
|
||||
+ SetForegroundWindow(params.window);
|
||||
+ UpdateWindow(params.window);
|
||||
+ empty_message_queue();
|
||||
+
|
||||
+ SetWindowLongPtrA(params.window, GWLP_WNDPROC, (LONG_PTR)rawinput_wndproc);
|
||||
+
|
||||
+ params.step = 0;
|
||||
+ params.ready = CreateEventA(NULL, FALSE, FALSE, NULL);
|
||||
+ ok(params.ready != NULL, "CreateEvent failed\n");
|
||||
+
|
||||
+ params.start = CreateEventA(NULL, FALSE, FALSE, NULL);
|
||||
+ ok(params.start != NULL, "CreateEvent failed\n");
|
||||
+
|
||||
+ thread = CreateThread(NULL, 0, rawinput_mouse_thread, ¶ms, 0, NULL);
|
||||
+ ok(thread != NULL, "CreateThread failed\n");
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(tests); ++i)
|
||||
+ {
|
||||
+ rawinput_received = 0;
|
||||
+ rawinput_received_foreground = 0;
|
||||
+ rawinput_motion_x = 0;
|
||||
+ rawinput_motion_y = 0;
|
||||
+
|
||||
+ raw_devices[0].usUsagePage = 0x01;
|
||||
+ raw_devices[0].usUsage = 0x02;
|
||||
+ raw_devices[0].dwFlags = tests[i].register_flags;
|
||||
+ raw_devices[0].hwndTarget = tests[i].register_window ? params.window : 0;
|
||||
+
|
||||
+ if (tests[i].register_device)
|
||||
+ {
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ret = RegisterRawInputDevices(raw_devices, ARRAY_SIZE(raw_devices), sizeof(RAWINPUTDEVICE));
|
||||
+ ok(ret, "%d: RegisterRawInputDevices failed\n", i);
|
||||
+ ok(GetLastError() == 0xdeadbeef, "%d: RegisterRawInputDevices returned %08x\n", i, GetLastError());
|
||||
+ }
|
||||
+
|
||||
+ params.step = i;
|
||||
+ SetEvent(params.ready);
|
||||
+
|
||||
+ WaitForSingleObject(params.start, INFINITE);
|
||||
+ ResetEvent(params.start);
|
||||
+
|
||||
+ while (MsgWaitForMultipleObjects(1, &rawinput_wndproc_done, FALSE, INFINITE, QS_ALLINPUT) != WAIT_OBJECT_0)
|
||||
+ empty_message_queue();
|
||||
+ ResetEvent(rawinput_wndproc_done);
|
||||
+
|
||||
+ /* Wine is sometimes passing some of the conditions, but not always, let's test
|
||||
+ * all at once in the todo block, there should be at least one that fails. */
|
||||
+ todo_wine_if(tests[i].todo)
|
||||
+ ok(rawinput_received == tests[i].expect_received &&
|
||||
+ rawinput_received_foreground == tests[i].expect_received_foreground &&
|
||||
+ rawinput_motion_x == tests[i].expect_motion_x &&
|
||||
+ rawinput_motion_y == tests[i].expect_motion_y,
|
||||
+ "%d: Unexpected rawinput results: received %d, %d in foreground, motion is %dx%d\n",
|
||||
+ i, rawinput_received, rawinput_received_foreground, rawinput_motion_x, rawinput_motion_y);
|
||||
+
|
||||
+ if (tests[i].register_device)
|
||||
+ {
|
||||
+ raw_devices[0].dwFlags = RIDEV_REMOVE;
|
||||
+ raw_devices[0].hwndTarget = 0;
|
||||
+
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ret = RegisterRawInputDevices(raw_devices, ARRAY_SIZE(raw_devices), sizeof(RAWINPUTDEVICE));
|
||||
+ ok(ret, "%d: RegisterRawInputDevices failed\n", i);
|
||||
+ ok(GetLastError() == 0xdeadbeef, "%d: RegisterRawInputDevices returned %08x\n", i, GetLastError());
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ params.step = -1;
|
||||
+ SetEvent(params.ready);
|
||||
+ WaitForSingleObject(thread, INFINITE);
|
||||
+
|
||||
+ CloseHandle(params.start);
|
||||
+ CloseHandle(params.ready);
|
||||
+ CloseHandle(thread);
|
||||
+}
|
||||
+
|
||||
static void test_key_map(void)
|
||||
{
|
||||
HKL kl = GetKeyboardLayout(0);
|
||||
@@ -3326,6 +3551,7 @@ START_TEST(input)
|
||||
test_GetRawInputData();
|
||||
test_GetKeyboardLayoutList();
|
||||
test_RegisterRawInputDevices();
|
||||
+ test_rawinput_mouse();
|
||||
|
||||
if(pGetMouseMovePointsEx)
|
||||
test_GetMouseMovePointsEx();
|
||||
--
|
||||
2.24.1
|
||||
|
@ -1,70 +0,0 @@
|
||||
From d407a40a11f0cbf3e61faded5e6e7e1e2e63ef9c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
||||
Date: Thu, 14 Nov 2019 17:03:38 +0100
|
||||
Subject: [PATCH 02/12] user32/tests: Add rawinput test for cross-thread
|
||||
interactions.
|
||||
|
||||
The rawinput messages are received on the target window if is from the
|
||||
same process as the foreground window, it doesn't need to be the
|
||||
foreground window itself.
|
||||
---
|
||||
dlls/user32/tests/input.c | 27 +++++++++++++++++++++++++++
|
||||
1 file changed, 27 insertions(+)
|
||||
|
||||
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
|
||||
index bf9d19906a8..bdcc6834d9d 100644
|
||||
--- a/dlls/user32/tests/input.c
|
||||
+++ b/dlls/user32/tests/input.c
|
||||
@@ -1884,6 +1884,7 @@ static DWORD WINAPI rawinput_mouse_thread(void *arg)
|
||||
struct rawinput_mouse_thread_params *params = arg;
|
||||
RECT rect_105 = { 105, 105, 105, 105 };
|
||||
RECT rect_110 = { 110, 110, 110, 110 };
|
||||
+ HWND window;
|
||||
int i;
|
||||
|
||||
while (WaitForSingleObject(params->ready, INFINITE) == 0)
|
||||
@@ -1924,6 +1925,26 @@ static DWORD WINAPI rawinput_mouse_thread(void *arg)
|
||||
Sleep(5);
|
||||
}
|
||||
break;
|
||||
+ case 5:
|
||||
+ case 6:
|
||||
+ window = CreateWindowA("static", "static", WS_VISIBLE | WS_POPUP, 100, 100, 100, 100, 0, NULL, NULL, NULL);
|
||||
+ ok(window != 0, "%d: CreateWindow failed\n", params->step);
|
||||
+
|
||||
+ ShowWindow(window, SW_SHOW);
|
||||
+ SetWindowPos(window, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
|
||||
+ SetForegroundWindow(window);
|
||||
+ UpdateWindow(window);
|
||||
+ empty_message_queue();
|
||||
+
|
||||
+ mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);
|
||||
+ SendMessageA(GetForegroundWindow(), WM_USER, 0, 0);
|
||||
+ mouse_event(MOUSEEVENTF_MOVE, -1, -1, 0, 0);
|
||||
+ SendMessageA(GetForegroundWindow(), WM_USER, 0, 0);
|
||||
+
|
||||
+ empty_message_queue();
|
||||
+
|
||||
+ DestroyWindow(window);
|
||||
+ break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
@@ -1959,8 +1980,14 @@ static void test_rawinput_mouse(void)
|
||||
{ FALSE, FALSE, 0, 0, 0, 0, 0, FALSE },
|
||||
{ TRUE, FALSE, 0, 2, 2, -1, -1, FALSE },
|
||||
{ TRUE, TRUE, 0, 2, 2, -1, -1, FALSE },
|
||||
+
|
||||
+ /* clip cursor tests */
|
||||
{ TRUE, TRUE, 0, 0, 0, 0, 0, TRUE },
|
||||
{ TRUE, TRUE, 0, 20, 20, 20, 20, TRUE },
|
||||
+
|
||||
+ /* same-process foreground tests */
|
||||
+ { TRUE, TRUE, 0, 2, 2, 0, 0, TRUE },
|
||||
+ { TRUE, TRUE, RIDEV_INPUTSINK, 2, 2, 0, 0, TRUE },
|
||||
};
|
||||
|
||||
mouse_event(MOUSEEVENTF_ABSOLUTE, 100, 100, 0, 0);
|
||||
--
|
||||
2.24.1
|
||||
|
@ -1,173 +0,0 @@
|
||||
From 66869bba59b74f8bb77b4c1b7c44ef3c6ca7e4ee Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
||||
Date: Thu, 14 Nov 2019 18:44:28 +0100
|
||||
Subject: [PATCH] user32/tests: Add rawinput test for cross-process
|
||||
interactions.
|
||||
|
||||
Validating the rest of the assumption, rawinput messages are not
|
||||
received anymore if the foreground window is from another process.
|
||||
---
|
||||
dlls/user32/tests/input.c | 86 ++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 84 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
|
||||
index 1738706c8a5..79d6a046a8b 100644
|
||||
--- a/dlls/user32/tests/input.c
|
||||
+++ b/dlls/user32/tests/input.c
|
||||
@@ -46,6 +46,7 @@
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
+#include <stdio.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "windef.h"
|
||||
@@ -1874,8 +1875,36 @@ struct rawinput_mouse_thread_params
|
||||
HWND window;
|
||||
HANDLE ready;
|
||||
HANDLE start;
|
||||
+ const char *argv0;
|
||||
};
|
||||
|
||||
+static void rawinput_mouse_process(void)
|
||||
+{
|
||||
+ HWND window;
|
||||
+ HANDLE start_event, stop_event;
|
||||
+
|
||||
+ start_event = OpenEventA(EVENT_ALL_ACCESS, FALSE, "test_rawinput_mouse_start");
|
||||
+ ok(start_event != 0, "OpenEventA failed, error: %u\n", GetLastError());
|
||||
+
|
||||
+ stop_event = OpenEventA(EVENT_ALL_ACCESS, FALSE, "test_rawinput_mouse_stop");
|
||||
+ ok(stop_event != 0, "OpenEventA failed, error: %u\n", GetLastError());
|
||||
+
|
||||
+ window = CreateWindowA("static", "static", WS_VISIBLE | WS_POPUP, 200, 100, 100, 100, 0, NULL, NULL, NULL);
|
||||
+ ok(window != 0, "CreateWindow failed\n");
|
||||
+
|
||||
+ ShowWindow(window, SW_SHOW);
|
||||
+ SetWindowPos(window, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
|
||||
+ SetForegroundWindow(window);
|
||||
+ UpdateWindow(window);
|
||||
+ empty_message_queue();
|
||||
+
|
||||
+ SetEvent(start_event);
|
||||
+ while (MsgWaitForMultipleObjects(1, &stop_event, FALSE, INFINITE, QS_ALLINPUT) != WAIT_OBJECT_0)
|
||||
+ empty_message_queue();
|
||||
+
|
||||
+ DestroyWindow(window);
|
||||
+}
|
||||
+
|
||||
static DWORD WINAPI rawinput_mouse_thread(void *arg)
|
||||
{
|
||||
struct rawinput_mouse_thread_params *params = arg;
|
||||
@@ -1883,6 +1912,11 @@ static DWORD WINAPI rawinput_mouse_thread(void *arg)
|
||||
RECT rect_110 = { 110, 110, 110, 110 };
|
||||
HWND window;
|
||||
int i;
|
||||
+ char path[MAX_PATH];
|
||||
+ PROCESS_INFORMATION process_info;
|
||||
+ STARTUPINFOA startup_info;
|
||||
+ HANDLE start_event, stop_event;
|
||||
+ BOOL ret;
|
||||
|
||||
while (WaitForSingleObject(params->ready, INFINITE) == 0)
|
||||
{
|
||||
@@ -1942,6 +1976,39 @@ static DWORD WINAPI rawinput_mouse_thread(void *arg)
|
||||
|
||||
DestroyWindow(window);
|
||||
break;
|
||||
+ case 7:
|
||||
+ case 8:
|
||||
+ start_event = CreateEventA(NULL, 0, 0, "test_rawinput_mouse_start");
|
||||
+ ok(start_event != 0, "%d: CreateEventA failed, error %u\n", params->step, GetLastError());
|
||||
+
|
||||
+ stop_event = CreateEventA(NULL, 0, 0, "test_rawinput_mouse_stop");
|
||||
+ ok(stop_event != 0, "%d: CreateEventA failed, error %u\n", params->step, GetLastError());
|
||||
+
|
||||
+ memset(&startup_info, 0, sizeof(startup_info));
|
||||
+ startup_info.cb = sizeof(startup_info);
|
||||
+ startup_info.dwFlags = STARTF_USESHOWWINDOW;
|
||||
+ startup_info.wShowWindow = SW_SHOWNORMAL;
|
||||
+
|
||||
+ sprintf(path, "%s input test_rawinput_mouse", params->argv0);
|
||||
+ ret = CreateProcessA(NULL, path, NULL, NULL, TRUE, 0, NULL, NULL, &startup_info, &process_info );
|
||||
+ ok(ret, "%d: CreateProcess '%s' failed err %u.\n", params->step, path, GetLastError());
|
||||
+
|
||||
+ ret = WaitForSingleObject(start_event, 5000);
|
||||
+ ok(ret == WAIT_OBJECT_0, "%d: WaitForSingleObject failed\n", params->step);
|
||||
+
|
||||
+ mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);
|
||||
+ SendMessageA(GetForegroundWindow(), WM_USER, 0, 0);
|
||||
+ mouse_event(MOUSEEVENTF_MOVE, -1, -1, 0, 0);
|
||||
+ SendMessageA(GetForegroundWindow(), WM_USER, 0, 0);
|
||||
+
|
||||
+ SetEvent(stop_event);
|
||||
+
|
||||
+ winetest_wait_child_process(process_info.hProcess);
|
||||
+ CloseHandle(process_info.hProcess);
|
||||
+ CloseHandle(process_info.hThread);
|
||||
+ CloseHandle(start_event);
|
||||
+ CloseHandle(stop_event);
|
||||
+ break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
@@ -1964,7 +2031,7 @@ struct rawinput_mouse_test
|
||||
BOOL todo;
|
||||
};
|
||||
|
||||
-static void test_rawinput_mouse(void)
|
||||
+static void test_rawinput_mouse(const char *argv0)
|
||||
{
|
||||
struct rawinput_mouse_thread_params params;
|
||||
RAWINPUTDEVICE raw_devices[1];
|
||||
@@ -1985,11 +2052,17 @@ static void test_rawinput_mouse(void)
|
||||
/* same-process foreground tests */
|
||||
{ TRUE, TRUE, 0, 2, 2, 0, 0, TRUE },
|
||||
{ TRUE, TRUE, RIDEV_INPUTSINK, 2, 2, 0, 0, TRUE },
|
||||
+
|
||||
+ /* cross-process foreground tests */
|
||||
+ { TRUE, TRUE, 0, 0, 0, 0, 0, TRUE },
|
||||
+ { TRUE, TRUE, RIDEV_INPUTSINK, 2, 0, 0, 0, TRUE },
|
||||
};
|
||||
|
||||
mouse_event(MOUSEEVENTF_ABSOLUTE, 100, 100, 0, 0);
|
||||
SetCursorPos(100, 100);
|
||||
|
||||
+ params.argv0 = argv0;
|
||||
+
|
||||
rawinput_wndproc_done = CreateEventA(NULL, FALSE, FALSE, NULL);
|
||||
ok(rawinput_wndproc_done != NULL, "CreateEvent failed\n");
|
||||
|
||||
@@ -3552,11 +3625,20 @@ static void test_GetKeyboardLayoutList(void)
|
||||
|
||||
START_TEST(input)
|
||||
{
|
||||
+ char **argv;
|
||||
+ int argc;
|
||||
POINT pos;
|
||||
|
||||
init_function_pointers();
|
||||
GetCursorPos( &pos );
|
||||
|
||||
+ argc = winetest_get_mainargs(&argv);
|
||||
+ if (argc >= 3 && strcmp(argv[2], "test_rawinput_mouse") == 0)
|
||||
+ {
|
||||
+ rawinput_mouse_process();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
test_Input_blackbox();
|
||||
test_Input_whitebox();
|
||||
test_Input_unicode();
|
||||
@@ -3575,7 +3657,7 @@ START_TEST(input)
|
||||
test_GetRawInputData();
|
||||
test_GetKeyboardLayoutList();
|
||||
test_RegisterRawInputDevices();
|
||||
- test_rawinput_mouse();
|
||||
+ test_rawinput_mouse(argv[0]);
|
||||
|
||||
if(pGetMouseMovePointsEx)
|
||||
test_GetMouseMovePointsEx();
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 323c45f237fc828f32e27448e4c24649b69b49e0 Mon Sep 17 00:00:00 2001
|
||||
From 38723990a094b598e988408149d1e04dac9b571e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
||||
Date: Tue, 12 Nov 2019 12:41:55 +0100
|
||||
Subject: [PATCH] server: Broadcast rawinput message if request flag is
|
||||
@ -8,23 +8,9 @@ If the request flag is equal to SEND_HWMSG_RAWINPUT, we broadcast the
|
||||
message to all listening processes -or at least to the foreground
|
||||
process until RIDEV_INPUTSINK is supported.
|
||||
---
|
||||
dlls/user32/tests/input.c | 2 +-
|
||||
server/queue.c | 101 ++++++++++++++++++++++++++++++--------
|
||||
2 files changed, 81 insertions(+), 22 deletions(-)
|
||||
server/queue.c | 101 +++++++++++++++++++++++++++++++++++++++----------
|
||||
1 file changed, 80 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
|
||||
index d45a6b17ece..87e298ce8ff 100644
|
||||
--- a/dlls/user32/tests/input.c
|
||||
+++ b/dlls/user32/tests/input.c
|
||||
@@ -2050,7 +2050,7 @@ static void test_rawinput_mouse(const char *argv0)
|
||||
{ TRUE, TRUE, RIDEV_INPUTSINK, 2, 2, 0, 0, TRUE },
|
||||
|
||||
/* cross-process foreground tests */
|
||||
- { TRUE, TRUE, 0, 0, 0, 0, 0, TRUE },
|
||||
+ { TRUE, TRUE, 0, 0, 0, 0, 0, FALSE },
|
||||
{ TRUE, TRUE, RIDEV_INPUTSINK, 2, 0, 0, 0, TRUE },
|
||||
};
|
||||
|
||||
diff --git a/server/queue.c b/server/queue.c
|
||||
index 05d7af0206f..e1a01389fcf 100644
|
||||
--- a/server/queue.c
|
||||
@ -181,5 +167,5 @@ index 05d7af0206f..e1a01389fcf 100644
|
||||
|
||||
if (!(req_flags & SEND_HWMSG_WINDOW))
|
||||
--
|
||||
2.26.0
|
||||
2.27.0
|
||||
|
||||
|
@ -1,43 +1,21 @@
|
||||
From e8b90f221774d70fb9510b6de18378ab3abdcad2 Mon Sep 17 00:00:00 2001
|
||||
From d337c8de3de6a0b7ff16cada895d2490d3240b53 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
||||
Date: Wed, 11 Sep 2019 10:15:20 +0200
|
||||
Subject: [PATCH 09/12] winex11.drv: Listen to RawMotion and RawButton* events
|
||||
in the desktop thread.
|
||||
Subject: [PATCH] winex11.drv: Listen to RawMotion and RawButton* events in the
|
||||
desktop thread.
|
||||
|
||||
We still need to send "normal" input from the clipping window thread
|
||||
to trigger low-level hooks callbacks when clipping cursor. This is for
|
||||
instance used in our dinput implementation.
|
||||
---
|
||||
dlls/user32/tests/input.c | 8 ++--
|
||||
dlls/winex11.drv/event.c | 10 +++-
|
||||
dlls/winex11.drv/mouse.c | 88 ++++++++++++++++++++++++++++------
|
||||
dlls/winex11.drv/x11drv.h | 3 ++
|
||||
dlls/winex11.drv/x11drv_main.c | 4 ++
|
||||
5 files changed, 93 insertions(+), 20 deletions(-)
|
||||
4 files changed, 89 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
|
||||
index d18ccfebcaf..a1f983f1960 100644
|
||||
--- a/dlls/user32/tests/input.c
|
||||
+++ b/dlls/user32/tests/input.c
|
||||
@@ -2049,12 +2049,12 @@ static void test_rawinput_mouse(const char *argv0)
|
||||
{ TRUE, TRUE, 0, 2, 2, -1, -1, FALSE },
|
||||
|
||||
/* clip cursor tests */
|
||||
- { TRUE, TRUE, 0, 0, 0, 0, 0, TRUE },
|
||||
- { TRUE, TRUE, 0, 20, 20, 20, 20, TRUE },
|
||||
+ { TRUE, TRUE, 0, 0, 0, 0, 0, FALSE },
|
||||
+ { TRUE, TRUE, 0, 20, 20, 20, 20, FALSE },
|
||||
|
||||
/* same-process foreground tests */
|
||||
- { TRUE, TRUE, 0, 2, 2, 0, 0, TRUE },
|
||||
- { TRUE, TRUE, RIDEV_INPUTSINK, 2, 2, 0, 0, TRUE },
|
||||
+ { TRUE, TRUE, 0, 2, 2, 0, 0, FALSE },
|
||||
+ { TRUE, TRUE, RIDEV_INPUTSINK, 2, 2, 0, 0, FALSE },
|
||||
|
||||
/* cross-process foreground tests */
|
||||
{ TRUE, TRUE, 0, 0, 0, 0, 0, FALSE },
|
||||
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
|
||||
index 87ba808956f..b3faf3f7cc5 100644
|
||||
index 07f7a1ad502..d722ba9d7cc 100644
|
||||
--- a/dlls/winex11.drv/event.c
|
||||
+++ b/dlls/winex11.drv/event.c
|
||||
@@ -321,6 +321,10 @@ static enum event_merge_action merge_raw_motion_events( XIRawEvent *prev, XIRawE
|
||||
@ -76,10 +54,10 @@ index 87ba808956f..b3faf3f7cc5 100644
|
||||
#endif
|
||||
}
|
||||
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
|
||||
index 19ed2a29287..d331ed5aef8 100644
|
||||
index 26e8b4eea92..ded877a140f 100644
|
||||
--- a/dlls/winex11.drv/mouse.c
|
||||
+++ b/dlls/winex11.drv/mouse.c
|
||||
@@ -364,9 +364,9 @@ static void update_relative_valuators(XIAnyClassInfo **valuators, int n_valuator
|
||||
@@ -362,9 +362,9 @@ static void update_relative_valuators(XIAnyClassInfo **valuators, int n_valuator
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
@ -91,7 +69,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
{
|
||||
#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
|
||||
struct x11drv_thread_data *data = x11drv_thread_data();
|
||||
@@ -398,9 +398,21 @@ static void enable_xinput2(void)
|
||||
@@ -396,9 +396,21 @@ static void enable_xinput2(void)
|
||||
mask.mask_len = sizeof(mask_bits);
|
||||
mask.deviceid = XIAllMasterDevices;
|
||||
memset( mask_bits, 0, sizeof(mask_bits) );
|
||||
@ -114,7 +92,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
|
||||
pXISelectEvents( data->display, DefaultRootWindow( data->display ), &mask, 1 );
|
||||
|
||||
@@ -413,9 +425,9 @@ static void enable_xinput2(void)
|
||||
@@ -411,9 +423,9 @@ static void enable_xinput2(void)
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
@ -126,7 +104,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
{
|
||||
#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
|
||||
struct x11drv_thread_data *data = x11drv_thread_data();
|
||||
@@ -475,7 +487,7 @@ static BOOL grab_clipping_window( const RECT *clip )
|
||||
@@ -473,7 +485,7 @@ static BOOL grab_clipping_window( const RECT *clip )
|
||||
}
|
||||
|
||||
/* enable XInput2 unless we are already clipping */
|
||||
@ -135,7 +113,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
|
||||
if (data->xi2_state != xi_enabled)
|
||||
{
|
||||
@@ -505,7 +517,7 @@ static BOOL grab_clipping_window( const RECT *clip )
|
||||
@@ -503,7 +515,7 @@ static BOOL grab_clipping_window( const RECT *clip )
|
||||
|
||||
if (!clipping_cursor)
|
||||
{
|
||||
@ -144,7 +122,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
DestroyWindow( msg_hwnd );
|
||||
return FALSE;
|
||||
}
|
||||
@@ -586,7 +598,7 @@ LRESULT clip_cursor_notify( HWND hwnd, HWND prev_clip_hwnd, HWND new_clip_hwnd )
|
||||
@@ -584,7 +596,7 @@ LRESULT clip_cursor_notify( HWND hwnd, HWND prev_clip_hwnd, HWND new_clip_hwnd )
|
||||
TRACE( "clip hwnd reset from %p\n", hwnd );
|
||||
data->clip_hwnd = 0;
|
||||
data->clip_reset = GetTickCount();
|
||||
@ -153,7 +131,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
DestroyWindow( hwnd );
|
||||
}
|
||||
else if (hwnd == GetForegroundWindow()) /* request to clip */
|
||||
@@ -725,7 +737,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
|
||||
@@ -723,7 +735,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
|
||||
}
|
||||
input->u.mi.dx += clip_rect.left;
|
||||
input->u.mi.dy += clip_rect.top;
|
||||
@ -162,7 +140,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -765,7 +777,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
|
||||
@@ -763,7 +775,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
|
||||
SERVER_END_REQ;
|
||||
}
|
||||
|
||||
@ -171,7 +149,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
}
|
||||
|
||||
#ifdef SONAME_LIBXCURSOR
|
||||
@@ -1711,7 +1723,7 @@ void move_resize_window( HWND hwnd, int dir )
|
||||
@@ -1709,7 +1721,7 @@ void move_resize_window( HWND hwnd, int dir )
|
||||
input.u.mi.dwFlags = button_up_flags[button - 1] | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
|
||||
input.u.mi.time = GetTickCount();
|
||||
input.u.mi.dwExtraInfo = 0;
|
||||
@ -180,7 +158,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
}
|
||||
|
||||
while (PeekMessageW( &msg, 0, 0, 0, PM_REMOVE ))
|
||||
@@ -1894,6 +1906,7 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
|
||||
@@ -1892,6 +1904,7 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
|
||||
x_rel = &thread_data->x_rel_valuator;
|
||||
y_rel = &thread_data->y_rel_valuator;
|
||||
|
||||
@ -188,7 +166,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
input.u.mi.mouseData = 0;
|
||||
input.u.mi.dwFlags = MOUSEEVENTF_MOVE;
|
||||
input.u.mi.time = EVENT_x11_time_to_win32_time( event->time );
|
||||
@@ -1929,10 +1942,53 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
|
||||
@@ -1927,10 +1940,53 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -245,7 +223,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -2008,6 +2064,10 @@ BOOL X11DRV_GenericEvent( HWND hwnd, XEvent *xev )
|
||||
@@ -2006,6 +2062,10 @@ BOOL X11DRV_GenericEvent( HWND hwnd, XEvent *xev )
|
||||
case XI_RawMotion:
|
||||
ret = X11DRV_RawMotion( event );
|
||||
break;
|
||||
@ -257,7 +235,7 @@ index 19ed2a29287..d331ed5aef8 100644
|
||||
default:
|
||||
TRACE( "Unhandled event %#x\n", event->evtype );
|
||||
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
|
||||
index 7145fec74e7..4a7cab67ada 100644
|
||||
index 73b1e90f12e..6febdc18b0a 100644
|
||||
--- a/dlls/winex11.drv/x11drv.h
|
||||
+++ b/dlls/winex11.drv/x11drv.h
|
||||
@@ -196,6 +196,8 @@ extern BOOL CDECL X11DRV_UnrealizePalette( HPALETTE hpal ) DECLSPEC_HIDDEN;
|
||||
@ -269,7 +247,7 @@ index 7145fec74e7..4a7cab67ada 100644
|
||||
|
||||
extern DWORD copy_image_bits( BITMAPINFO *info, BOOL is_r8g8b8, XImage *image,
|
||||
const struct gdi_image_bits *src_bits, struct gdi_image_bits *dst_bits,
|
||||
@@ -343,6 +345,7 @@ struct x11drv_thread_data
|
||||
@@ -342,6 +344,7 @@ struct x11drv_thread_data
|
||||
struct x11drv_valuator_data x_rel_valuator;
|
||||
struct x11drv_valuator_data y_rel_valuator;
|
||||
int xi2_core_pointer; /* XInput2 core pointer id */
|
||||
@ -278,10 +256,10 @@ index 7145fec74e7..4a7cab67ada 100644
|
||||
|
||||
extern struct x11drv_thread_data *x11drv_init_thread_data(void) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
|
||||
index ff9185a523c..f33a79d98bf 100644
|
||||
index 20e829ba64f..4eaedd1c556 100644
|
||||
--- a/dlls/winex11.drv/x11drv_main.c
|
||||
+++ b/dlls/winex11.drv/x11drv_main.c
|
||||
@@ -640,6 +640,8 @@ void CDECL X11DRV_ThreadDetach(void)
|
||||
@@ -632,6 +632,8 @@ void CDECL X11DRV_ThreadDetach(void)
|
||||
|
||||
if (data)
|
||||
{
|
||||
@ -290,7 +268,7 @@ index ff9185a523c..f33a79d98bf 100644
|
||||
if (data->xim) XCloseIM( data->xim );
|
||||
if (data->font_set) XFreeFontSet( data->display, data->font_set );
|
||||
XCloseDisplay( data->display );
|
||||
@@ -712,6 +714,8 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
|
||||
@@ -701,6 +703,8 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
|
||||
TlsSetValue( thread_data_tls_index, data );
|
||||
|
||||
if (use_xim) X11DRV_SetupXIM();
|
||||
@ -300,5 +278,5 @@ index ff9185a523c..f33a79d98bf 100644
|
||||
return data;
|
||||
}
|
||||
--
|
||||
2.24.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 488721840b4825a33c7e51aabf473cb81033c682 Mon Sep 17 00:00:00 2001
|
||||
From 9cbc0d6d9404dc93016ba7db6a10a2cad873cbba 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.
|
||||
@ -22,10 +22,10 @@ Based on a patch by Erich E. Hoover.
|
||||
14 files changed, 220 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
|
||||
index 87a65e4fc11..05d32ab167e 100644
|
||||
index 42cdc628021..339b54a9e67 100644
|
||||
--- a/dlls/ntdll/loader.c
|
||||
+++ b/dlls/ntdll/loader.c
|
||||
@@ -3812,6 +3812,7 @@ PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE hModule)
|
||||
@@ -3387,6 +3387,7 @@ PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE hModule)
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -33,7 +33,7 @@ index 87a65e4fc11..05d32ab167e 100644
|
||||
|
||||
/******************************************************************
|
||||
* LdrInitializeThunk (NTDLL.@)
|
||||
@@ -3828,6 +3829,8 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, void **entry, ULONG_PTR unknow
|
||||
@@ -3403,6 +3404,8 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, void **entry, ULONG_PTR unknow
|
||||
WINE_MODREF *wm;
|
||||
LPCWSTR load_path = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer;
|
||||
|
||||
@ -43,10 +43,10 @@ index 87a65e4fc11..05d32ab167e 100644
|
||||
|
||||
RtlEnterCriticalSection( &loader_section );
|
||||
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
|
||||
index 21cc1b3ead4..18be5693a7d 100644
|
||||
index bda19bf4632..5dccee926b9 100644
|
||||
--- a/dlls/ntdll/signal_i386.c
|
||||
+++ b/dlls/ntdll/signal_i386.c
|
||||
@@ -346,6 +346,8 @@ __ASM_STDCALL_FUNC( RtlCaptureContext, 4,
|
||||
@@ -336,6 +336,8 @@ __ASM_STDCALL_FUNC( RtlCaptureContext, 4,
|
||||
"ret $4" )
|
||||
|
||||
|
||||
@ -55,7 +55,7 @@ index 21cc1b3ead4..18be5693a7d 100644
|
||||
/***********************************************************************
|
||||
* NtGetContextThread (NTDLL.@)
|
||||
* ZwGetContextThread (NTDLL.@)
|
||||
@@ -370,7 +372,7 @@ NTSTATUS CDECL DECLSPEC_HIDDEN __regs_NtGetContextThread( DWORD edi, DWORD esi,
|
||||
@@ -360,7 +362,7 @@ NTSTATUS CDECL DECLSPEC_HIDDEN __regs_NtGetContextThread( DWORD edi, DWORD esi,
|
||||
{
|
||||
context->Ebp = ebp;
|
||||
context->Esp = (DWORD)&retaddr;
|
||||
@ -65,7 +65,7 @@ index 21cc1b3ead4..18be5693a7d 100644
|
||||
}
|
||||
return unix_funcs->NtGetContextThread( handle, context );
|
||||
diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c
|
||||
index a5e6faa461a..51938bf84cc 100644
|
||||
index 411439f180f..cd019fd5add 100644
|
||||
--- a/dlls/ntdll/tests/exception.c
|
||||
+++ b/dlls/ntdll/tests/exception.c
|
||||
@@ -1643,6 +1643,8 @@ static void test_thread_context(void)
|
||||
@ -78,7 +78,7 @@ index a5e6faa461a..51938bf84cc 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/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
|
||||
index 7329aa177ba..a878a7a27fa 100644
|
||||
index fc57f186544..780b3b153da 100644
|
||||
--- a/dlls/ntdll/thread.c
|
||||
+++ b/dlls/ntdll/thread.c
|
||||
@@ -94,6 +94,14 @@ int __cdecl __wine_dbg_output( const char *str )
|
||||
@ -97,27 +97,27 @@ index 7329aa177ba..a878a7a27fa 100644
|
||||
/***********************************************************************
|
||||
* thread_init
|
||||
@@ -105,7 +113,7 @@ int __cdecl __wine_dbg_output( const char *str )
|
||||
TEB *thread_init( SIZE_T *info_size, BOOL *suspend )
|
||||
TEB *thread_init( SIZE_T *info_size )
|
||||
{
|
||||
TEB *teb = unix_funcs->init_threading( &nb_threads, &__wine_ldt_copy, info_size, suspend, &server_cpus,
|
||||
- &is_wow64, &server_start_time );
|
||||
+ &is_wow64, &server_start_time, __wine_syscall_dispatcher );
|
||||
ULONG_PTR val;
|
||||
- TEB *teb = unix_funcs->init_threading( &nb_threads, &__wine_ldt_copy, info_size );
|
||||
+ TEB *teb = unix_funcs->init_threading( &nb_threads, &__wine_ldt_copy, info_size, __wine_syscall_dispatcher );
|
||||
|
||||
peb = teb->Peb;
|
||||
peb->FastPebLock = &peb_lock;
|
||||
diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c
|
||||
index d26e0a98cac..cb44bbfd5ea 100644
|
||||
index f3dddd2b02a..7952497645e 100644
|
||||
--- a/dlls/ntdll/unix/thread.c
|
||||
+++ b/dlls/ntdll/unix/thread.c
|
||||
@@ -85,7 +85,7 @@ static void pthread_exit_wrapper( int status )
|
||||
@@ -84,7 +84,7 @@ static void pthread_exit_wrapper( int status )
|
||||
/***********************************************************************
|
||||
* init_threading
|
||||
*/
|
||||
TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, BOOL *suspend,
|
||||
- unsigned int *cpus, BOOL *wow64, timeout_t *start_time )
|
||||
+ unsigned int *cpus, BOOL *wow64, timeout_t *start_time, void *syscall_handler )
|
||||
-TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size )
|
||||
+TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, void *syscall_handler )
|
||||
{
|
||||
TEB *teb;
|
||||
SIZE_T info_size;
|
||||
BOOL suspend;
|
||||
@@ -96,6 +96,7 @@ TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZ
|
||||
nb_threads = nb_threads_ptr;
|
||||
|
||||
@ -127,33 +127,33 @@ index d26e0a98cac..cb44bbfd5ea 100644
|
||||
signal_init_threading();
|
||||
signal_alloc_thread( teb );
|
||||
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
|
||||
index 8811fd6c21d..166a6542724 100644
|
||||
index 707ca819e0e..72987a0041b 100644
|
||||
--- a/dlls/ntdll/unix/unix_private.h
|
||||
+++ b/dlls/ntdll/unix/unix_private.h
|
||||
@@ -113,7 +113,7 @@ extern void CDECL server_release_fd( HANDLE handle, int unix_fd ) DECLSPEC_HIDDE
|
||||
@@ -115,7 +115,7 @@ extern NTSTATUS CDECL server_handle_to_fd( HANDLE handle, unsigned int access, i
|
||||
unsigned int *options ) DECLSPEC_HIDDEN;
|
||||
extern void CDECL server_release_fd( HANDLE handle, int unix_fd ) DECLSPEC_HIDDEN;
|
||||
extern void CDECL server_init_process_done( void *relay ) DECLSPEC_HIDDEN;
|
||||
extern TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size,
|
||||
BOOL *suspend, unsigned int *cpus, BOOL *wow64,
|
||||
- timeout_t *start_time ) DECLSPEC_HIDDEN;
|
||||
+ timeout_t *start_time, void *syscall_handler ) DECLSPEC_HIDDEN;
|
||||
-extern TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size ) DECLSPEC_HIDDEN;
|
||||
+extern TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, void *syscall_handler ) DECLSPEC_HIDDEN;
|
||||
extern void CDECL DECLSPEC_NORETURN exit_thread( int status ) DECLSPEC_HIDDEN;
|
||||
extern void CDECL DECLSPEC_NORETURN exit_process( int status ) DECLSPEC_HIDDEN;
|
||||
extern NTSTATUS CDECL exec_process( UNICODE_STRING *path, UNICODE_STRING *cmdline, NTSTATUS status ) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h
|
||||
index 7dec512cb09..a9803478a37 100644
|
||||
index b14adce4a70..b5b7cb07c80 100644
|
||||
--- a/dlls/ntdll/unixlib.h
|
||||
+++ b/dlls/ntdll/unixlib.h
|
||||
@@ -302,7 +302,7 @@ struct unix_funcs
|
||||
@@ -304,7 +304,7 @@ struct unix_funcs
|
||||
void (CDECL *virtual_set_large_address_space)(void);
|
||||
|
||||
/* thread/process functions */
|
||||
TEB * (CDECL *init_threading)( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size,
|
||||
- BOOL *suspend, unsigned int *cpus, BOOL *wow64, timeout_t *start_time );
|
||||
+ BOOL *suspend, unsigned int *cpus, BOOL *wow64, timeout_t *start_time, void *syscall_handler );
|
||||
- TEB * (CDECL *init_threading)( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size );
|
||||
+ TEB * (CDECL *init_threading)( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, void *syscall_handler );
|
||||
void (CDECL *exit_thread)( int status );
|
||||
void (CDECL *exit_process)( int status );
|
||||
NTSTATUS (CDECL *exec_process)( UNICODE_STRING *path, UNICODE_STRING *cmdline, NTSTATUS status );
|
||||
diff --git a/include/winternl.h b/include/winternl.h
|
||||
index 4b3202cdc20..5f58366f649 100644
|
||||
index 34d2737b705..ef848272f7f 100644
|
||||
--- a/include/winternl.h
|
||||
+++ b/include/winternl.h
|
||||
@@ -359,7 +359,7 @@ typedef struct _TEB
|
||||
@ -254,7 +254,7 @@ index 04ab433dd65..0c6bafed8e5 100644
|
||||
}
|
||||
}
|
||||
diff --git a/tools/winebuild/parser.c b/tools/winebuild/parser.c
|
||||
index 0f2b9c1e10a..74216f8bb6e 100644
|
||||
index 0207b8ac3c3..91f596f1d2d 100644
|
||||
--- a/tools/winebuild/parser.c
|
||||
+++ b/tools/winebuild/parser.c
|
||||
@@ -543,6 +543,24 @@ static const char *parse_spec_flags( DLLSPEC *spec, ORDDEF *odp )
|
||||
@ -335,7 +335,7 @@ index 0f2b9c1e10a..74216f8bb6e 100644
|
||||
/*******************************************************************
|
||||
* add_16bit_exports
|
||||
*
|
||||
@@ -916,6 +973,8 @@ int parse_spec_file( FILE *file, DLLSPEC *spec )
|
||||
@@ -912,6 +969,8 @@ int parse_spec_file( FILE *file, DLLSPEC *spec )
|
||||
current_line = 0; /* no longer parsing the input file */
|
||||
assign_names( spec );
|
||||
assign_ordinals( spec );
|
||||
|
@ -1,4 +1,4 @@
|
||||
From ce23308632979fdff714da4322e4f56905873374 Mon Sep 17 00:00:00 2001
|
||||
From 56e581b1709c2def25db836cc8126c0eabfb11e7 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.
|
||||
@ -62,10 +62,10 @@ index 984246681cb..78100205c9d 100644
|
||||
CloseHandle(map);
|
||||
CloseHandle(file);
|
||||
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
|
||||
index 05d32ab167e..5b26a556f0d 100644
|
||||
index 339b54a9e67..995dcd48786 100644
|
||||
--- a/dlls/ntdll/loader.c
|
||||
+++ b/dlls/ntdll/loader.c
|
||||
@@ -3813,6 +3813,7 @@ PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE hModule)
|
||||
@@ -3388,6 +3388,7 @@ PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE hModule)
|
||||
}
|
||||
|
||||
extern void DECLSPEC_NORETURN __wine_syscall_dispatcher( void );
|
||||
@ -73,7 +73,7 @@ index 05d32ab167e..5b26a556f0d 100644
|
||||
|
||||
/******************************************************************
|
||||
* LdrInitializeThunk (NTDLL.@)
|
||||
@@ -3830,6 +3831,7 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, void **entry, ULONG_PTR unknow
|
||||
@@ -3405,6 +3406,7 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, void **entry, ULONG_PTR unknow
|
||||
LPCWSTR load_path = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer;
|
||||
|
||||
NtCurrentTeb()->WOW32Reserved = __wine_syscall_dispatcher;
|
||||
@ -82,7 +82,7 @@ index 05d32ab167e..5b26a556f0d 100644
|
||||
if (process_detaching) return;
|
||||
|
||||
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
|
||||
index a878a7a27fa..21ae0e9ebbd 100644
|
||||
index 3f84beb8f26..0eb7d901c4d 100644
|
||||
--- a/dlls/ntdll/thread.c
|
||||
+++ b/dlls/ntdll/thread.c
|
||||
@@ -36,6 +36,7 @@
|
||||
@ -93,7 +93,7 @@ index a878a7a27fa..21ae0e9ebbd 100644
|
||||
WINE_DECLARE_DEBUG_CHANNEL(relay);
|
||||
|
||||
struct _KUSER_SHARED_DATA *user_shared_data = (void *)0x7ffe0000;
|
||||
@@ -103,6 +104,39 @@ void __wine_syscall_dispatcher( void )
|
||||
@@ -104,6 +105,39 @@ void __wine_syscall_dispatcher( void )
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -133,19 +133,19 @@ index a878a7a27fa..21ae0e9ebbd 100644
|
||||
/***********************************************************************
|
||||
* thread_init
|
||||
*
|
||||
@@ -114,6 +148,7 @@ TEB *thread_init( SIZE_T *info_size, BOOL *suspend )
|
||||
{
|
||||
TEB *teb = unix_funcs->init_threading( &nb_threads, &__wine_ldt_copy, info_size, suspend, &server_cpus,
|
||||
&is_wow64, &server_start_time, __wine_syscall_dispatcher );
|
||||
+ teb->Spare2 = (ULONG_PTR)__wine_fakedll_dispatcher;
|
||||
@@ -116,6 +150,7 @@ TEB *thread_init( SIZE_T *info_size )
|
||||
ULONG_PTR val;
|
||||
TEB *teb = unix_funcs->init_threading( &nb_threads, &__wine_ldt_copy, info_size, __wine_syscall_dispatcher );
|
||||
|
||||
+ teb->Spare2 = (ULONG_PTR)__wine_fakedll_dispatcher;
|
||||
peb = teb->Peb;
|
||||
peb->FastPebLock = &peb_lock;
|
||||
peb->ApiSetMap = &apiset_map;
|
||||
diff --git a/include/winternl.h b/include/winternl.h
|
||||
index 5f58366f649..d3b708c3e0d 100644
|
||||
index 6de209d6f07..d9c31156025 100644
|
||||
--- a/include/winternl.h
|
||||
+++ b/include/winternl.h
|
||||
@@ -398,7 +398,7 @@ typedef struct _TEB
|
||||
@@ -399,7 +399,7 @@ typedef struct _TEB
|
||||
PVOID Instrumentation[16]; /* f2c/16b8 */
|
||||
PVOID WinSockData; /* f6c/1738 */
|
||||
ULONG GdiBatchCount; /* f70/1740 */
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 2f3bcc431318c7db08080c6e2c9f9b566f9123ec Mon Sep 17 00:00:00 2001
|
||||
From 8650aa0a3229b84a102cca1d9fe40f9dbd5a038d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Thu, 7 Sep 2017 00:38:09 +0200
|
||||
Subject: [PATCH] tools/winebuild: Add syscall thunks for 64 bit.
|
||||
@ -42,23 +42,23 @@ index d39ebe4a37c..dccd9c1fc68 100644
|
||||
todo_wine ok(0, "%s: Export is a stub-function, skipping\n", func_name);
|
||||
continue;
|
||||
diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c
|
||||
index cb44bbfd5ea..196dc2d8c4e 100644
|
||||
index 7952497645e..ca5eba4da88 100644
|
||||
--- a/dlls/ntdll/unix/thread.c
|
||||
+++ b/dlls/ntdll/unix/thread.c
|
||||
@@ -104,7 +104,7 @@ TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZ
|
||||
dbg_init();
|
||||
server_init_process();
|
||||
info_size = server_init_thread( teb->Peb, suspend );
|
||||
info_size = server_init_thread( teb->Peb, &suspend );
|
||||
- virtual_map_user_shared_data();
|
||||
+ virtual_map_user_shared_data(syscall_handler);
|
||||
+ virtual_map_user_shared_data( syscall_handler );
|
||||
virtual_create_builtin_view( ntdll_module );
|
||||
init_cpu_info();
|
||||
init_files();
|
||||
NtCreateKeyedEvent( &keyed_event, GENERIC_READ | GENERIC_WRITE, NULL, 0 );
|
||||
|
||||
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
|
||||
index 166a6542724..df508e569f9 100644
|
||||
index 72987a0041b..15be5d3715a 100644
|
||||
--- a/dlls/ntdll/unix/unix_private.h
|
||||
+++ b/dlls/ntdll/unix/unix_private.h
|
||||
@@ -177,7 +177,7 @@ extern TEB *virtual_alloc_first_teb(void) DECLSPEC_HIDDEN;
|
||||
@@ -187,7 +187,7 @@ extern TEB *virtual_alloc_first_teb(void) DECLSPEC_HIDDEN;
|
||||
extern NTSTATUS virtual_alloc_teb( TEB **ret_teb ) DECLSPEC_HIDDEN;
|
||||
extern void virtual_free_teb( TEB *teb ) DECLSPEC_HIDDEN;
|
||||
extern NTSTATUS virtual_clear_tls_index( ULONG index ) DECLSPEC_HIDDEN;
|
||||
@ -68,10 +68,10 @@ index 166a6542724..df508e569f9 100644
|
||||
extern unsigned int virtual_locked_server_call( void *req_ptr ) DECLSPEC_HIDDEN;
|
||||
extern ssize_t virtual_locked_read( int fd, void *addr, size_t size ) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
|
||||
index ca25cdd304e..7f7660d0795 100644
|
||||
index e759cf686bd..0c8de5f2c24 100644
|
||||
--- a/dlls/ntdll/unix/virtual.c
|
||||
+++ b/dlls/ntdll/unix/virtual.c
|
||||
@@ -2607,14 +2607,14 @@ TEB *virtual_alloc_first_teb(void)
|
||||
@@ -2608,14 +2608,14 @@ TEB *virtual_alloc_first_teb(void)
|
||||
TEB *teb;
|
||||
PEB *peb;
|
||||
NTSTATUS status;
|
||||
@ -88,7 +88,7 @@ index ca25cdd304e..7f7660d0795 100644
|
||||
if (status)
|
||||
{
|
||||
ERR( "wine: failed to map the shared user data: %08x\n", status );
|
||||
@@ -2838,7 +2838,7 @@ void virtual_clear_thread_stack( void *stack_end )
|
||||
@@ -2839,7 +2839,7 @@ void virtual_clear_thread_stack( void *stack_end )
|
||||
/***********************************************************************
|
||||
* virtual_map_user_shared_data
|
||||
*/
|
||||
@ -97,7 +97,7 @@ index ca25cdd304e..7f7660d0795 100644
|
||||
{
|
||||
static const WCHAR wine_usdW[] = {'\\','K','e','r','n','e','l','O','b','j','e','c','t','s',
|
||||
'\\','_','_','w','i','n','e','_','u','s','e','r','_','s','h','a','r','e','d','_','d','a','t','a',0};
|
||||
@@ -2861,6 +2861,11 @@ void virtual_map_user_shared_data(void)
|
||||
@@ -2862,6 +2862,11 @@ void virtual_map_user_shared_data(void)
|
||||
ERR( "failed to remap the process USD: %d\n", res );
|
||||
exit(1);
|
||||
}
|
||||
@ -143,7 +143,7 @@ index 0941dd87c05..002f3215af2 100644
|
||||
}
|
||||
|
||||
diff --git a/tools/winebuild/parser.c b/tools/winebuild/parser.c
|
||||
index 74216f8bb6e..820516329a4 100644
|
||||
index 91f596f1d2d..533ec5d2009 100644
|
||||
--- a/tools/winebuild/parser.c
|
||||
+++ b/tools/winebuild/parser.c
|
||||
@@ -545,7 +545,7 @@ static const char *parse_spec_flags( DLLSPEC *spec, ORDDEF *odp )
|
||||
|
@ -4,4 +4,5 @@ Fixes: [45349] Multiple applications and games crash due to missing support for
|
||||
Fixes: [45573] League of Legends 8.12+ fails to start a game (anticheat engine, hooking of syscall return instructions)
|
||||
Fixes: [45650] chromium 32-bit sandbox expects different syscall thunks depending on Windows version
|
||||
Depends: ntdll-WRITECOPY
|
||||
Depends: ws2_32-WSACleanup
|
||||
Depends: ws2_32-WSACleanup
|
||||
Depends: ntdll-ApiSetMap
|
||||
|
@ -1 +1 @@
|
||||
449b8c7e9212d0a80e28babff20f2755b7370872
|
||||
bc282905d9491b9f9fe4ae4b69a8ccdf99c5aaa8
|
||||
|
Loading…
Reference in New Issue
Block a user