[Bug 45284] Multiple Microsoft Office installers crash with Windows 8+ setting due to missing 'user32.RegisterPointerDeviceNotifications' stub (Office 2013)

wine-bugs at winehq.org wine-bugs at winehq.org
Wed Jun 6 17:42:13 CDT 2018


https://bugs.winehq.org/show_bug.cgi?id=45284

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Blocks|                            |45302

--- Comment #2 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

commit
https://source.winehq.org/git/wine.git/commitdiff/0b27528c5673fe9879be7c8af25306f930138ac1
added user32.RegisterPointerDeviceNotifications() stub.

Unfortunately the installer still crashes due crappy error handling when the
stub returns 'FALSE'.

--- snip ---
...
002e:Call KERNEL32.GetProcAddress(7e720000,00c89a08
"RegisterPointerDeviceNotifications") ret=00c0ff46
002e:Ret  KERNEL32.GetProcAddress() retval=7e7318cc ret=00c0ff46
002e:Call user32.RegisterPointerDeviceNotifications(00010072,00000000)
ret=00a9c882
002e:fixme:win:RegisterPointerDeviceNotifications (0x10072 0): stub
002e:Ret  user32.RegisterPointerDeviceNotifications() retval=00000000
ret=00a9c882
002e:Call user32.SetWindowLongW(00010072,ffffffeb,00000000) ret=00a9c8c7
002e:Ret  user32.SetWindowLongW() retval=00e4ad78 ret=00a9c8c7
002e:Call user32.SetWindowLongW(00010072,fffffffc,7e72f3ac) ret=00a9c8d8
002e:Ret  user32.SetWindowLongW() retval=00a9c77a ret=00a9c8d8
002e:trace:seh:raise_exception code=c0000005 flags=0 addr=0xa9c8da ip=00a9c8da
tid=002e
002e:trace:seh:raise_exception  info[0]=00000000
002e:trace:seh:raise_exception  info[1]=00000000
002e:trace:seh:raise_exception  eax=00a9c77a ebx=00000001 ecx=00000000
edx=7e8f5254 esi=00e4ad78 edi=00e4ad78
002e:trace:seh:raise_exception  ebp=0033c818 esp=0033c7fc cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00210206
002e:trace:seh:call_stack_handlers calling handler at 0xc5071d code=c0000005
flags=0 
...
--- snip ---

Crash location:

--- snip ---
...
00BAC872  53              PUSH EBX
00BAC873  8935 98C0DE00   MOV DWORD PTR DS:[0DEC098],ESI
00BAC879  FF76 04         PUSH DWORD PTR DS:[ESI+4]
; user32.RegisterPointerDeviceNotifications
00BAC87C  FF15 E8E2D900   CALL DWORD PTR DS:[0D9E2E8]
00BAC882  5F              POP EDI
00BAC883  85C0            TEST EAX,EAX
00BAC885  74 11           JE SHORT 00BAC898
00BAC887  391E            CMP DWORD PTR DS:[ESI],EBX
00BAC889  75 21           JNE SHORT 00BAC8AC
00BAC88B  E8 75030000     CALL 00BACC05
00BAC890  8BC8            MOV ECX,EAX
00BAC892  890E            MOV DWORD PTR DS:[ESI],ECX
00BAC894  85C9            TEST ECX,ECX
00BAC896  75 07           JNE SHORT 00BAC89F
00BAC898  B8 05400080     MOV EAX,80004005
00BAC89D  EB 0F           JMP SHORT 00BAC8AE
00BAC89F  8B01            MOV EAX,DWORD PTR DS:[ECX]
00BAC8A1  68 07040000     PUSH 407
00BAC8A6  FF76 04         PUSH DWORD PTR DS:[ESI+4]
; setup internal object vtable/dispatch
00BAC8A9  FF50 08         CALL DWORD PTR DS:[EAX+8]
00BAC8AC  33C0            XOR EAX,EAX
00BAC8AE  5B              POP EBX
00BAC8AF  5E              POP ESI
00BAC8B0  C3              RETN

