結果フォルダに対応しました。(Tablacus Explorer)
LPITEMIDLIST teILCreateResultsXP(LPITEMIDLIST pidl) { LPITEMIDLIST pidl2 = NULL; LPCITEMIDLIST pidlLast; IShellFolder *pSF; if SUCCEEDED(SHBindToParent(pidl, IID_PPV_ARGS(&pSF), &pidlLast)) { SFGAOF sfAttr = SFGAO_FILESYSTEM | SFGAO_FILESYSANCESTOR | SFGAO_STORAGE | SFGAO_STREAM; if (SUCCEEDED(pSF->GetAttributesOf(1, &pidlLast, &sfAttr)) && (sfAttr & (SFGAO_FILESYSTEM | SFGAO_FILESYSANCESTOR | SFGAO_STORAGE | SFGAO_STREAM))) { UINT uSize = ILGetSize(pidl) + 28; pidl2 = (LPITEMIDLIST)::CoTaskMemAlloc(uSize + sizeof(USHORT)); ::ZeroMemory(pidl2, uSize + sizeof(USHORT)); UINT uSize2 = ILGetSize(pidlLast); ::CopyMemory(pidl2, pidlLast, uSize2); *(PUSHORT)pidl2 = uSize - 2; UINT uSize3 = uSize - uSize2 - 28; PBYTE p = (PBYTE)pidl2; *(PUSHORT)&p[uSize2 - 2] = uSize3 + 28; *(PDWORD)&p[uSize2 + 2] = 0xbeef0005; ::CopyMemory(&p[uSize2 + 22], pidl, uSize3); *(PUSHORT)&p[uSize - 4] = uSize2 - 2; CLSID clsid; IPersist *pPersist; if SUCCEEDED(pSF->QueryInterface(IID_PPV_ARGS(&pPersist))) { if SUCCEEDED(pPersist->GetClassID(&clsid)) { if (IsEqualCLSID(clsid, CLSID_ShellFSFolder)) { *(PUSHORT)&p[uSize2 + 24 + uSize3] = *(PUSHORT)&p[uSize2 - 4]; } } pPersist->Release(); } STRRET strret; if SUCCEEDED(pSF->GetDisplayNameOf(pidl2, SHGDN_NORMAL, &strret)) { if (strret.uType == STRRET_WSTR) { ::CoTaskMemFree(strret.pOleStr); } } else { ::teCoTaskMemFree(pidl2); pidl2 = NULL; } } pSF->Release(); } return pidl2; }