Fabian Maurer (@DarkShadow44) commented about dlls/shdocvw/shdocvw_main.c:
+ /* Guessing at parameter 3 based on IShellFolder's ParseDisplayName */ - FIXME("stub: 0x%lx %s %p %p\n",codepage,debugstr_w(lpszDisplayName),pbc,ppidl); - return E_FAIL; + FIXME("%lu %s %p %p: semi-stub\n", codepage, debugstr_w(name), pbc, ppidl); + + /* Make sure that it's correct URL */ + res.cbSize = sizeof(res); + hr = ParseURLW(name, &res); + if (hr != S_OK) return E_FAIL; + + hr = SHGetFolderLocation(0, CSIDL_INTERNET, 0, 0, &parent); + if (hr != S_OK) return hr; + + len = wcslen(name) + 3; + size = sizeof(WORD) + sizeof(*ie_data) + len * sizeof(WCHAR) + sizeof(*next); Might be a stupid question, but why +3, isn't this triple null terminated? Also I noticed you do a sizeof(WORD) for the child ITEMIDLIST, I assume to not waste the "BYTE abID[1];". Later you do something similar for ie_pidl_data, but using "FIELD_OFFSET(struct ie_pidl_data, name)". I'd find it easier to understand if you used the same concept for ITEMIDLIST, like FIELD_OFFSET(ITEMIDLIST, mkid.abID). I have to admit it took me a while to get where the WORD was coming from.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/6123#note_76633