示例#1
0
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);
}
示例#2
0
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);
}
示例#3
0
/**************************************************************************
 *     CPrinterFolder::CompareIDs
 */
HRESULT WINAPI CPrinterFolder::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
{
    return SHELL32_CompareDetails(this, lParam, pidl1, pidl2);
}