Write problem with MS Office 2003

Juan Lang juan_lang at yahoo.com
Mon May 23 15:50:55 CDT 2005

Stefan wrote:
> There's a check for this case:
>     if (cidl && !apidl)
>         return E_INVALIDARG;
> MSDN doesn't give me a hint what to do if cidl is set to 0. If I
> change the if line to "if (!cidl && !apidl)" (so E_INVALIDARG is
> returned to office), saving the file works. Should this line be
> "if (!cidl || !apidl)", or is there a special case for cidl==0?

There is a special case for cidl == 0, some apps expect to be able to call
GetAttributesOf with cidl == 0, apidl == NULL.  See the patch that
introduced it here:

The special case, in particular, is to handle SFGAO_VALIDATE, described on
the MSDN page for IShellFolder::GetAttributesOf.  I'm guessing this bit is
what the app writers were reading when they decided to call
GetAttributesOf with cidl == 0:
"When used with the file system folder, SFGAO_VALIDATE instructs the
folder to discard cached properties retrieved by clients of
IShellFolder2::GetDetailsEx that may have accumulated for the specified

The correct fix is to modify SHELL32_GetItemAttributes to clear
SFGAO_READONLY if the file is not read-only.


Do you Yahoo!? 
Yahoo! Small Business - Try our new Resources site

More information about the wine-devel mailing list