Hi,
Robbert Xerox wrote:
Hi , i know this is not a wine-bug channel, but this
bug is affecting quite some apps, and seems to affect
more and more ...
At least five apps from wine-bug mailinglist throw up
an exception which either reads: "Assertion Failed
!bogus context in Local_Unwind()" or "in
Exception_Handler".
I have seen a bug pretty much like this in an application and here's
what Mike Hearn had to say about it:
There were actually two bugs here:
- Despite what the unit tests indicate, IShellFolder::BindToObject
with a NULL pidl can sometimes work. I guess it depends on the exact
class implementation. In this case I fixed it with an application
specific hack, we just return the desktop folder (it should probably
return an addreffed This).
- The app apparently relies on an old Win98 specific bug where
SFGAO_FILESYSTEM is set on My Computer. This bug is documented here:
http://msdn.microsoft.com/msdnmag/issues/05/06/CAtWork/default.aspx
at the bottom. But it's not present in Windows NT, as our unit tests
actually prove (we should pay more attention to 98/NT differences!!):
http://test.winehq.com/data/200506231000/98_PaulVriensW98SEFull/shell32:shlf...
It can be fixed with the patch to wine.inf, if you then do "make
install" in the tools directory and re-run wineprefixcreate.
I've attached the patch so you can try it. That's not code I can comment
on but maybe Mike will when he's back from his not-quite-vacations.
--
Francois Gouget
fgouget@codeweavers.com
Index: dlls/shell32/shlfolder.c
===================================================================
RCS file: /var/cvs/wine/dlls/shell32/shlfolder.c,v
retrieving revision 1.104
diff -u -p -r1.104 shlfolder.c
--- dlls/shell32/shlfolder.c 20 Jul 2005 10:29:05 -0000 1.104
+++ dlls/shell32/shlfolder.c 28 Jul 2005 21:33:11 -0000
@@ -272,6 +272,15 @@ HRESULT SHELL32_BindToChild (LPCITEMIDLI
HRESULT hr;
LPITEMIDLIST pidlChild;
+ TRACE("pidlRoot=%p, pathRoot=%s, pidlComplete=%p, riid=%s, ppvOut=%p\n",
+ pidlRoot, pathRoot, pidlComplete, debugstr_guid(riid), ppvOut);
+
+ if (!pidlComplete)
+ {
+ SHELL32_CoCreateInitSF(_ILCreateDesktop(), pathRoot, NULL, &CLSID_ShellDesktop, riid, ppvOut);
+ return S_OK;
+ }
+
if (!pidlRoot || !ppvOut || !pidlComplete || !pidlComplete->mkid.cb)
return E_INVALIDARG;
Index: tools/wine.inf
===================================================================
RCS file: /var/cvs/wine/tools/wine.inf,v
retrieving revision 1.37
diff -u -p -r1.37 wine.inf
--- tools/wine.inf 27 Jul 2005 15:42:40 -0000 1.37
+++ tools/wine.inf 28 Jul 2005 21:30:35 -0000
@@ -100,6 +100,8 @@ HKCR,TypeLib{00020430-0000-0000-C000-00
HKCR,TypeLib{00020430-0000-0000-C000-000000000046}\2.0,,,"OLE Automation"
HKCR,TypeLib{00020430-0000-0000-C000-000000000046}\2.0\0\win32,,,"stdole2.tlb"
HKCR,TypeLib{00020430-0000-0000-C000-000000000046}\2.0\FLAGS,,,"0"
+; FIXME: this is to emulate a Windows 98 bug which is gone in NT: very few apps need it
+HKCR,CLSID{20d04fe0-3aea-1069-a2d8-08002b30309d}\ShellFolder,"Attributes",0x10001,f0000154
[ControlClass]
HKLM,System\CurrentControlSet\Control\Class{4d36e978-e325-11ce-bfc1-08002be10318},,,"Ports (COM & LPT)"