00BAC8B1  57              PUSH EDI
00BAC8B2  8BF9            MOV EDI,ECX
00BAC8B4  837F 04 00      CMP DWORD PTR DS:[EDI+4],0
00BAC8B8  74 1E           JE SHORT 00BAC8D8
00BAC8BA  6A 00           PUSH 0
00BAC8BC  6A EB           PUSH -15
00BAC8BE  FF77 04         PUSH DWORD PTR DS:[EDI+4]
; user32.SetWindowLongW
00BAC8C1  FF15 18E1D900   CALL DWORD PTR DS:[0D9E118] 
00BAC8C7  FF35 DCE0D900   PUSH DWORD PTR DS:[0D9E0DC]
00BAC8CD  6A FC           PUSH -4
00BAC8CF  FF77 04         PUSH DWORD PTR DS:[EDI+4]
; user32.SetWindowLongW
00BAC8D2  FF15 18E1D900   CALL DWORD PTR DS:[0D9E118]
; internal object vtable/dispatch from 0x00BAC8A9
00BAC8D8  8B0F            MOV ECX,DWORD PTR DS:[EDI]  ; NULL
00BAC8DA  8B01            MOV EAX,DWORD PTR DS:[ECX]  ; *boom*
00BAC8DC  FF50 0C         CALL DWORD PTR DS:[EAX+0C]
00BAC8DF  FF37            PUSH DWORD PTR DS:[EDI]
00BAC8E1  E8 00C80700     CALL 00C290E6
00BAC8E6  8327 00         AND DWORD PTR DS:[EDI],00000000
00BAC8E9  393D 98C0DE00   CMP DWORD PTR DS:[0DEC098],EDI
00BAC8EF  75 07           JNE SHORT 00BAC8F8
00BAC8F1  8325 98C0DE00 0 AND DWORD PTR DS:[0DEC098],00000000
00BAC8F8  57              PUSH EDI
00BAC8F9  E8 B4B0FBFF     CALL NetUI::HFree
00BAC8FE  5F              POP EDI
00BAC8FF  C3              RETN
--- snip ---

The stub needs to return 'TRUE' to go further:

--- snip ---
...
002e:Call KERNEL32.GetProcAddress(7e720000,00c89a08
"RegisterPointerDeviceNotifications") ret=00c0ff46
002e:Ret  KERNEL32.GetProcAddress() retval=7e7318cc ret=00c0ff46
002e:Call user32.RegisterPointerDeviceNotifications(00010072,00000000)
ret=00a9c882
002e:fixme:win:RegisterPointerDeviceNotifications (0x10072 0): stub
002e:Ret  user32.RegisterPointerDeviceNotifications() retval=00000001
ret=00a9c882
002e:Call ntdll.RtlAllocateHeap(00e40000,00000000,00000020) ret=00a09108
002e:Ret  ntdll.RtlAllocateHeap() retval=00e4ad58 ret=00a09108
002e:Call KERNEL32.GetProcAddress(7e720000,00c89a2e "GetPointerDevices")
ret=00c0ff46
002e:Ret  KERNEL32.GetProcAddress() retval=00000000 ret=00c0ff46
002e:Call KERNEL32.GetLastError() ret=00c0ff52
002e:Ret  KERNEL32.GetLastError() retval=0000007f ret=00c0ff52
002e:Call KERNEL32.RaiseException(c06d007f,00000000,00000001,0033c7f4)
ret=00c0ff85
002e:trace:seh:raise_exception code=c06d007f flags=0 addr=0x7b446f66
ip=7b446f66 tid=002e
002e:trace:seh:raise_exception  info[0]=0033c7a8
002e:trace:seh:raise_exception  eax=7b435631 ebx=00000000 ecx=00000000
edx=0033c79c esi=0033c79c edi=0033c760
002e:trace:seh:raise_exception  ebp=0033c738 esp=0033c6d4 cs=330023 ds=33002b
es=f7c4002b fs=f7c40063 gs=f7c4006b flags=00200216
002e:trace:seh:call_stack_handlers calling handler at 0xc5071d code=c06d007f
flags=0 
...
--- snip ---

That's a missing 'user32.GetPointerDevices()' stub.
I've created bug 45302 to track that one.

$ wine --version
wine-3.9-230-g868fb05e77

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list