If I add an FTP network location on Windows, it creates a .lnk file pointing to the location. If I open the link via IShellLink, obtain its IShellFile target, and bind it to IShellFolder, I can enumerate the files on the remote location (after logging in) using IShellFolder::EnumObjects, and the correct files are returned.
However, if I try to obtain a name of any file there, via SHGetNameFromIDList or IShellItem::GetDisplayName, the function fails with 0x80070057
(invalid parameter) HRESULT. I know for sure that the PIDL is valid, because I can construct IShellItem, and its size is 72 bytes, but any attempt to obtain the path fails. Accessing any properties I can think of on IShellItem2, constructed from the PIDL, also fails, as well as simply calling SHGetPathFromIDList.
So, how do I obtain any meaningful name from the PIDL, preferably in SIGDN_PARENTRELATIVEPARSING
? Why do all these operations fail? I thought any PIDL is at least a file path or a CLSID, but this PIDL simply cannot be queried for anything.
I am aware that there are tons of better solutions for accessing FTP, but I have this question for Shell32 in general, not for FTP specifically.
I have also converted the PIDL to bytes via ILSaveToStream, and I can see the name of the file is definitely there.