HRESULT WINAPI CRegFolder::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) { if (!pidl1 || !pidl2 || pidl1->mkid.cb == 0 || pidl2->mkid.cb == 0) { ERR("Got an empty pidl!\n"); return E_INVALIDARG; } GUID const *clsid1 = _ILGetGUIDPointer (pidl1); GUID const *clsid2 = _ILGetGUIDPointer (pidl2); if (!clsid1 && !clsid2) { ERR("Got no guid pidl!\n"); return E_INVALIDARG; } else if (clsid1 && clsid2) { if (memcmp(clsid1, clsid2, sizeof(GUID)) == 0) return SHELL32_CompareChildren(this, lParam, pidl1, pidl2); return SHELL32_CompareDetails(this, lParam, pidl1, pidl2); } /* Guid folders come first compared to everything else */ return MAKE_COMPARE_HRESULT(clsid1 ? -1 : 1); }
HRESULT SHELL32_CompareGuidItems(IShellFolder2* isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) { if (pidl1->mkid.cb == 0 || pidl2->mkid.cb == 0) { ERR("Got an empty pidl!\n"); return E_INVALIDARG; } BOOL bIsGuidFolder1 = _ILIsSpecialFolder(pidl1); BOOL bIsGuidFolder2 = _ILIsSpecialFolder(pidl2); if (!bIsGuidFolder1 && !bIsGuidFolder2) { ERR("Got no guid pidl!\n"); return E_INVALIDARG; } else if (bIsGuidFolder1 && bIsGuidFolder2) { return SHELL32_CompareDetails(isf, lParam, pidl1, pidl2); } /* Guid folders come first compared to everything else */ return MAKE_COMPARE_HRESULT(bIsGuidFolder1 ? -1 : 1); }
/************************************************************************** * CPrinterFolder::CompareIDs */ HRESULT WINAPI CPrinterFolder::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) { return SHELL32_CompareDetails(this, lParam, pidl1, pidl2); }