https://bugs.winehq.org/show_bug.cgi?id=30572
--- Comment #8 from Sebastian Lackner sebastian@fds-team.de --- @Austin: The stub for RemoveVectoredContinueHandler is wrong, the function takes only one argument, and returns an ULONG instead of a PVOID.
A fixed version was added to the staging tree and works well with Silverlight (which detects at runtime if the function is present, and also works well without it):
https://github.com/wine-compholio/wine-staging/blob/master/patches/ntdll-Vec...
If some applications refuse to work when AddVectoredContinueHandler returns NULL - it is also safe to return some dummy value like (void *)0xdeadbeef, and let RemoveVectoredContinueHandler return TRUE. The structure is undocumented and its unlikely that any app tries to mess directly with the content.
Some technical details:
On Windows the exception handlers are executed in the following order: * vectored exception handlers * frame based exception handlers * unhandled exception handler * vectored continue handlers (<- at least if some documents are right, I was unable to verify that)
This implies that vectored continue handlers are only used for error reporting, as already described in Fochts description of this bug report. On some Windows systems (including all testbot VMs?!) they also seem to be just stubs - instead of running vectored continue handlers the test crashes. I looked at implementing these functions some time ago, and even wrote some tests, which I will attach here for reference. Nevertheless, those tests don't seem to work as expected, and are basically useless when we also allow "broken" behaviour. Maybe it depends on some Windows settings which error reporting tool is executed?
By the way: Implementing in Wine would be relatively difficult because the unhandled exception handler stuff is in kernel32.dll, but vectored continue handlers are in ntdll.dll. I didn't find any documentation on how native Windows deals with that? Should unhandled exception filter stuff be moved to ntdll? Is there some undocumented export which can be used to execute continue handlers?