[SHELL32]: CShellLink fixups Part 2:
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Tue, 17 Jan 2017 23:53:55 +0000 (23:53 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Tue, 17 Jan 2017 23:53:55 +0000 (23:53 +0000)
commit766a0d27df2255deaaef7f49bda522f6d91356b9
tree24fb9ea6c17dddd13cb818b35a1b5ac1927d7e06
parentef0d1d640cc1982e8d2e9266368d4d86a19941d6
[SHELL32]: CShellLink fixups Part 2:
- Add COM inheritance for interfaces IExtractIconA/W, and add in comment the missing other ones, the ordering of which is given by the apitests/com/shell32.
- Add proper support for the extra data block list (which is added at the end of the .lnk files), by using the API from shlwapi.dll: SH[Read|Write|Free]DataBlockList, SH[Add|Find|Remove]DataBlock.
- Using this support, getting/setting the MSI data block becomes as simple as child's play, and opens the possibility for implementing support for the other types of blocks.
- This in particular enables support for paths with environment variables for the link's target and icon: CORE-9236 #resolve
- Fix all the "shell32_winetest shelllink" tests: CORE-7158 #resolve
  Some of the fixes are inspired from a patch by Katayama Hirofumi MZ.
- Fix all the "shell32_apitest CShellLink" tests *but* those calling IExtractIcon::GetIconLocation().
- Implement a hackish substitute to the shell32!PathResolve API until someone writes a correct one (see the code & the FIXMEs for some ideas), possibly using the SHELL_xxx helpers in Wine's shellpath.c.
- In CFSExtractIcon_CreateInstance: Because IShellLink::GetIconLocation can return no icon location, in case none is specified in the .lnk (proved by apitests), we have to call the shell link's IExtractIcon::GetIconLocation in order to retrieve the icon of its target (yes, some shortcuts are made like that, e.g. Notepad++ 6.9 one...).

- More fixes...
- ... and a lot of documentation added in the code for you!

CORE-12682

svn path=/trunk/; revision=73576
reactos/dll/win32/shell32/CShellLink.cpp
reactos/dll/win32/shell32/CShellLink.h
reactos/dll/win32/shell32/folders.cpp