shell32/tests: Add traces to the WaitForInputIdle() hooking process.
Francois Gouget
fgouget at codeweavers.com
Fri Jan 29 04:51:13 CST 2016
On Fri, 29 Jan 2016, Henri Verbeet wrote:
> On 29 January 2016 at 00:54, Francois Gouget <fgouget at codeweavers.com> wrote:
> > * There is a set of traces showing WaitForInputIdle() being
> > replaced with our own implementation:
> > shlexec.c:2318: Hooked USER32.dll.WaitForInputIdle
> >
> > * And then traces showing our implementation being called:
> > shlexec.c:2258: WaitForInputIdle() waiting for dde event
> >
> > Except that on Windows 10 we never get the second set of traces which
> > means we failed to override WaitForInputIdle().
> >
> I'm hardly an expert on shell32, but any chance the hooking worked
> fine and WaitForInputIdle() is just not getting called? Would
> explicitly specifying SEE_MASK_WAITFORINPUTIDLE make it any better?
Thanks! I had not seen this option. Also it should really not be needed
but it does solve the problem on Windows 10... and kinda breaks the
tests on Vista to Windows 8.
https://testbot.winehq.org/JobDetails.pl?Key=20082
To wit:
* DDE implies doing a WaitForInputIdle(). So Windows 10 should really be
doing it without being told, just like all the previous Windows
versions before it.
* But we also know that WaitForInputIdle() does not work on console
applications like our confomance tests. So maybe Windows 10 detects
the target executable is a console application and skips this call.
It's either that or assuming DDE is totally broken on Windows 10 which
seems unlikely (maybe I'll test it at some point).
* On all versions from Vista to Windows 8.1, adding
SEE_MASK_WAITFORINPUTIDLE causes WaitForInputIdle() to be called twice
when DDE is involved. This further 'proves' that this flag should not
be needed.
* This is why the flag breaks our tests: unlike the real implementation
our WaitForInputIdle() replacement blocks every time it is called.
Fortunately that's a simple fix.
* On Windows XP and 2003, even with the extra flag, WaitForInputIdle()
is called only once.
* It would really be better to do our DDE tests with a GUI target
application. I have no idea how to do that though.
--
Francois Gouget <fgouget at codeweavers.com>
More information about the wine-devel
mailing list