From: Aida JonikienÄ— aidas957@gmail.com
The RoShade installer crashes because of ole32 trying to release the OLE drop target from another process (which can't be accessed despite it being a valid pointer).
Windows probably supports this behavior (but implementing it here would require extra work and this is enough to make this app work).
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54912 --- dlls/ole32/ole2.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c index f4672b704ee..efee49a6ab5 100644 --- a/dlls/ole32/ole2.c +++ b/dlls/ole32/ole2.c @@ -618,6 +618,7 @@ HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget) */ HRESULT WINAPI RevokeDragDrop(HWND hwnd) { + DWORD pid = 0; HANDLE map; IStream *stream; IDropTarget *drop_target; @@ -631,6 +632,14 @@ HRESULT WINAPI RevokeDragDrop(HWND hwnd) return DRAGDROP_E_INVALIDHWND; }
+ /* block revoke for other processes windows */ + GetWindowThreadProcessId(hwnd, &pid); + if (pid != GetCurrentProcessId()) + { + FIXME("revoke for another process windows is disabled\n"); + return DRAGDROP_E_INVALIDHWND; + } + /* no registration data */ if (!(map = get_droptarget_handle(hwnd))) return DRAGDROP_E_NOTREGISTERED;