Help needed on an SHGetFileInfoW() crash

2006-12-04 Thread Francois Gouget

A friend pointed me to a railway signalling simulation game:
http://www.simsig.co.uk/html/downloads.html

However, the installer crashes in SHGetFileInfoW():

000d:Call shell32.SHGetFileInfoA(0045eae8,0010,0034fcec,0160,1010) 
ret=0045e9f6
000d:trace:seh:raise_exception code=c005 flags=0 addr=0x7e8871b2
000d:trace:seh:raise_exception  info[0]=
000d:trace:seh:raise_exception  info[1]=

More precisely the crash happens on this line:
hr = IShellFolder_GetUIObjectOf(psfParent, 0, 1,
(LPCITEMIDLIST*)pidlLast, IID_IExtractIconW,
uDummy, (LPVOID*)pei);

And the reason is that psfParent is NULL. psfParent is initialized a bit 
above, but only if SHGetFileInfoW() was given a PIDL and 
SHGFI_USEFILEATTRIBUTES was not used. This means that whenever a 'real 
path' or SHGFI_USEFILEATTRIBUTES is used in combination with 
SHGFI_DISPLAYNAME, SHGFI_ICONLOCATION, SHGFI_ICON or SHGFI_SYSICONINDEX, 
then SHGetFileInfoW() will crash.

However we cannot just create a pidl since the 'real path' will usually 
refer to a nonexistent file or directory (in our case it is 
'c:\directory' so it's clear the installer just wants to know what's 
the icon for a standard directory).

Any idea?


-- 
Francois Gouget [EMAIL PROTECTED]  http://fgouget.free.fr/
Lotto: A tax on people who are bad at math. -- unknown
  Windows: Microsoft's tax on computer illiterates. -- WE7U




Re: Help needed on an SHGetFileInfoW() crash

2006-12-04 Thread Frank Richter
On 04.12.2006 19:20, Francois Gouget wrote:
 Any idea?

FWIW, maybe you need an IExtractIcon that does not work on a pidl but
only on a filename and file attributes.
So if the attribute is a folder, return the folder icon. Else get the
default icon for that particular file type.
Maybe the existing IExtractIcon could even be extended for that.

-f.r.