ReactOS 0.4.15-dev-5858-g16decc6
pidl.c File Reference
#include <wine/config.h>
#include <windef.h>
#include <winbase.h>
#include <strsafe.h>
#include <shlobj.h>
#include <undocshell.h>
#include <shlwapi.h>
#include <shlguid_undoc.h>
#include <wine/debug.h>
#include <wine/unicode.h>
#include "pidl.h"
#include "shell32_main.h"
#include "shresdef.h"
Include dependency graph for pidl.c:

Go to the source code of this file.

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 
#define COBJMACROS
 
#define NONAMELESSUNION
 
#define NONAMELESSSTRUCT
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (pidl)
 
 WINE_DECLARE_DEBUG_CHANNEL (shell)
 
LPVOID WINAPI Alloc (INT)
 
BOOL WINAPI Free (LPVOID)
 
static LPSTR _ILGetSTextPointer (LPCITEMIDLIST pidl)
 
static LPWSTR _ILGetTextPointerW (LPCITEMIDLIST pidl)
 
static BOOL ILGetDisplayNameExA (LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
 
BOOL ILGetDisplayNameExW (LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
 
BOOL WINAPI ILGetDisplayNameEx (LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type)
 
BOOL WINAPI ILGetDisplayName (LPCITEMIDLIST pidl, LPVOID path)
 
LPITEMIDLIST WINAPI ILFindLastID (LPCITEMIDLIST pidl)
 
BOOL WINAPI ILRemoveLastID (LPITEMIDLIST pidl)
 
LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl)
 
LPITEMIDLIST WINAPI ILCloneFirst (LPCITEMIDLIST pidl)
 
HRESULT WINAPI ILLoadFromStream (IStream *pStream, LPITEMIDLIST *ppPidl)
 
HRESULT WINAPI ILSaveToStream (IStream *pStream, LPCITEMIDLIST pPidl)
 
HRESULT WINAPI SHILCreateFromPathA (LPCSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
 
HRESULT WINAPI SHILCreateFromPathW (LPCWSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
 
HRESULT WINAPI SHILCreateFromPathAW (LPCVOID path, LPITEMIDLIST *ppidl, DWORD *attributes)
 
LPITEMIDLIST WINAPI SHCloneSpecialIDList (HWND hwndOwner, int nFolder, BOOL fCreate)
 
LPITEMIDLIST WINAPI ILGlobalClone (LPCITEMIDLIST pidl)
 
BOOL _ILHACKCompareSimpleIds (LPCITEMIDLIST pidltemp1, LPCITEMIDLIST pidltemp2)
 
BOOL WINAPI ILIsEqual (LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
 
BOOL WINAPI ILIsParent (LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild, BOOL bImmediate)
 
PUIDLIST_RELATIVE WINAPI ILFindChild (PIDLIST_ABSOLUTE pidl1, PCIDLIST_ABSOLUTE pidl2)
 
LPITEMIDLIST WINAPI ILCombine (LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
 
HRESULT WINAPI SHGetRealIDL (LPSHELLFOLDER lpsf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST *pidlReal)
 
LPITEMIDLIST WINAPI SHLogILFromFSIL (LPITEMIDLIST pidl)
 
UINT WINAPI ILGetSize (LPCITEMIDLIST pidl)
 
LPITEMIDLIST WINAPI ILGetNext (LPCITEMIDLIST pidl)
 
LPITEMIDLIST WINAPI ILAppendID (LPITEMIDLIST pidl, LPCSHITEMID item, BOOL bEnd)
 
void WINAPI ILFree (LPITEMIDLIST pidl)
 
void WINAPI ILGlobalFree (LPITEMIDLIST pidl)
 
LPITEMIDLIST WINAPI ILCreateFromPathA (LPCSTR path)
 
LPITEMIDLIST WINAPI ILCreateFromPathW (LPCWSTR path)
 
LPITEMIDLIST WINAPI ILCreateFromPathAW (LPCVOID path)
 
static HRESULT _ILParsePathW (LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile, BOOL bBindCtx, LPITEMIDLIST *ppidl, LPDWORD prgfInOut)
 
LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath)
 
LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath)
 
LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW (LPCVOID lpszPath)
 
HRESULT WINAPI SHGetDataFromIDListA (LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID dest, int len)
 
HRESULT WINAPI SHGetDataFromIDListW (LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID dest, int len)
 
BOOL WINAPI SHGetPathFromIDListA (LPCITEMIDLIST pidl, LPSTR pszPath)
 
BOOL WINAPI SHGetPathFromIDListW (LPCITEMIDLIST pidl, LPWSTR pszPath)
 
HRESULT WINAPI SHBindToParent (LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
 
HRESULT WINAPI SHParseDisplayName (LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
 
HRESULT WINAPI SHGetNameFromIDList (PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName)
 
HRESULT WINAPI SHGetIDListFromObject (IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
 
static LPITEMIDLIST _ILAlloc (PIDLTYPE type, unsigned int size)
 
LPITEMIDLIST _ILCreateDesktop (void)
 
LPITEMIDLIST _ILCreateMyComputer (void)
 
LPITEMIDLIST _ILCreateMyDocuments (void)
 
LPITEMIDLIST _ILCreateIExplore (void)
 
LPITEMIDLIST _ILCreateControlPanel (void)
 
LPITEMIDLIST _ILCreatePrinters (void)
 
LPITEMIDLIST _ILCreateNetwork (void)
 
LPITEMIDLIST _ILCreateBitBucket (void)
 
LPITEMIDLIST _ILCreateAdminTools (void)
 
LPITEMIDLIST _ILCreateGuid (PIDLTYPE type, REFIID guid)
 
LPITEMIDLIST _ILCreateGuidFromStrA (LPCSTR szGUID)
 
LPITEMIDLIST _ILCreateGuidFromStrW (LPCWSTR szGUID)
 
LPITEMIDLIST _ILCreateFromFindDataW (const WIN32_FIND_DATAW *wfd)
 
HRESULT _ILCreateFromPathW (LPCWSTR szPath, LPITEMIDLIST *ppidl)
 
LPITEMIDLIST _ILCreateDrive (LPCWSTR lpszNew)
 
LPITEMIDLIST _ILCreateEntireNetwork (void)
 
DWORD _ILGetDrive (LPCITEMIDLIST pidl, LPSTR pOut, UINT uSize)
 
BOOL _ILIsUnicode (LPCITEMIDLIST pidl)
 
BOOL _ILIsDesktop (LPCITEMIDLIST pidl)
 
BOOL _ILIsMyDocuments (LPCITEMIDLIST pidl)
 
BOOL _ILIsNetHood (LPCITEMIDLIST pidl)
 
BOOL _ILIsControlPanel (LPCITEMIDLIST pidl)
 
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl)
 
BOOL _ILIsBitBucket (LPCITEMIDLIST pidl)
 
BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl)
 
BOOL _ILIsDrive (LPCITEMIDLIST pidl)
 
BOOL _ILIsFolder (LPCITEMIDLIST pidl)
 
BOOL _ILIsValue (LPCITEMIDLIST pidl)
 
BOOL _ILIsCPanelStruct (LPCITEMIDLIST pidl)
 
BOOL _ILIsPidlSimple (LPCITEMIDLIST pidl)
 
DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
 
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
 
LPPIDLDATA _ILGetDataPointer (LPCITEMIDLIST pidl)
 
LPSTR _ILGetTextPointer (LPCITEMIDLIST pidl)
 
IID_ILGetGUIDPointer (LPCITEMIDLIST pidl)
 
FileStructW_ILGetFileStructW (LPCITEMIDLIST pidl)
 
BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *pFt)
 
BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
 
DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
 
BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
 
void _ILGetFileType (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
 
DWORD _ILGetFileAttributes (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
 
void _ILFreeaPidl (LPITEMIDLIST *apidl, UINT cidl)
 
PITEMID_CHILD_ILCopyaPidl (PCUITEMID_CHILD_ARRAY apidlsrc, UINT cidl)
 
LPITEMIDLIST_ILCopyCidaToaPidl (LPITEMIDLIST *pidl, const CIDA *cida)
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 28 of file pidl.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 29 of file pidl.c.

◆ NONAMELESSSTRUCT

#define NONAMELESSSTRUCT

Definition at line 31 of file pidl.c.

◆ NONAMELESSUNION

#define NONAMELESSUNION

Definition at line 30 of file pidl.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 27 of file pidl.c.

Function Documentation

◆ _ILAlloc()

static LPITEMIDLIST _ILAlloc ( PIDLTYPE  type,
unsigned int  size 
)
static

Definition at line 1576 of file pidl.c.

1577{
1578 LPITEMIDLIST pidlOut = NULL;
1579
1580 pidlOut = SHAlloc(size + 5);
1581 if(pidlOut)
1582 {
1584 LPITEMIDLIST pidlNext;
1585
1586 ZeroMemory(pidlOut, size + 5);
1587 pidlOut->mkid.cb = size + 3;
1588
1589 pData = _ILGetDataPointer(pidlOut);
1590 if (pData)
1591 pData->type = type;
1592
1593 pidlNext = ILGetNext(pidlOut);
1594 if (pidlNext)
1595 pidlNext->mkid.cb = 0x00;
1596 TRACE("-- (pidl=%p, size=%u)\n", pidlOut, size);
1597 }
1598
1599 return pidlOut;
1600}
#define NULL
Definition: types.h:112
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLsizeiptr size
Definition: glext.h:5919
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:851
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
#define TRACE(s)
Definition: solgame.cpp:4
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
#define ZeroMemory
Definition: winbase.h:1670

Referenced by _ILCreateDrive(), _ILCreateEntireNetwork(), _ILCreateFromFindDataW(), and _ILCreateGuid().

◆ _ILCopyaPidl()

PITEMID_CHILD * _ILCopyaPidl ( PCUITEMID_CHILD_ARRAY  apidlsrc,
UINT  cidl 
)

Definition at line 2663 of file pidl.c.

2664{
2665 UINT i;
2666 PITEMID_CHILD *apidldest;
2667
2668 if (!apidlsrc)
2669 return NULL;
2670
2671 apidldest = SHAlloc(cidl * sizeof(PITEMID_CHILD));
2672
2673 for (i = 0; i < cidl; i++)
2674 apidldest[i] = ILClone(apidlsrc[i]);
2675
2676 return apidldest;
2677}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: ndis.h:50
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228

Referenced by CDefaultContextMenu::Initialize(), and CCPLItemMenu::Initialize().

◆ _ILCopyCidaToaPidl()

LPITEMIDLIST * _ILCopyCidaToaPidl ( LPITEMIDLIST pidl,
const CIDA cida 
)

Definition at line 2684 of file pidl.c.

2685{
2686 UINT i;
2688
2689 dst = SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
2690 if (!dst)
2691 return NULL;
2692
2693 if (pidl)
2694 *pidl = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[0]]));
2695
2696 for (i = 0; i < cida->cidl; i++)
2697 dst[i] = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[i + 1]]));
2698
2699 return dst;
2700}
GLenum GLenum dst
Definition: glext.h:6340
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
UINT cidl
Definition: shlobj.h:499
unsigned char BYTE
Definition: xxhash.c:193

Referenced by CFSDropTarget::_DoDrop(), and SH_GetApidlFromDataObject().

◆ _ILCreateAdminTools()

LPITEMIDLIST _ILCreateAdminTools ( void  )

Definition at line 1681 of file pidl.c.

1682{
1683 TRACE("()\n");
1685}
const GUID CLSID_AdminFolderShortcut
#define PT_GUID
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
Definition: pidl.c:1687

◆ _ILCreateBitBucket()

LPITEMIDLIST _ILCreateBitBucket ( void  )

Definition at line 1675 of file pidl.c.

1676{
1677 TRACE("()\n");
1678 return _ILCreateGuid(PT_GUID, &CLSID_RecycleBin);
1679}

Referenced by SHGetFolderLocation().

◆ _ILCreateControlPanel()

LPITEMIDLIST _ILCreateControlPanel ( void  )

Definition at line 1631 of file pidl.c.

1632{
1633 LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
1634
1635 TRACE("()\n");
1636 if (parent)
1637 {
1638 LPITEMIDLIST cpl = _ILCreateGuid(PT_SHELLEXT, &CLSID_ControlPanel);
1639
1640 if (cpl)
1641 {
1642 ret = ILCombine(parent, cpl);
1643 SHFree(cpl);
1644 }
1645 SHFree(parent);
1646 }
1647 return ret;
1648}
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
r parent
Definition: btrfs.c:3010
#define PT_SHELLEXT
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:699
int ret

Referenced by CCPLItemMenu::InvokeCommand(), and SHGetFolderLocation().

◆ _ILCreateDesktop()

LPITEMIDLIST _ILCreateDesktop ( void  )

Definition at line 1602 of file pidl.c.

1603{
1605
1606 TRACE("()\n");
1607 ret = SHAlloc(2);
1608 if (ret)
1609 ret->mkid.cb = 0;
1610 return ret;
1611}

Referenced by BrsFolder_OnCommand(), CDesktopFolder::FinalConstruct(), GetNormalAndSelectedIcons(), and SHGetFolderLocation().

◆ _ILCreateDrive()

LPITEMIDLIST _ILCreateDrive ( LPCWSTR  lpszNew)

Definition at line 1808 of file pidl.c.

1809{
1810 LPITEMIDLIST pidlOut;
1811
1812 TRACE("(%s)\n",debugstr_w(lpszNew));
1813
1814 pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct));
1815 if (pidlOut)
1816 {
1817 LPSTR pszDest;
1818
1819 pszDest = _ILGetTextPointer(pidlOut);
1820 if (pszDest)
1821 {
1822 strcpy(pszDest, "x:\\");
1823 pszDest[0]=toupperW(lpszNew[0]);
1824 TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
1825 }
1826 }
1827 return pidlOut;
1828}
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
#define debugstr_a
Definition: kernel32.h:31
#define debugstr_w
Definition: kernel32.h:32
LPSTR _ILGetTextPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2254
static LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size)
Definition: pidl.c:1576
#define PT_DRIVE
Definition: pidl.h:88
#define toupperW(n)
Definition: unicode.h:45
char * LPSTR
Definition: xmlstorage.h:182

Referenced by CDrivesFolderEnum::Initialize(), CDrivesFolder::ParseDisplayName(), and CDrivesFolder::SetNameOf().

◆ _ILCreateEntireNetwork()

LPITEMIDLIST _ILCreateEntireNetwork ( void  )

Definition at line 1830 of file pidl.c.

1831{
1832 LPITEMIDLIST pidlOut;
1833
1834 TRACE("\n");
1835
1836 pidlOut = _ILAlloc(PT_NETWORK, FIELD_OFFSET(PIDLDATA, u.network.szNames[sizeof("Entire Network")]));
1837 if (pidlOut)
1838 {
1840
1841 pData->u.network.dummy = 0;
1842 strcpy(pData->u.network.szNames, "Entire Network");
1843 }
1844 return pidlOut;
1845}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
#define PT_NETWORK
Definition: pidl.h:101
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255

◆ _ILCreateFromFindDataW()

LPITEMIDLIST _ILCreateFromFindDataW ( const WIN32_FIND_DATAW wfd)

Definition at line 1741 of file pidl.c.

1742{
1743 char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
1744 DWORD len, len1, wlen, alen;
1745 LPITEMIDLIST pidl;
1746 PIDLTYPE type;
1747
1748 if (!wfd)
1749 return NULL;
1750
1751 TRACE("(%s, %s)\n",debugstr_w(wfd->cAlternateFileName), debugstr_w(wfd->cFileName));
1752
1753 /* prepare buffer with both names */
1754 len = WideCharToMultiByte(CP_ACP,0,wfd->cFileName,-1,buff,MAX_PATH,NULL,NULL);
1755 len1 = WideCharToMultiByte(CP_ACP,0,wfd->cAlternateFileName,-1, buff+len, sizeof(buff)-len, NULL, NULL);
1756 alen = len + len1;
1757
1758 type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
1759
1760 wlen = lstrlenW(wfd->cFileName) + 1;
1761 pidl = _ILAlloc(type, FIELD_OFFSET(FileStruct, szNames[alen + (alen & 1)]) +
1762 FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD));
1763 if (pidl)
1764 {
1766 FileStruct *fs = &pData->u.file;
1767 FileStructW *fsw;
1768 WORD *pOffsetW;
1769
1770 FileTimeToDosDateTime( &wfd->ftLastWriteTime, &fs->uFileDate, &fs->uFileTime);
1771 fs->dwFileSize = wfd->nFileSizeLow;
1772 fs->uFileAttribs = wfd->dwFileAttributes;
1773 memcpy(fs->szNames, buff, alen);
1774
1775 fsw = (FileStructW*)(pData->u.file.szNames + alen + (alen & 0x1));
1776 fsw->cbLen = FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD);
1777 FileTimeToDosDateTime( &wfd->ftCreationTime, &fsw->uCreationDate, &fsw->uCreationTime);
1778 FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime);
1779 memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR));
1780
1781 pOffsetW = (WORD*)((LPBYTE)pidl + pidl->mkid.cb - sizeof(WORD));
1782 *pOffsetW = (LPBYTE)fsw - (LPBYTE)pidl;
1783 TRACE("-- Set Value: %s\n",debugstr_w(fsw->wszName));
1784 }
1785 return pidl;
1786
1787}
#define CP_ACP
Definition: compat.h:109
#define MAX_PATH
Definition: compat.h:34
#define WideCharToMultiByte
Definition: compat.h:111
#define lstrlenW
Definition: compat.h:750
BOOL WINAPI FileTimeToDosDateTime(IN CONST FILETIME *lpFileTime, OUT LPWORD lpFatDate, OUT LPWORD lpFatTime)
Definition: time.c:37
static unsigned char buff[32768]
Definition: fatten.c:17
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLenum GLsizei len
Definition: glext.h:6722
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define PT_FOLDER
Definition: pidl.h:94
#define PT_VALUE
Definition: pidl.h:95
BYTE PIDLTYPE
Definition: pidl.h:108
WCHAR wszName[1]
Definition: shlfolder.c:1555
Definition: ffs.h:70
unsigned char * LPBYTE
Definition: typedefs.h:53
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CFileSysEnum::_AddFindResult(), _ILCreateFromPathW(), and SHELL32_CreatePidlFromBindCtx().

◆ _ILCreateFromPathW()

HRESULT _ILCreateFromPathW ( LPCWSTR  szPath,
LPITEMIDLIST ppidl 
)

Definition at line 1789 of file pidl.c.

1790{
1791 HANDLE hFile;
1792 WIN32_FIND_DATAW stffile;
1793
1794 if (!ppidl)
1795 return E_INVALIDARG;
1796
1797 hFile = FindFirstFileW(szPath, &stffile);
1800
1802
1803 *ppidl = _ILCreateFromFindDataW(&stffile);
1804
1805 return *ppidl ? S_OK : E_OUTOFMEMORY;
1806}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
#define S_OK
Definition: intsafe.h:52
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
LPCWSTR szPath
Definition: env.c:37
_In_ HANDLE hFile
Definition: mswsock.h:90
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *wfd)
Definition: pidl.c:1741
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92

Referenced by CFSFolder::ParseDisplayName(), and CFSFolder::SetNameOf().

◆ _ILCreateGuid()

LPITEMIDLIST _ILCreateGuid ( PIDLTYPE  type,
REFIID  guid 
)

Definition at line 1687 of file pidl.c.

1688{
1689 LPITEMIDLIST pidlOut;
1690
1691 if (type == PT_SHELLEXT || type == PT_GUID || type == PT_YAGUID)
1692 {
1693 pidlOut = _ILAlloc(type, sizeof(GUIDStruct));
1694 if (pidlOut)
1695 {
1697
1698 pData->u.guid.guid = *guid;
1699 TRACE("-- create GUID-pidl %s\n",
1700 debugstr_guid(&(pData->u.guid.guid)));
1701 }
1702 }
1703 else
1704 {
1705 WARN("%d: invalid type for GUID\n", type);
1706 pidlOut = NULL;
1707 }
1708 return pidlOut;
1709}
#define WARN(fmt,...)
Definition: debug.h:112
#define PT_YAGUID
#define debugstr_guid
Definition: kernel32.h:35
const GUID * guid

Referenced by _ILCreateAdminTools(), _ILCreateBitBucket(), _ILCreateControlPanel(), _ILCreateGuidFromStrA(), _ILCreateGuidFromStrW(), _ILCreateIExplore(), _ILCreateMyComputer(), _ILCreateMyDocuments(), _ILCreateNetwork(), and _ILCreatePrinters().

◆ _ILCreateGuidFromStrA()

LPITEMIDLIST _ILCreateGuidFromStrA ( LPCSTR  szGUID)

Definition at line 1712 of file pidl.c.

1713{
1714 IID iid;
1715
1716 if (FAILED(SHCLSIDFromStringA(szGUID, &iid)))
1717 {
1718 ERR("%s is not a GUID\n", szGUID);
1719 return NULL;
1720 }
1721 return _ILCreateGuid(PT_GUID, &iid);
1722}
#define ERR(fmt,...)
Definition: debug.h:110
DWORD WINAPI SHCLSIDFromStringA(LPCSTR clsid, CLSID *id)
Definition: shellole.c:248
#define FAILED(hr)
Definition: intsafe.h:51

◆ _ILCreateGuidFromStrW()

LPITEMIDLIST _ILCreateGuidFromStrW ( LPCWSTR  szGUID)

Definition at line 1725 of file pidl.c.

1726{
1727 IID iid;
1728
1729#ifndef __REACTOS__
1730 if (FAILED(SHCLSIDFromStringW(szGUID, &iid)))
1731#else
1732 if (!GUIDFromStringW(szGUID, &iid))
1733#endif
1734 {
1735 ERR("%s is not a GUID\n", debugstr_w(szGUID));
1736 return NULL;
1737 }
1738 return _ILCreateGuid(PT_GUID, &iid);
1739}
DWORD WINAPI SHCLSIDFromStringW(LPCWSTR clsid, CLSID *id)
Definition: shellole.c:256
BOOL WINAPI GUIDFromStringW(_In_ PCWSTR psz, _Out_ LPGUID pguid)

Referenced by CDesktopFolderEnum::AddItemsFromClassicStartMenuKey(), CRegFolderEnum::AddItemsFromKey(), CDesktopFolder::ParseDisplayName(), and CRegFolder::ParseDisplayName().

◆ _ILCreateIExplore()

LPITEMIDLIST _ILCreateIExplore ( void  )

Definition at line 1625 of file pidl.c.

1626{
1627 TRACE("()\n");
1628 return _ILCreateGuid(PT_GUID, &CLSID_Internet);
1629}

Referenced by SHGetFolderLocation().

◆ _ILCreateMyComputer()

LPITEMIDLIST _ILCreateMyComputer ( void  )

Definition at line 1613 of file pidl.c.

1614{
1615 TRACE("()\n");
1616 return _ILCreateGuid(PT_GUID, &CLSID_MyComputer);
1617}

Referenced by CDrivesFolder::FinalConstruct(), CDesktopFolderEnum::Initialize(), CDesktopFolder::ParseDisplayName(), and SHGetFolderLocation().

◆ _ILCreateMyDocuments()

LPITEMIDLIST _ILCreateMyDocuments ( void  )

Definition at line 1619 of file pidl.c.

1620{
1621 TRACE("()\n");
1622 return _ILCreateGuid(PT_GUID, &CLSID_MyDocuments);
1623}

Referenced by CMyDocsFolder::FinalConstruct(), CDesktopFolderEnum::Initialize(), and SHGetFolderLocation().

◆ _ILCreateNetwork()

LPITEMIDLIST _ILCreateNetwork ( void  )

Definition at line 1669 of file pidl.c.

1670{
1671 TRACE("()\n");
1672 return _ILCreateGuid(PT_GUID, &CLSID_NetworkPlaces);
1673}

Referenced by CDesktopFolder::ParseDisplayName(), and SHGetFolderLocation().

◆ _ILCreatePrinters()

LPITEMIDLIST _ILCreatePrinters ( void  )

Definition at line 1650 of file pidl.c.

1651{
1652 LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
1653
1654 TRACE("()\n");
1655 if (parent)
1656 {
1657 LPITEMIDLIST printers = _ILCreateGuid(PT_YAGUID, &CLSID_Printers);
1658
1659 if (printers)
1660 {
1661 ret = ILCombine(parent, printers);
1662 SHFree(printers);
1663 }
1664 SHFree(parent);
1665 }
1666 return ret;
1667}

Referenced by SHGetFolderLocation().

◆ _ILFreeaPidl()

void _ILFreeaPidl ( LPITEMIDLIST apidl,
UINT  cidl 
)

Definition at line 2646 of file pidl.c.

2647{
2648 UINT i;
2649
2650 if (apidl)
2651 {
2652 for (i = 0; i < cidl; i++)
2653 SHFree(apidl[i]);
2654 SHFree(apidl);
2655 }
2656}

Referenced by CFSDropTarget::_DoDrop(), CFSDropTarget::_RepositionItems(), DrivesContextMenuCallback(), RegFolderContextMenuCallback(), CCPLItemMenu::~CCPLItemMenu(), and CDefaultContextMenu::~CDefaultContextMenu().

◆ _ILGetDataPointer()

◆ _ILGetDrive()

DWORD _ILGetDrive ( LPCITEMIDLIST  pidl,
LPSTR  pOut,
UINT  uSize 
)

Definition at line 1855 of file pidl.c.

1856{
1857 TRACE("(%p,%p,%u)\n",pidl,pOut,uSize);
1858
1859 if(_ILIsMyComputer(pidl))
1860 pidl = ILGetNext(pidl);
1861
1862 if (pidl && _ILIsDrive(pidl))
1863 return _ILSimpleGetText(pidl, pOut, uSize);
1864
1865 return 0;
1866}
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
Definition: pidl.c:1931
DWORD _ILSimpleGetText(LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
Definition: pidl.c:2035
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
Definition: pidl.c:1964

Referenced by DrivesContextMenuCallback().

◆ _ILGetExtension()

BOOL _ILGetExtension ( LPCITEMIDLIST  pidl,
LPSTR  pOut,
UINT  uOutSize 
)

Definition at line 2487 of file pidl.c.

2488{
2489 char szTemp[MAX_PATH];
2490 const char * pPoint;
2491 LPCITEMIDLIST pidlTemp=pidl;
2492
2493 TRACE("pidl=%p\n",pidl);
2494
2495 if (!pidl)
2496 return FALSE;
2497
2498 pidlTemp = ILFindLastID(pidl);
2499
2500 if (!_ILIsValue(pidlTemp))
2501 return FALSE;
2502 if (!_ILSimpleGetText(pidlTemp, szTemp, MAX_PATH))
2503 return FALSE;
2504
2505 pPoint = PathFindExtensionA(szTemp);
2506
2507 if (!*pPoint)
2508 return FALSE;
2509
2510 pPoint++;
2511 lstrcpynA(pOut, pPoint, uOutSize);
2512 TRACE("%s\n",pOut);
2513
2514 return TRUE;
2515}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define lstrcpynA
Definition: compat.h:751
LPSTR WINAPI PathFindExtensionA(LPCSTR lpszPath)
Definition: path.c:422
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:189
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:1985

Referenced by _ILGetFileType(), SHELL32_GetFSItemAttributes(), and SHELL_IsShortcut().

◆ _ILGetFileAttributes()

DWORD _ILGetFileAttributes ( LPCITEMIDLIST  pidl,
LPSTR  pOut,
UINT  uOutSize 
)

Definition at line 2606 of file pidl.c.

2607{
2609 WORD wAttrib = 0;
2610 int i;
2611
2612 if (!pData)
2613 return 0;
2614
2615 switch(pData->type)
2616 {
2617 case PT_FOLDER:
2618 case PT_VALUE:
2619 wAttrib = pData->u.file.uFileAttribs;
2620 break;
2621 }
2622
2623 if(uOutSize >= 6)
2624 {
2625 i=0;
2626 if(wAttrib & FILE_ATTRIBUTE_READONLY)
2627 pOut[i++] = 'R';
2628 if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
2629 pOut[i++] = 'H';
2630 if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
2631 pOut[i++] = 'S';
2632 if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
2633 pOut[i++] = 'A';
2634 if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
2635 pOut[i++] = 'C';
2636 pOut[i] = 0x00;
2637 }
2638 return wAttrib;
2639}
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define FILE_ATTRIBUTE_COMPRESSED
Definition: nt_native.h:711
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706

Referenced by CFSFolder::CreateViewObject(), CFSFolder::GetDetailsOf(), getIconLocationForFolder(), SHELL32_GetFSItemAttributes(), SHGetDataFromIDListA(), and SHGetDataFromIDListW().

◆ _ILGetFileDate()

BOOL _ILGetFileDate ( LPCITEMIDLIST  pidl,
LPSTR  pOut,
UINT  uOutSize 
)

Definition at line 2422 of file pidl.c.

2423{
2424 FILETIME ft,lft;
2426 BOOL ret;
2427
2428 if (_ILGetFileDateTime( pidl, &ft ))
2429 {
2430 FileTimeToLocalFileTime(&ft, &lft);
2431 FileTimeToSystemTime (&lft, &time);
2432
2434 if (ret)
2435 {
2436 /* Append space + time without seconds */
2437 pOut[ret-1] = ' ';
2439 }
2440 }
2441 else
2442 {
2443 pOut[0] = '\0';
2444 ret = FALSE;
2445 }
2446 return ret;
2447}
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
Definition: time.c:221
unsigned int BOOL
Definition: ntddk_ex.h:94
INT WINAPI GetTimeFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1030
INT WINAPI GetDateFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpDateStr, INT cchOut)
Definition: lcformat.c:922
__u16 time
Definition: mkdosfs.c:8
#define LOCALE_USER_DEFAULT
BOOL _ILGetFileDateTime(LPCITEMIDLIST pidl, FILETIME *pFt)
Definition: pidl.c:2403
#define TIME_NOSECONDS
Definition: winnls.h:278
#define DATE_SHORTDATE
Definition: winnls.h:196

Referenced by CFSFolder::GetDetailsOf().

◆ _ILGetFileDateTime()

BOOL _ILGetFileDateTime ( LPCITEMIDLIST  pidl,
FILETIME pFt 
)

Definition at line 2403 of file pidl.c.

2404{
2406
2407 if (!pdata)
2408 return FALSE;
2409
2410 switch (pdata->type)
2411 {
2412 case PT_FOLDER:
2413 case PT_VALUE:
2414 DosDateTimeToFileTime(pdata->u.file.uFileDate, pdata->u.file.uFileTime, pFt);
2415 break;
2416 default:
2417 return FALSE;
2418 }
2419 return TRUE;
2420}
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
Definition: time.c:75
static PROTOCOLDATA * pdata
Definition: protocol.c:158

Referenced by _ILGetFileDate(), SHGetDataFromIDListA(), and SHGetDataFromIDListW().

◆ _ILGetFileSize()

DWORD _ILGetFileSize ( LPCITEMIDLIST  pidl,
LPSTR  pOut,
UINT  uOutSize 
)

Definition at line 2466 of file pidl.c.

2467{
2469 DWORD dwSize;
2470
2471 if (!pdata)
2472 return 0;
2473
2474 switch (pdata->type)
2475 {
2476 case PT_VALUE:
2477 dwSize = pdata->u.file.dwFileSize;
2478 if (pOut)
2479 StrFormatKBSizeA(dwSize, pOut, uOutSize);
2480 return dwSize;
2481 }
2482 if (pOut)
2483 *pOut = 0x00;
2484 return 0;
2485}
LPSTR WINAPI StrFormatKBSizeA(LONGLONG llBytes, LPSTR lpszDest, UINT cchMax)
Definition: string.c:1727
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56

Referenced by CFSFolder::GetDetailsOf(), SHGetDataFromIDListA(), SHGetDataFromIDListW(), and CDefView::UpdateStatusbar().

◆ _ILGetFileStructW()

FileStructW * _ILGetFileStructW ( LPCITEMIDLIST  pidl)

Definition at line 2361 of file pidl.c.

2361 {
2362 FileStructW *pFileStructW;
2363 WORD cbOffset;
2364
2365 if (!(_ILIsValue(pidl) || _ILIsFolder(pidl)))
2366 return NULL;
2367
2368 cbOffset = *(const WORD *)((const BYTE *)pidl + pidl->mkid.cb - sizeof(WORD));
2369 pFileStructW = (FileStructW*)((LPBYTE)pidl + cbOffset);
2370
2371 /* Currently I don't see a fool prove way to figure out if a pidl is for sure of WinXP
2372 * style with a FileStructW member. If we switch all our shellfolder-implementations to
2373 * the new format, this won't be a problem. For now, we do as many sanity checks as possible. */
2374 if ((cbOffset & 0x1) || /* FileStructW member is word aligned in the pidl */
2375 /* FileStructW is positioned after FileStruct */
2376 cbOffset < sizeof(pidl->mkid.cb) + sizeof(PIDLTYPE) + sizeof(FileStruct) ||
2377 /* There has to be enough space at cbOffset in the pidl to hold FileStructW and cbOffset */
2378 cbOffset > pidl->mkid.cb - sizeof(cbOffset) - sizeof(FileStructW) ||
2379 pidl->mkid.cb != cbOffset + pFileStructW->cbLen)
2380 {
2381 WARN("Invalid pidl format (cbOffset = %d)!\n", cbOffset);
2382 return NULL;
2383 }
2384
2385 return pFileStructW;
2386}
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:1976
struct tagFileStruct FileStruct

Referenced by CFSFolder::_CreateShellExtInstance(), _ILHACKCompareSimpleIds(), _ILSimpleGetTextW(), AddFSClassKeysToArray(), CFSFolder::BindToObject(), BuildPathsList(), CFSFolder::CompareIDs(), ExtensionFromPidl(), and CFSFolder::SetNameOf().

◆ _ILGetFileType()

void _ILGetFileType ( LPCITEMIDLIST  pidl,
LPSTR  pOut,
UINT  uOutSize 
)

Definition at line 2533 of file pidl.c.

2534{
2535#ifdef __REACTOS__ /* r32966 */
2536 char sType[64];
2537#endif
2538
2539 if(_ILIsValue(pidl))
2540 {
2541 char sTemp[64];
2542
2543 if(uOutSize > 0)
2544 pOut[0] = 0;
2545#ifdef __REACTOS__ /* r32966 */
2546 if (_ILGetExtension (pidl, sType, 64))
2547 {
2548 if (HCR_MapTypeToValueA(sType, sTemp, 64, TRUE))
2549 {
2550 /* retrieve description */
2551 if(HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE ))
2552 return;
2553 }
2554 /* display Ext-file as description */
2555 _strupr(sType);
2556 /* load localized file string */
2557 sTemp[0] = '\0';
2559 {
2560 sTemp[63] = '\0';
2561 StringCchPrintfA(pOut, uOutSize, sTemp, sType);
2562 }
2563 }
2564#else
2565 if (_ILGetExtension (pidl, sTemp, 64))
2566 {
2567 if (!( HCR_MapTypeToValueA(sTemp, sTemp, 64, TRUE)
2568 && HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE )))
2569 {
2570 lstrcpynA (pOut, sTemp, uOutSize - 6);
2571 strcat (pOut, "-file");
2572 }
2573 }
2574#endif
2575 }
2576 else
2577#ifdef __REACTOS__ /* r32966 */
2578 {
2579 pOut[0] = '\0';
2581 /* make sure its null terminated */
2582 pOut[uOutSize-1] = '\0';
2583 }
2584#else
2585 lstrcpynA(pOut, "Folder", uOutSize);
2586#endif
2587}
#define shell32_hInstance
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
BOOL _ILGetExtension(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2487
_CRTIMP char *__cdecl _strupr(_Inout_z_ char *_String)
BOOL HCR_MapTypeToValueA(LPCSTR szExtension, LPSTR szFileType, LONG len, BOOL bPrependDot)
Definition: classes.c:88
#define IDS_DIRECTORY
Definition: shresdef.h:156
#define IDS_ANY_FILE
Definition: shresdef.h:182
STRSAFEAPI StringCchPrintfA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszFormat,...)
Definition: strsafe.h:520
int WINAPI LoadStringA(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPSTR lpBuffer, _In_ int cchBufferMax)

Referenced by CFSFolder::GetDetailsOf(), and SHGetFileInfoW().

◆ _ILGetGUIDPointer()

IID * _ILGetGUIDPointer ( LPCITEMIDLIST  pidl)

Definition at line 2325 of file pidl.c.

2326{
2328
2329 TRACE("%p\n", pidl);
2330
2331 if (!pdata)
2332 return NULL;
2333
2334 TRACE("pdata->type 0x%04x\n", pdata->type);
2335 switch (pdata->type)
2336 {
2337 case PT_SHELLEXT:
2338 case PT_GUID:
2339 case PT_YAGUID:
2340 return &(pdata->u.guid.guid);
2341
2342 default:
2343 TRACE("Unknown pidl type 0x%04x\n", pdata->type);
2344 break;
2345 }
2346 return NULL;
2347}

Referenced by _ILHACKCompareSimpleIds(), _ILIsBitBucket(), _ILIsControlPanel(), _ILIsMyComputer(), _ILIsMyDocuments(), _ILIsNetHood(), _ILSimpleGetText(), _ILSimpleGetTextW(), CRegFolder::BindToObject(), CGuidItemContextMenu_CreateInstance(), CGuidItemExtractIcon_CreateInstance(), CRegFolder::CompareIDs(), CRegFolder::GetDetailsOf(), CRegFolder::GetDisplayNameOf(), CRegFolder::GetUIObjectOf(), CEnumIDListBase::HasItemWithCLSID(), HCR_GetFolderAttributes(), IsNamespaceExtensionHidden(), and CRegFolder::SetNameOf().

◆ _ILGetSTextPointer()

static LPSTR _ILGetSTextPointer ( LPCITEMIDLIST  pidl)
static

Definition at line 2297 of file pidl.c.

2298{
2299 /* TRACE(pidl,"(pidl%p)\n", pidl); */
2300
2302
2303 if (!pdata)
2304 return NULL;
2305
2306 switch (pdata->type)
2307 {
2308 case PT_FOLDER:
2309 case PT_VALUE:
2310 case PT_IESPECIAL1:
2311 case PT_IESPECIAL2:
2312 return pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1;
2313
2314 case PT_WORKGRP:
2315 return pdata->u.network.szNames + strlen (pdata->u.network.szNames) + 1;
2316 }
2317 return NULL;
2318}
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define PT_WORKGRP
Definition: pidl.h:98
#define PT_IESPECIAL1
Definition: pidl.h:102
#define PT_IESPECIAL2
Definition: pidl.h:104

Referenced by SHGetDataFromIDListA(), and SHGetDataFromIDListW().

◆ _ILGetTextPointer()

LPSTR _ILGetTextPointer ( LPCITEMIDLIST  pidl)

Definition at line 2254 of file pidl.c.

2255{
2256 /* TRACE(pidl,"(pidl%p)\n", pidl);*/
2257
2259
2260 if (!pdata)
2261 return NULL;
2262
2263 switch (pdata->type)
2264 {
2265 case PT_GUID:
2266 case PT_SHELLEXT:
2267 case PT_YAGUID:
2268 return NULL;
2269
2270 case PT_DRIVE:
2271 case PT_DRIVE1:
2272 case PT_DRIVE2:
2273 case PT_DRIVE3:
2274 return pdata->u.drive.szDriveName;
2275
2276 case PT_FOLDER:
2277 case PT_FOLDER1:
2278 case PT_VALUE:
2279 case PT_IESPECIAL1:
2280 case PT_IESPECIAL2:
2281 return pdata->u.file.szNames;
2282
2283 case PT_WORKGRP:
2284 case PT_COMP:
2285 case PT_NETWORK:
2286 case PT_NETPROVIDER:
2287 case PT_SHARE:
2288 return pdata->u.network.szNames;
2289 }
2290 return NULL;
2291}
#define PT_DRIVE1
Definition: pidl.h:92
#define PT_FOLDER1
Definition: pidl.h:93
#define PT_DRIVE3
Definition: pidl.h:90
#define PT_DRIVE2
Definition: pidl.h:89
#define PT_SHARE
Definition: pidl.h:105
#define PT_COMP
Definition: pidl.h:99
#define PT_NETPROVIDER
Definition: pidl.h:100

Referenced by _ILCreateDrive(), _ILSimpleGetText(), _ILSimpleGetTextW(), SHGetDataFromIDListA(), and SHGetDataFromIDListW().

◆ _ILGetTextPointerW()

static LPWSTR _ILGetTextPointerW ( LPCITEMIDLIST  pidl)
static

Definition at line 2198 of file pidl.c.

2199{
2200 /* TRACE(pidl,"(pidl%p)\n", pidl);*/
2201
2203
2204 if (!pdata)
2205 return NULL;
2206
2207 switch (pdata->type)
2208 {
2209 case PT_GUID:
2210 case PT_SHELLEXT:
2211 case PT_YAGUID:
2212 return NULL;
2213
2214 case PT_DRIVE:
2215 case PT_DRIVE1:
2216 case PT_DRIVE2:
2217 case PT_DRIVE3:
2218 /*return (LPSTR)&(pdata->u.drive.szDriveName);*/
2219 return NULL;
2220
2221 case PT_FOLDER:
2222 case PT_FOLDER1:
2223 case PT_VALUE:
2224 case PT_IESPECIAL1:
2225 case PT_IESPECIAL2:
2226 /*return (LPSTR)&(pdata->u.file.szNames);*/
2227 return NULL;
2228
2229 case PT_WORKGRP:
2230 case PT_COMP:
2231 case PT_NETWORK:
2232 case PT_NETPROVIDER:
2233 case PT_SHARE:
2234 /*return (LPSTR)&(pdata->u.network.szNames);*/
2235 return NULL;
2236
2237 case PT_VALUEW:
2238 return (LPWSTR)pdata->u.file.szNames;
2239
2240#ifdef __REACTOS__ /* r54423 */
2241 case PT_CPLAPPLET:
2242 return pdata->u.cpanel.szName;
2243#endif
2244
2245 }
2246 return NULL;
2247}
#define PT_VALUEW
Definition: pidl.h:96
#define PT_CPLAPPLET
Definition: pidl.h:86
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by _ILSimpleGetText(), and _ILSimpleGetTextW().

◆ _ILHACKCompareSimpleIds()

BOOL _ILHACKCompareSimpleIds ( LPCITEMIDLIST  pidltemp1,
LPCITEMIDLIST  pidltemp2 
)

Definition at line 479 of file pidl.c.

480{
481 LPPIDLDATA pdata1 = _ILGetDataPointer(pidltemp1);
482 LPPIDLDATA pdata2 = _ILGetDataPointer(pidltemp2);
483
484 IID *iid1 = _ILGetGUIDPointer(pidltemp1);
485 IID *iid2 = _ILGetGUIDPointer(pidltemp2);
486
487 FileStructW* pDataW1 = _ILGetFileStructW(pidltemp1);
488 FileStructW* pDataW2 = _ILGetFileStructW(pidltemp2);
489
490 if (_ILIsDesktop(pidltemp1) && _ILIsDesktop(pidltemp2))
491 {
492 return TRUE;
493 }
494 else if (_ILIsDesktop(pidltemp1) || _ILIsDesktop(pidltemp2))
495 {
496 return FALSE;
497 }
498 else if (iid1 || iid2)
499 {
500 if (!iid1 || !iid2 || memcmp(iid1, iid2, sizeof(GUID)))
501 return FALSE;
502 }
503 else if (pDataW1 || pDataW2)
504 {
505 if (!pDataW1 || !pDataW2 || wcsicmp(pDataW1->wszName, pDataW2->wszName))
506 return FALSE;
507 }
508 else if (_ILIsFolder(pidltemp1) || _ILIsFolder(pidltemp2))
509 {
510 if (!_ILIsFolder(pidltemp1) || !_ILIsFolder(pidltemp2) || strcmp(pdata1->u.file.szNames, pdata2->u.file.szNames))
511 return FALSE;
512 }
513 else if (_ILIsValue(pidltemp1) || _ILIsValue(pidltemp2))
514 {
515 if (!_ILIsValue(pidltemp1) || !_ILIsValue(pidltemp2) || strcmp(pdata1->u.file.szNames, pdata2->u.file.szNames))
516 return FALSE;
517 }
518 else if (_ILIsDrive(pidltemp1) || _ILIsDrive(pidltemp2))
519 {
520 if (!_ILIsDrive(pidltemp1) || !_ILIsDrive(pidltemp2) || pdata1->u.drive.szDriveName[0] != pdata2->u.drive.szDriveName[0])
521 return FALSE;
522 }
523 else
524 {
525 return FALSE;
526 }
527
528 return TRUE;
529}
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define wcsicmp
Definition: compat.h:15
FileStructW * _ILGetFileStructW(LPCITEMIDLIST pidl)
Definition: pidl.c:2361
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2325
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: pidl.c:1891

Referenced by ILFindChild(), ILIsEqual(), and ILIsParent().

◆ _ILIsBitBucket()

BOOL _ILIsBitBucket ( LPCITEMIDLIST  pidl)

Definition at line 1942 of file pidl.c.

1943{
1944 IID *iid = _ILGetGUIDPointer(pidl);
1945
1946 TRACE("(%p)\n", pidl);
1947
1948 if (iid)
1949 return IsEqualIID(iid, &CLSID_RecycleBin);
1950 return FALSE;
1951}
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

Referenced by CGuidItemExtractIcon_CreateInstance(), RegFolderContextMenuCallback(), and CDefView::UpdateStatusbar().

◆ _ILIsControlPanel()

BOOL _ILIsControlPanel ( LPCITEMIDLIST  pidl)

Definition at line 1920 of file pidl.c.

1921{
1922 IID *iid = _ILGetGUIDPointer(pidl);
1923
1924 TRACE("(%p)\n", pidl);
1925
1926 if (iid)
1927 return IsEqualIID(iid, &CLSID_ControlPanel);
1928 return FALSE;
1929}

Referenced by CDrivesFolder::GetAttributesOf(), and CDefView::OnCreate().

◆ _ILIsCPanelStruct()

BOOL _ILIsCPanelStruct ( LPCITEMIDLIST  pidl)

Definition at line 1994 of file pidl.c.

1995{
1996 LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1997
1998 TRACE("(%p)\n",pidl);
1999
2000 return (pidl && lpPData && (lpPData->type == 0));
2001}

Referenced by CControlPanelFolder::GetAttributesOf(), and CControlPanelFolder::GetUIObjectOf().

◆ _ILIsDesktop()

BOOL _ILIsDesktop ( LPCITEMIDLIST  pidl)
inline

Definition at line 1891 of file pidl.c.

1892{
1893 TRACE("(%p)\n",pidl);
1894
1895 return !pidl || !pidl->mkid.cb;
1896}

Referenced by _ILHACKCompareSimpleIds(), _ILIsEmpty(), _ILIsPidlSimple(), _ILSimpleGetText(), _ILSimpleGetTextW(), ILAppendID(), and ILFindChild().

◆ _ILIsDrive()

◆ _ILIsFolder()

◆ _ILIsMyComputer()

BOOL _ILIsMyComputer ( LPCITEMIDLIST  pidl)

Definition at line 1931 of file pidl.c.

1932{
1933 REFIID iid = _ILGetGUIDPointer(pidl);
1934
1935 TRACE("(%p)\n",pidl);
1936
1937 if (iid)
1938 return IsEqualIID(iid, &CLSID_MyComputer);
1939 return FALSE;
1940}
#define REFIID
Definition: guiddef.h:118

Referenced by _ILGetDrive(), BrsFolder_Treeview_Expand(), CRegFolder::CompareIDs(), CDesktopFolder::GetAttributesOf(), and RegFolderContextMenuCallback().

◆ _ILIsMyDocuments()

BOOL _ILIsMyDocuments ( LPCITEMIDLIST  pidl)

Definition at line 1898 of file pidl.c.

1899{
1900 IID *iid = _ILGetGUIDPointer(pidl);
1901
1902 TRACE("(%p)\n", pidl);
1903
1904 if (iid)
1905 return IsEqualIID(iid, &CLSID_MyDocuments);
1906 return FALSE;
1907}

◆ _ILIsNetHood()

BOOL _ILIsNetHood ( LPCITEMIDLIST  pidl)

Definition at line 1909 of file pidl.c.

1910{
1911 IID *iid = _ILGetGUIDPointer(pidl);
1912
1913 TRACE("(%p)\n", pidl);
1914
1915 if (iid)
1916 return IsEqualIID(iid, &CLSID_NetworkPlaces);
1917 return FALSE;
1918}

Referenced by CDesktopFolder::GetAttributesOf(), CDefView::OnCreate(), and RegFolderContextMenuCallback().

◆ _ILIsPidlSimple()

BOOL _ILIsPidlSimple ( LPCITEMIDLIST  pidl)

Definition at line 2006 of file pidl.c.

2007{
2008 BOOL ret = TRUE;
2009
2010 if(! _ILIsDesktop(pidl)) /* pidl=NULL or mkid.cb=0 */
2011 {
2012 WORD len = pidl->mkid.cb;
2013 LPCITEMIDLIST pidlnext = (LPCITEMIDLIST) (((const BYTE*)pidl) + len );
2014
2015 if (pidlnext->mkid.cb)
2016 ret = FALSE;
2017 }
2018
2019 TRACE("%s\n", ret ? "Yes" : "No");
2020 return ret;
2021}

Referenced by SHBindToParent().

◆ _ILIsSpecialFolder()

BOOL _ILIsSpecialFolder ( LPCITEMIDLIST  pidl)

Definition at line 1953 of file pidl.c.

1954{
1955 LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1956
1957 TRACE("(%p)\n",pidl);
1958
1959 return (pidl && ( (lpPData && (PT_GUID== lpPData->type || PT_SHELLEXT== lpPData->type || PT_YAGUID == lpPData->type)) ||
1960 (pidl && pidl->mkid.cb == 0x00)
1961 ));
1962}

Referenced by SHGetDataFromIDListA().

◆ _ILIsUnicode()

BOOL _ILIsUnicode ( LPCITEMIDLIST  pidl)

Definition at line 1882 of file pidl.c.

1883{
1884 LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1885
1886 TRACE("(%p)\n",pidl);
1887
1888 return (pidl && lpPData && PT_VALUEW == lpPData->type);
1889}

Referenced by pdump_impl().

◆ _ILIsValue()

◆ _ILParsePathW()

static HRESULT _ILParsePathW ( LPCWSTR  path,
LPWIN32_FIND_DATAW  lpFindFile,
BOOL  bBindCtx,
LPITEMIDLIST ppidl,
LPDWORD  prgfInOut 
)
static

Definition at line 1030 of file pidl.c.

1032{
1033 LPSHELLFOLDER pSF = NULL;
1034 LPBC pBC = NULL;
1035 HRESULT ret;
1036
1037 TRACE("%s %p %d (%p)->%p (%p)->0x%x\n", debugstr_w(path), lpFindFile, bBindCtx,
1038 ppidl, ppidl ? *ppidl : NULL,
1039 prgfInOut, prgfInOut ? *prgfInOut : 0);
1040
1041 ret = SHGetDesktopFolder(&pSF);
1042 if (FAILED(ret))
1043 return ret;
1044
1045 if (lpFindFile || bBindCtx)
1046 ret = IFileSystemBindData_Constructor(lpFindFile, &pBC);
1047
1048 if (SUCCEEDED(ret))
1049 {
1050 ret = IShellFolder_ParseDisplayName(pSF, 0, pBC, (LPOLESTR)path, NULL, ppidl, prgfInOut);
1051 }
1052
1053 if (pBC)
1054 {
1055 IBindCtx_Release(pBC);
1056 pBC = NULL;
1057 }
1058
1059 IShellFolder_Release(pSF);
1060
1061 if (FAILED(ret) && ppidl)
1062 *ppidl = NULL;
1063
1064 TRACE("%s %p 0x%x\n", debugstr_w(path), ppidl ? *ppidl : NULL, prgfInOut ? *prgfInOut : 0);
1065
1066 return ret;
1067}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
HRESULT WINAPI IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV)
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static LPOLESTR
Definition: stg_prop.c:27
interface IBindCtx * LPBC
Definition: objfwd.h:18

Referenced by SHSimpleIDListFromPathA(), and SHSimpleIDListFromPathW().

◆ _ILSimpleGetText()

DWORD _ILSimpleGetText ( LPCITEMIDLIST  pidl,
LPSTR  szOut,
UINT  uOutSize 
)

Definition at line 2035 of file pidl.c.

2036{
2037 DWORD dwReturn=0;
2038 LPSTR szSrc;
2039 LPWSTR szSrcW;
2040 GUID const * riid;
2041 char szTemp[MAX_PATH];
2042
2043 TRACE("(%p %p %x)\n",pidl,szOut,uOutSize);
2044
2045 if (!pidl)
2046 return 0;
2047
2048 if (szOut)
2049 *szOut = 0;
2050
2051 if (_ILIsDesktop(pidl))
2052 {
2053 /* desktop */
2054 if (HCR_GetClassNameA(&CLSID_ShellDesktop, szTemp, MAX_PATH))
2055 {
2056 if (szOut)
2057 lstrcpynA(szOut, szTemp, uOutSize);
2058
2059 dwReturn = strlen (szTemp);
2060 }
2061 }
2062 else if (( szSrc = _ILGetTextPointer(pidl) ))
2063 {
2064 /* filesystem */
2065 if (szOut)
2066 lstrcpynA(szOut, szSrc, uOutSize);
2067
2068 dwReturn = strlen(szSrc);
2069 }
2070 else if (( szSrcW = _ILGetTextPointerW(pidl) ))
2071 {
2072 /* unicode filesystem */
2073 WideCharToMultiByte(CP_ACP,0,szSrcW, -1, szTemp, MAX_PATH, NULL, NULL);
2074
2075 if (szOut)
2076 lstrcpynA(szOut, szTemp, uOutSize);
2077
2078 dwReturn = strlen (szTemp);
2079 }
2080 else if (( riid = _ILGetGUIDPointer(pidl) ))
2081 {
2082 /* special folder */
2083 if ( HCR_GetClassNameA(riid, szTemp, MAX_PATH) )
2084 {
2085 if (szOut)
2086 lstrcpynA(szOut, szTemp, uOutSize);
2087
2088 dwReturn = strlen (szTemp);
2089 }
2090 }
2091 else
2092 {
2093 ERR("-- no text\n");
2094 }
2095
2096 TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_a(szOut),dwReturn);
2097 return dwReturn;
2098}
REFIID riid
Definition: atlbase.h:39
static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl)
Definition: pidl.c:2198
BOOL HCR_GetClassNameA(REFIID riid, LPSTR szDest, DWORD len)
Definition: classes.c:417

Referenced by _ILGetDrive(), and _ILGetExtension().

◆ _ILSimpleGetTextW()

DWORD _ILSimpleGetTextW ( LPCITEMIDLIST  pidl,
LPWSTR  szOut,
UINT  uOutSize 
)

Definition at line 2107 of file pidl.c.

2108{
2109 DWORD dwReturn;
2110 FileStructW *pFileStructW = _ILGetFileStructW(pidl);
2111
2112 TRACE("(%p %p %x)\n",pidl,szOut,uOutSize);
2113
2114 if (pFileStructW) {
2115 lstrcpynW(szOut, pFileStructW->wszName, uOutSize);
2116 dwReturn = lstrlenW(pFileStructW->wszName);
2117 } else {
2118 GUID const * riid;
2119 WCHAR szTemp[MAX_PATH];
2120 LPSTR szSrc;
2121 LPWSTR szSrcW;
2122 dwReturn=0;
2123
2124 if (!pidl)
2125 return 0;
2126
2127 if (szOut)
2128 *szOut = 0;
2129
2130 if (_ILIsDesktop(pidl))
2131 {
2132 /* desktop */
2133 if (HCR_GetClassNameW(&CLSID_ShellDesktop, szTemp, MAX_PATH))
2134 {
2135 if (szOut)
2136 lstrcpynW(szOut, szTemp, uOutSize);
2137
2138 dwReturn = lstrlenW (szTemp);
2139 }
2140 }
2141 else if (( szSrcW = _ILGetTextPointerW(pidl) ))
2142 {
2143 /* unicode filesystem */
2144 if (szOut)
2145 lstrcpynW(szOut, szSrcW, uOutSize);
2146
2147 dwReturn = lstrlenW(szSrcW);
2148 }
2149 else if (( szSrc = _ILGetTextPointer(pidl) ))
2150 {
2151 /* filesystem */
2152 MultiByteToWideChar(CP_ACP, 0, szSrc, -1, szTemp, MAX_PATH);
2153
2154 if (szOut)
2155 lstrcpynW(szOut, szTemp, uOutSize);
2156
2157 dwReturn = lstrlenW (szTemp);
2158 }
2159 else if (( riid = _ILGetGUIDPointer(pidl) ))
2160 {
2161 /* special folder */
2162 if ( HCR_GetClassNameW(riid, szTemp, MAX_PATH) )
2163 {
2164 if (szOut)
2165 lstrcpynW(szOut, szTemp, uOutSize);
2166
2167 dwReturn = lstrlenW (szTemp);
2168 }
2169 }
2170 else
2171 {
2172 ERR("-- no text\n");
2173 }
2174 }
2175
2176 TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_w(szOut),dwReturn);
2177 return dwReturn;
2178}
#define MultiByteToWideChar
Definition: compat.h:110
#define lstrcpynW
Definition: compat.h:738
BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len)
Definition: classes.c:342

Referenced by CDesktopFolder::_GetSFFromPidl(), CDrivesFolder::GetDisplayNameOf(), CFSFolder::GetDisplayNameOf(), RenderHDROP(), CDrivesFolder::SetNameOf(), and SHELL32_GetFSItemAttributes().

◆ Alloc()

LPVOID WINAPI Alloc ( INT  )

Referenced by ILGlobalClone().

◆ Free()

BOOL WINAPI Free ( LPVOID  lpMem)

Definition at line 116 of file comctl32undoc.c.

117{
118 return !LocalFree( lpMem );
119}
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577

◆ ILAppendID()

LPITEMIDLIST WINAPI ILAppendID ( LPITEMIDLIST  pidl,
LPCSHITEMID  item,
BOOL  bEnd 
)

Definition at line 885 of file pidl.c.

886{
887 LPITEMIDLIST idlRet;
889
890 WARN("(pidl=%p,pidl=%p,%08u)semi-stub\n",pidl,item,bEnd);
891
892 pdump (pidl);
893 pdump (itemid);
894
895 if (_ILIsDesktop(pidl))
896 {
897 idlRet = ILClone(itemid);
898 SHFree (pidl);
899 return idlRet;
900 }
901
902 if (bEnd)
903 idlRet = ILCombine(pidl, itemid);
904 else
905 idlRet = ILCombine(itemid, pidl);
906
907 SHFree(pidl);
908 return idlRet;
909}
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
static ATOM item
Definition: dde.c:856

Referenced by init_function_pointers().

◆ ILClone()

LPITEMIDLIST WINAPI ILClone ( LPCITEMIDLIST  pidl)

Definition at line 228 of file pidl.c.

229{
230 DWORD len;
231 LPITEMIDLIST newpidl;
232
233 if (!pidl)
234 return NULL;
235
236 len = ILGetSize(pidl);
237 newpidl = SHAlloc(len);
238 if (newpidl)
239 memcpy(newpidl,pidl,len);
240
241 TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
242 pdump(pidl);
243
244 return newpidl;
245}
#define ILGetSize
Definition: shellclasses.h:638

Referenced by _ILCopyaPidl(), _ILCopyCidaToaPidl(), _ILReadFromSharedMemory(), CAddressEditBox::AddComboBoxItem(), CMergedFolder::AddNameSpace(), CEnumMergedFolder::Begin(), CDesktopBrowser::BrowseObject(), CShellBrowser::BrowseToPath(), BrsFolder_OnCommand(), BrsFolder_Treeview_Changed(), CFSFolder::CallBack(), DoGetAliasPIDLs(), ExplorerMessageLoop(), FILEDLG95_LOOKIN_AddItem(), FM_SetMenuParameter(), CShellItem::get_parent_pidl(), CISFBand::GetBandInfoSFB(), CFontExt::GetCurFolder(), CNetworkConnections::GetCurFolder(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetCurFolder(), CZipFolder::GetCurFolder(), CFindFolder::GetCurFolder(), CAdminToolsFolder::GetCurFolder(), CControlPanelFolder::GetCurFolder(), CDesktopFolder::GetCurFolder(), CDrivesFolder::GetCurFolder(), CFontsFolder::GetCurFolder(), CFSFolder::GetCurFolder(), CMyDocsFolder::GetCurFolder(), CNetFolder::GetCurFolder(), CPrinterFolder::GetCurFolder(), CRecycleBin::GetCurFolder(), CShellItem::GetIDList(), CShellLink::GetIDList(), GetParentPidl(), CShellBrowser::GetPidl(), CTravelEntry::GetPidl(), GetPidlFromDataObject(), CMenuSFToolbar::GetShellFolder(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetUIObjectOf(), CShellBrowser::GetWindowData(), ILAppendID(), ILCombine(), ILIsParentOrSpecialParent(), init_function_pointers(), CDefaultContextMenu::Initialize(), CRegFolder::Initialize(), CFolderItem::Initialize(), CFontExt::Initialize(), CRecycleBinItemContextMenu::Initialize(), CNtObjectFolderExtractIcon::Initialize(), CRegistryFolderExtractIcon::Initialize(), CFolder::Initialize(), CFolderItems::Initialize(), CNetworkConnections::Initialize(), CCommonFolder< TSelf, TItemId, TExtractIcon >::Initialize(), CNtObjectFolder::Initialize(), CRegistryFolder::Initialize(), CZipFolder::Initialize(), CFindFolder::Initialize(), CAdminToolsFolder::Initialize(), CControlPanelFolder::Initialize(), CFontsFolder::Initialize(), CFSFolder::Initialize(), CMyDocsFolder::Initialize(), CNetFolder::Initialize(), CPrinterFolder::Initialize(), CRecycleBin::Initialize(), CMergedFolder::Initialize(), CACListISF::Initialize(), CCopyToMenu::Initialize(), CMoveToMenu::Initialize(), CNewMenu::Initialize(), CFSFolder::InitializeEx(), CISFBand::InitializeSFB(), InitializeTreeView(), CExplorerBand::InsertItem(), InsertTreeViewItem(), IShellBrowserImpl_BrowseObject(), CDefView::Item(), CDefView::LV_AddItem(), CDefView::LV_RenameItem(), CShellBrowser::NavigateToParent(), CEnumIDListBase::Next(), CEnumMergedFolder::Next(), CEnumIDList::Next(), CACListISF::NextLocation(), CAddressEditBox::OnWinEvent(), CMergedFolder::ParseDisplayName(), ParseSharedPacket(), CAddressEditBox::PopulateComboBox(), CStartMenuBtnCtxMenu::QueryContextMenu(), CExplorerBand::RenameItem(), CShellItem::SetIDList(), CRegFolder::SetNameOf(), CMenuSFToolbar::SetShellFolder(), CShellLink::SetTargetFromPIDLOrPath(), SHBindToFolderIDListParent(), SHBindToParent(), SHCloneIETHREADPARAM(), SHCreateFromDesktop(), SHCreateShellItem(), SHGetFileInfoW(), test_AttributesRegistration(), and CExplorerBand::UpdateBrowser().

◆ ILCloneFirst()

LPITEMIDLIST WINAPI ILCloneFirst ( LPCITEMIDLIST  pidl)

Definition at line 253 of file pidl.c.

254{
255 DWORD len;
256 LPITEMIDLIST pidlNew = NULL;
257
258 TRACE("pidl=%p\n", pidl);
259 pdump(pidl);
260
261 if (pidl)
262 {
263 len = pidl->mkid.cb;
264 pidlNew = SHAlloc(len+2);
265 if (pidlNew)
266 {
267 memcpy(pidlNew,pidl,len+2); /* 2 -> mind a desktop pidl */
268
269 if (len)
270 ILGetNext(pidlNew)->mkid.cb = 0x00;
271 }
272 }
273 TRACE("-- newpidl=%p\n",pidlNew);
274
275 return pidlNew;
276}

Referenced by CCommonFolder< TSelf, TItemId, TExtractIcon >::BindToObject(), CCommonFolder< TSelf, TItemId, TExtractIcon >::CompareIDs(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDisplayNameOf(), init_function_pointers(), SHELL32_BindToSF(), SHELL32_CompareChildren(), and SHELL32_GetDisplayNameOfChild().

◆ ILCombine()

LPITEMIDLIST WINAPI ILCombine ( LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)

Definition at line 699 of file pidl.c.

700{
701 DWORD len1,len2;
702 LPITEMIDLIST pidlNew;
703
704 TRACE("pidl=%p pidl=%p\n",pidl1,pidl2);
705
706 if (!pidl1 && !pidl2) return NULL;
707
708 pdump (pidl1);
709 pdump (pidl2);
710
711 if (!pidl1)
712 {
713 pidlNew = ILClone(pidl2);
714 return pidlNew;
715 }
716
717 if (!pidl2)
718 {
719 pidlNew = ILClone(pidl1);
720 return pidlNew;
721 }
722
723 len1 = ILGetSize(pidl1)-2;
724 len2 = ILGetSize(pidl2);
725 pidlNew = SHAlloc(len1+len2);
726
727 if (pidlNew)
728 {
729 memcpy(pidlNew,pidl1,len1);
730 memcpy(((BYTE *)pidlNew)+len1,pidl2,len2);
731 }
732
733 /* TRACE(pidl,"--new pidl=%p\n",pidlNew);*/
734 return pidlNew;
735}

Referenced by _ILCreateControlPanel(), _ILCreatePrinters(), _ReparsePIDL(), _ShowPropertiesDialogThread(), CCommonFolder< TSelf, TItemId, TExtractIcon >::BindToObject(), ShellPath::create_absolute_pidl(), CCopyToMenu::DoGetFileTitle(), CMoveToMenu::DoGetFileTitle(), CCopyToMenu::DoRealCopy(), CMoveToMenu::DoRealMove(), CFontExt::Drop(), CMyDocsDropHandler::Drop(), CDeskLinkDropHandler::Drop(), FILEDLG95_LOOKIN_Init(), CAddressEditBox::FillOneLevel(), FM_InitMenuPopup(), ICommDlgBrowser3_fnIncludeObject(), ILAppendID(), init_function_pointers(), COpenWithMenu::Initialize(), CZipFolder::Initialize(), CExplorerBand::InsertSubitems(), InsertTreeViewItem(), CFindFolderContextMenu::InvokeCommand(), CDefaultContextMenu::InvokePidl(), IShellBrowserImpl_BrowseObject(), CSendToMenu::LoadAllItems(), CDefView::OnNotify(), CExplorerBand::OnWinEvent(), CCommonFolder< TSelf, TItemId, TExtractIcon >::ParseDisplayName(), CFolder::ParseName(), CAddressEditBox::ParseNow(), CExplorerBand::RefreshTreePidl(), RenderFILENAMEA(), RenderFILENAMEW(), RenderHDROP(), SHCreateShellItem(), SHELL32_CoCreateInitSF(), SHELL32_ParseNextElement(), SHGetRealIDL(), SHOpenFolderAndSelectItems(), test_SHCreateShellItem(), test_SHCreateShellItemArray(), TestHIDA(), and CDefaultContextMenu::TryToBrowse().

◆ ILCreateFromPathA()

LPITEMIDLIST WINAPI ILCreateFromPathA ( LPCSTR  path)

Definition at line 966 of file pidl.c.

967{
968 LPITEMIDLIST pidlnew = NULL;
969
970 TRACE_(shell)("%s\n", debugstr_a(path));
971
972 if (SUCCEEDED(SHILCreateFromPathA(path, &pidlnew, NULL)))
973 return pidlnew;
974 return NULL;
975}
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define TRACE_(x)
Definition: compat.h:76
HRESULT WINAPI SHILCreateFromPathA(LPCSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
Definition: pidl.c:380

Referenced by ILCreateFromPathAW(), and init_function_pointers().

◆ ILCreateFromPathAW()

LPITEMIDLIST WINAPI ILCreateFromPathAW ( LPCVOID  path)

Definition at line 996 of file pidl.c.

997{
998 if ( SHELL_OsIsUnicode())
999 return ILCreateFromPathW (path);
1000 return ILCreateFromPathA (path);
1001}
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
Definition: pidl.c:982
LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR path)
Definition: pidl.c:966
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130

◆ ILCreateFromPathW()

◆ ILFindChild()

PUIDLIST_RELATIVE WINAPI ILFindChild ( PIDLIST_ABSOLUTE  pidl1,
PCIDLIST_ABSOLUTE  pidl2 
)

Definition at line 641 of file pidl.c.

642{
643 LPCITEMIDLIST pidltemp1 = pidl1;
644 LPCITEMIDLIST pidltemp2 = pidl2;
646
647 TRACE("pidl1=%p pidl2=%p\n",pidl1, pidl2);
648
649 /* explorer reads from registry directly (StreamMRU),
650 so we can only check here */
651 if ((!pcheck (pidl1)) || (!pcheck (pidl2)))
652 return FALSE;
653
654 pdump (pidl1);
655 pdump (pidl2);
656
657 if (_ILIsDesktop(pidl1))
658 {
659 ret = pidl2;
660 }
661 else
662 {
663 while (pidltemp1->mkid.cb && pidltemp2->mkid.cb)
664 {
665 if (!_ILHACKCompareSimpleIds(pidltemp1, pidltemp2))
666 return FALSE;
667
668 pidltemp1 = ILGetNext(pidltemp1);
669 pidltemp2 = ILGetNext(pidltemp2);
670 ret = pidltemp2;
671 }
672
673 if (pidltemp1->mkid.cb)
674 ret = NULL; /* elements of pidl1 left*/
675 }
676 TRACE_(shell)("--- %p\n", ret);
677 return (PUIDLIST_RELATIVE)ret; /* pidl 1 is shorter */
678}
BOOL pcheck(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:349
BOOL _ILHACKCompareSimpleIds(LPCITEMIDLIST pidltemp1, LPCITEMIDLIST pidltemp2)
Definition: pidl.c:479
ITEMIDLIST_RELATIVE UNALIGNED * PUIDLIST_RELATIVE
Definition: shtypes.idl:55

Referenced by init_function_pointers(), ShellBrowser::jump_to(), and CExplorerBand::NavigateToPIDL().

◆ ILFindLastID()

◆ ILFree()

void WINAPI ILFree ( LPITEMIDLIST  pidl)

Definition at line 925 of file pidl.c.

926{
927 TRACE("(pidl=%p)\n",pidl);
928 SHFree(pidl);
929}

Referenced by CMenuBand::_CallCB(), CFSDropTarget::_DoDrop(), _ReparsePIDL(), _tmain(), CEnumMergedFolder::Begin(), CCommonFolder< TSelf, TItemId, TExtractIcon >::BindToObject(), BrowseSelectedFolder(), CShellBrowser::BrowseToPath(), BrsFolder_OnSetExpanded(), BrsFolder_Treeview_Changed(), CShellItem::Compare(), DoTestEntry(), CFontExt::Drop(), CEnumMergedFolder::DsaDeleteCallback(), ebrowser_browse_to_desktop(), ExplorerMessageLoop(), FILEDLG95_FillControls(), FILEDLG95_LOOKIN_AddItem(), FILEDLG95_LOOKIN_Clean(), FILEDLG95_LOOKIN_Init(), FILEDLG95_LOOKIN_InsertItemAfterParent(), FILEDLG95_LOOKIN_RemoveMostExpandedItem(), FILEDLG95_OnOpen(), FILEDLG95_OnOpenMultipleFiles(), FILEDLG95_OnWMCommand(), FILEDLG95_SHELL_Clean(), FILEDLG95_ValidatePathAction(), CAddressEditBox::FillOneLevel(), CShellItem::get_parent_pidl(), CShellItem::get_parent_shellfolder(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDisplayNameOf(), GetFavoritesFolder(), GetFileDialog95(), GetMergedFolder(), GetNormalAndSelectedIcons(), CMenuCallback::GetObject(), CShellItem::GetParent(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetUIObjectOf(), ICommDlgBrowser3_fnIncludeObject(), IEGetNameAndFlagsEx(), ILIsParentOrSpecialParent(), CExplorerBand::InitializeExplorerBand(), InitializeTreeView(), CExplorerBand::InsertSubitems(), CAddressEditBox::Invoke(), CDefaultContextMenu::InvokePidl(), IShellBrowserImpl_BrowseObject(), IShellBrowserImpl_ICommDlgBrowser_OnDefaultCommand(), CShellBrowser::LoadHistory(), CShellBrowser::NavigateToParent(), on_default_action(), CMenuSFToolbar::OnDeletingButton(), CShellBrowser::OnDestroy(), CDefView::OnNotify(), CExplorerBand::OnShellEvent(), CExplorerBand::OnTreeItemDeleted(), CAddressEditBox::OnWinEvent(), CExplorerBand::OnWinEvent(), CCommonFolder< TSelf, TItemId, TExtractIcon >::ParseDisplayName(), CAddressEditBox::ParseNow(), CAddressEditBox::PopulateComboBox(), CStartMenuBtnCtxMenu::QueryContextMenu(), CExplorerBand::RefreshTreePidl(), CExplorerBand::RenameItem(), RenderHDROP(), CShellLink::Reset(), RSHELL_CStartMenu_CreateInstance(), CShellItem::SetIDList(), CShellLink::SetTargetFromPIDLOrPath(), SHBindToFolderIDListParent(), SHBrowseForFolderW(), SHChangeNotify(), SHChangeNotifyRegister(), SHCreateShellItem(), SHDestroyIETHREADPARAM(), SHELL32_BindToSF(), SHELL32_CoCreateInitSF(), SHELL32_CompareChildren(), SHELL32_GetDisplayNameOfChild(), SHELL32_ParseNextElement(), SHExplorerParseCmdLine(), SHGetFileInfoW(), SHOpenNewFrame(), StartWithCommandLine(), test_basics(), test_BindToObject(), test_DataObject(), test_desktop_displaynameof(), test_desktop_IPersist(), test_FolderShortcut(), test_get_file_info_iconlist(), test_GetDisplayName(), test_GetUIObject(), test_ITEMIDLIST_format(), test_navigation(), test_parse_for_control_panel(), test_parse_for_entire_network(), test_ParseDisplayNamePBC(), test_printers_folder(), test_SHChangeNotify(), test_SHCreateDefaultContextMenu(), test_SHCreateShellItem(), test_SHCreateShellItemArray(), test_ShellItemArrayEnumItems(), test_ShellItemArrayGetAttributes(), test_ShellItemBindToHandler(), test_ShellItemCompare(), test_ShellItemGetAttributes(), test_SHGetIDListFromObject(), test_SHGetItemFromDataObject(), test_SHGetKnownFolderIDList(), test_SHGetNameFromIDList(), test_ShortcutFolder(), test_SHParseDisplayName(), test_SHSimpleIDListFromPath(), TestCommandLine(), CTravelEntry::Update(), CExplorerBand::UpdateBrowser(), CAddressEditBox::~CAddressEditBox(), CCommonFolder< TSelf, TItemId, TExtractIcon >::~CCommonFolder(), CExplorerBand::~CExplorerBand(), CMergedFolder::~CMergedFolder(), CNewMenu::~CNewMenu(), CNtObjectFolderExtractIcon::~CNtObjectFolderExtractIcon(), CRecycleBinItemContextMenu::~CRecycleBinItemContextMenu(), CRegistryFolderExtractIcon::~CRegistryFolderExtractIcon(), CShellItem::~CShellItem(), CShellLink::~CShellLink(), CStartMenuBtnCtxMenu::~CStartMenuBtnCtxMenu(), and CTravelEntry::~CTravelEntry().

◆ ILGetDisplayName()

BOOL WINAPI ILGetDisplayName ( LPCITEMIDLIST  pidl,
LPVOID  path 
)

Definition at line 174 of file pidl.c.

175{
176 TRACE_(shell)("%p %p\n", pidl, path);
177
178 if (SHELL_OsIsUnicode())
181}
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
Definition: pidl.c:91
static BOOL ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
Definition: pidl.c:74
#define ILGDN_FORPARSING
Definition: undocshell.h:68

Referenced by SHOpenFolderWindow().

◆ ILGetDisplayNameEx()

BOOL WINAPI ILGetDisplayNameEx ( LPSHELLFOLDER  psf,
LPCITEMIDLIST  pidl,
LPVOID  path,
DWORD  type 
)

Definition at line 162 of file pidl.c.

163{
164 TRACE_(shell)("%p %p %p %d\n", psf, pidl, path, type);
165
166 if (SHELL_OsIsUnicode())
167 return ILGetDisplayNameExW(psf, pidl, path, type);
168 return ILGetDisplayNameExA(psf, pidl, path, type);
169}

Referenced by CBandSiteMenu::_AddISFBandToMenu(), CISFBand::GetBandInfo(), and CTravelEntry::GetToolTipText().

◆ ILGetDisplayNameExA()

static BOOL ILGetDisplayNameExA ( LPSHELLFOLDER  psf,
LPCITEMIDLIST  pidl,
LPSTR  path,
DWORD  type 
)
static

Definition at line 74 of file pidl.c.

75{
76 BOOL ret = FALSE;
77 WCHAR wPath[MAX_PATH];
78
79 TRACE("%p %p %p %d\n", psf, pidl, path, type);
80
81 if (!pidl || !path)
82 return FALSE;
83
84 ret = ILGetDisplayNameExW(psf, pidl, wPath, type);
86 TRACE("%p %p %s\n", psf, pidl, debugstr_a(path));
87
88 return ret;
89}

Referenced by ILGetDisplayName(), and ILGetDisplayNameEx().

◆ ILGetDisplayNameExW()

BOOL ILGetDisplayNameExW ( LPSHELLFOLDER  psf,
LPCITEMIDLIST  pidl,
LPWSTR  path,
DWORD  type 
)

Definition at line 91 of file pidl.c.

92{
93 LPSHELLFOLDER psfParent, lsf = psf;
95 LPCITEMIDLIST pidllast;
96 STRRET strret;
97 DWORD flag;
98
99 TRACE("%p %p %p %x\n", psf, pidl, path, type);
100
101 if (!pidl || !path)
102 return FALSE;
103
104 if (!lsf)
105 {
106 ret = SHGetDesktopFolder(&lsf);
107 if (FAILED(ret))
108 return FALSE;
109 }
110
111 switch (type)
112 {
113 case ILGDN_FORPARSING:
114 flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
115 break;
116 case ILGDN_NORMAL:
117 flag = SHGDN_NORMAL;
118 break;
119 case ILGDN_INFOLDER:
120 flag = SHGDN_INFOLDER;
121 break;
122 default:
123 FIXME("Unknown type parameter = %x\n", type);
124 flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
125 break;
126 }
127
128 if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
129 {
130 ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag, &strret);
131 if (SUCCEEDED(ret))
132 {
133 if(!StrRetToStrNW(path, MAX_PATH, &strret, pidl))
134 ret = E_FAIL;
135 }
136 }
137 else
138 {
139 ret = SHBindToParent(pidl, &IID_IShellFolder, (LPVOID*)&psfParent, &pidllast);
140 if (SUCCEEDED(ret))
141 {
142 ret = IShellFolder_GetDisplayNameOf(psfParent, pidllast, flag, &strret);
143 if (SUCCEEDED(ret))
144 {
145 if(!StrRetToStrNW(path, MAX_PATH, &strret, pidllast))
146 ret = E_FAIL;
147 }
148 IShellFolder_Release(psfParent);
149 }
150 }
151
152 TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
153
154 if (!psf)
155 IShellFolder_Release(lsf);
156 return SUCCEEDED(ret);
157}
#define FIXME(fmt,...)
Definition: debug.h:111
#define NO_ERROR
Definition: dderror.h:5
#define E_FAIL
Definition: ddrawi.h:102
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean flag
Definition: glfuncs.h:52
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1337
BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
Definition: shellstring.c:85
#define ILGDN_NORMAL
Definition: undocshell.h:69
#define ILGDN_INFOLDER
Definition: undocshell.h:70

Referenced by CFSExtractIcon_CreateInstance(), FM_InitMenuPopup(), CFolder::get_Title(), getIconLocationForDrive(), getIconLocationForFolder(), ILGetDisplayName(), ILGetDisplayNameEx(), ILGetDisplayNameExA(), and IShellLink_ConstructFromFile().

◆ ILGetNext()

◆ ILGetSize()

UINT WINAPI ILGetSize ( LPCITEMIDLIST  pidl)

Definition at line 815 of file pidl.c.

816{
817 LPCSHITEMID si;
818 UINT len=0;
819
820 if (pidl)
821 {
822 si = &(pidl->mkid);
823
824 while (si->cb)
825 {
826 len += si->cb;
827 si = (LPCSHITEMID)(((const BYTE*)si)+si->cb);
828 }
829 len += 2;
830 }
831 TRACE("pidl=%p size=%u\n",pidl, len);
832 return len;
833}
const SHITEMID * LPCSHITEMID
Definition: shtypes.idl:30
WORD cb
Definition: shtypes.idl:27

◆ ILGlobalClone()

LPITEMIDLIST WINAPI ILGlobalClone ( LPCITEMIDLIST  pidl)

Definition at line 460 of file pidl.c.

461{
462 DWORD len;
463 LPITEMIDLIST newpidl;
464
465 if (!pidl)
466 return NULL;
467
468 len = ILGetSize(pidl);
469 newpidl = Alloc(len);
470 if (newpidl)
471 memcpy(newpidl,pidl,len);
472
473 TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
474 pdump(pidl);
475
476 return newpidl;
477}
LPVOID WINAPI Alloc(INT)

◆ ILGlobalFree()

void WINAPI ILGlobalFree ( LPITEMIDLIST  pidl)

Definition at line 945 of file pidl.c.

946{
947 TRACE("%p\n", pidl);
948
949 Free(pidl);
950}
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
Definition: exfuncs.h:815

◆ ILIsEqual()

BOOL WINAPI ILIsEqual ( LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)

Definition at line 535 of file pidl.c.

536{
537 LPCITEMIDLIST pidltemp1 = pidl1;
538 LPCITEMIDLIST pidltemp2 = pidl2;
539
540 TRACE("pidl1=%p pidl2=%p\n",pidl1, pidl2);
541
542 /*
543 * Explorer reads from registry directly (StreamMRU),
544 * so we can only check here
545 */
546 if (!pcheck(pidl1) || !pcheck (pidl2))
547 return FALSE;
548
549 pdump (pidl1);
550 pdump (pidl2);
551
552 if (!pidl1 || !pidl2)
553 return FALSE;
554
555 while (pidltemp1->mkid.cb && pidltemp2->mkid.cb)
556 {
557 if (!_ILHACKCompareSimpleIds(pidltemp1, pidltemp2))
558 return FALSE;
559
560 pidltemp1 = ILGetNext(pidltemp1);
561 pidltemp2 = ILGetNext(pidltemp2);
562 }
563
564 if (!pidltemp1->mkid.cb && !pidltemp2->mkid.cb)
565 return TRUE;
566
567 return FALSE;
568}

Referenced by BrowseCallbackProc(), DoGetAliasPIDLs(), FILEDLG95_LOOKIN_Init(), FILEDLG95_LOOKIN_SearchItem(), FILEDLG95_OnOpen(), CAddressEditBox::FillOneLevel(), init_function_pointers(), IShellBrowserImpl_BrowseObject(), CDefView::LV_FindItemByPidl(), CAddressEditBox::PopulateComboBox(), CChangeNotifyServer::ShouldNotify(), test_FolderShortcut(), test_printers_folder(), test_SHCreateShellItem(), test_SHCreateShellItemArray(), test_ShellItemBindToHandler(), test_SHGetIDListFromObject(), test_SHParseDisplayName(), and TestCommandLine().

◆ ILIsParent()

BOOL WINAPI ILIsParent ( LPCITEMIDLIST  pidlParent,
LPCITEMIDLIST  pidlChild,
BOOL  bImmediate 
)

Definition at line 592 of file pidl.c.

593{
594 LPCITEMIDLIST pParent = pidlParent;
595 LPCITEMIDLIST pChild = pidlChild;
596
597 TRACE("%p %p %x\n", pidlParent, pidlChild, bImmediate);
598
599 if (!pParent || !pChild)
600 return FALSE;
601
602 while (pParent->mkid.cb && pChild->mkid.cb)
603 {
604 if (!_ILHACKCompareSimpleIds(pParent, pChild))
605 return FALSE;
606
608 pChild = ILGetNext(pChild);
609 }
610
611 /* child has shorter name than parent */
612 if (pParent->mkid.cb)
613 return FALSE;
614
615 /* not immediate descent */
616 if ((!pChild->mkid.cb || ILGetNext(pChild)->mkid.cb) && bImmediate)
617 return FALSE;
618
619 return TRUE;
620}
FxObject * pParent
Definition: fxdpcapi.cpp:86

Referenced by ILIsParentOrSpecialParent(), init_function_pointers(), and CChangeNotifyServer::ShouldNotify().

◆ ILLoadFromStream()

HRESULT WINAPI ILLoadFromStream ( IStream pStream,
LPITEMIDLIST ppPidl 
)

Definition at line 284 of file pidl.c.

285{
286 WORD wLen = 0;
287 DWORD dwBytesRead;
289
290
291 TRACE_(shell)("%p %p\n", pStream , ppPidl);
292
293 SHFree(*ppPidl);
294 *ppPidl = NULL;
295
296 IStream_AddRef (pStream);
297
298 if (SUCCEEDED(IStream_Read(pStream, &wLen, 2, &dwBytesRead)))
299 {
300 TRACE("PIDL length is %d\n", wLen);
301 if (wLen != 0)
302 {
303 *ppPidl = SHAlloc (wLen);
304 if (SUCCEEDED(IStream_Read(pStream, *ppPidl , wLen, &dwBytesRead)))
305 {
306 TRACE("Stream read OK\n");
307 ret = S_OK;
308 }
309 else
310 {
311 WARN("reading pidl failed\n");
312 SHFree(*ppPidl);
313 *ppPidl = NULL;
314 }
315 }
316 else
317 {
318 *ppPidl = NULL;
319 ret = S_OK;
320 }
321 }
322
323 /* we are not yet fully compatible */
324 if (*ppPidl && !pcheck(*ppPidl))
325 {
326 WARN("Check failed\n");
327 SHFree(*ppPidl);
328 *ppPidl = NULL;
329 }
330
331 IStream_Release (pStream);
332 TRACE("done\n");
333 return ret;
334}

Referenced by CShellLink::Load().

◆ ILRemoveLastID()

◆ ILSaveToStream()

HRESULT WINAPI ILSaveToStream ( IStream pStream,
LPCITEMIDLIST  pPidl 
)

Definition at line 342 of file pidl.c.

343{
344 WORD wLen = 0;
346
347 TRACE_(shell)("%p %p\n", pStream, pPidl);
348
349 IStream_AddRef (pStream);
350
351 wLen = ILGetSize(pPidl);
352
353 if (SUCCEEDED(IStream_Write(pStream, &wLen, 2, NULL)))
354 {
355 if (SUCCEEDED(IStream_Write(pStream, pPidl, wLen, NULL)))
356 ret = S_OK;
357 }
358 IStream_Release (pStream);
359
360 return ret;
361}

Referenced by init_function_pointers(), and CShellLink::Save().

◆ SHBindToParent()

HRESULT WINAPI SHBindToParent ( LPCITEMIDLIST  pidl,
REFIID  riid,
LPVOID ppv,
LPCITEMIDLIST ppidlLast 
)

Definition at line 1337 of file pidl.c.

1338{
1339 IShellFolder * psfDesktop;
1341
1342 TRACE_(shell)("pidl=%p\n", pidl);
1343 pdump(pidl);
1344
1345 if (!pidl || !ppv)
1346 return E_INVALIDARG;
1347
1348 *ppv = NULL;
1349 if (ppidlLast)
1350 *ppidlLast = NULL;
1351
1352 hr = SHGetDesktopFolder(&psfDesktop);
1353 if (FAILED(hr))
1354 return hr;
1355
1356 if (_ILIsPidlSimple(pidl))
1357 {
1358 /* we are on desktop level */
1359 hr = IShellFolder_QueryInterface(psfDesktop, riid, ppv);
1360 }
1361 else
1362 {
1363 LPITEMIDLIST pidlParent = ILClone(pidl);
1364 ILRemoveLastID(pidlParent);
1365 hr = IShellFolder_BindToObject(psfDesktop, pidlParent, NULL, riid, ppv);
1366 SHFree (pidlParent);
1367 }
1368
1369 IShellFolder_Release(psfDesktop);
1370
1371 if (SUCCEEDED(hr) && ppidlLast)
1372 *ppidlLast = ILFindLastID(pidl);
1373
1374 TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08x\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
1375 return hr;
1376}
REFIID LPVOID * ppv
Definition: atlbase.h:39
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:212
BOOL _ILIsPidlSimple(LPCITEMIDLIST pidl)
Definition: pidl.c:2006
HRESULT hr
Definition: shlfolder.c:183

Referenced by _ReparsePIDL(), CAddressEditBox::AddComboBoxItem(), CShellBrowser::BrowseToPath(), CreateIDataObject(), Entry::do_context_menu(), CShellLink::DragEnter(), CExplorerBand::DragOver(), CAddressEditBox::Execute(), CFolderItem::get_Name(), CFSFolder::GetAttributesOf(), GetDisplayName(), CSendToMenu::GetUIObjectFromPidl(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetUIObjectOf(), GetUIObjectOfAbsPidl(), ILGetDisplayNameExW(), CFolderItemVerbs::Init(), Initialize(), InitializeShellFolder_(), CExplorerBand::InsertItem(), CExplorerBand::OnContextMenu(), CExplorerBand::OnTreeItemDragging(), CExplorerBand::OnWinEvent(), r_verify_pidl(), CAddressEditBox::RefreshAddress(), RSHELL_CStartMenu_CreateInstance(), SHELL_execute(), SHELL_PidlGetIconLocationW(), shellex_get_contextmenu(), shellex_get_dataobj(), SHGetFileInfoW(), SHGetNameFromIDList(), SHGetPathFromIDListW(), START_TEST(), test_AttributesRegistration(), test_GetDisplayName(), test_GetUIObject(), and test_SHCreateDefaultContextMenu().

◆ SHCloneSpecialIDList()

LPITEMIDLIST WINAPI SHCloneSpecialIDList ( HWND  hwndOwner,
int  nFolder,
BOOL  fCreate 
)

Definition at line 434 of file pidl.c.

435{
436 LPITEMIDLIST ppidl;
437 TRACE_(shell)("(hwnd=%p,csidl=0x%x,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
438
439 if (fCreate)
441
442 SHGetSpecialFolderLocation(hwndOwner, nFolder, &ppidl);
443 return ppidl;
444}
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3194
#define CSIDL_FLAG_CREATE
_In_ int nFolder
Definition: shlobj.h:1444

Referenced by CStartMenuBtnCtxMenu::QueryContextMenu().

◆ SHGetDataFromIDListA()

HRESULT WINAPI SHGetDataFromIDListA ( LPSHELLFOLDER  psf,
LPCITEMIDLIST  pidl,
int  nFormat,
LPVOID  dest,
int  len 
)

Definition at line 1150 of file pidl.c.

1152{
1153 LPSTR filename, shortname;
1155
1156 TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
1157
1158 pdump(pidl);
1159 if (!psf || !dest)
1160 return E_INVALIDARG;
1161
1162 switch (nFormat)
1163 {
1164 case SHGDFIL_FINDDATA:
1165 pfd = dest;
1166
1167 if (_ILIsDrive(pidl) || _ILIsSpecialFolder(pidl))
1168 return E_INVALIDARG;
1169
1170 if (len < sizeof(WIN32_FIND_DATAA))
1171 return E_INVALIDARG;
1172
1173 ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
1174 _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
1175 pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
1176 pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
1177
1179 shortname = _ILGetSTextPointer(pidl);
1180
1181 if (filename)
1182 lstrcpynA(pfd->cFileName, filename, sizeof(pfd->cFileName));
1183 else
1184 pfd->cFileName[0] = '\0';
1185
1186 if (shortname)
1187 lstrcpynA(pfd->cAlternateFileName, shortname, sizeof(pfd->cAlternateFileName));
1188 else
1189 pfd->cAlternateFileName[0] = '\0';
1190 return S_OK;
1191
1194 FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
1195 break;
1196
1197 default:
1198 ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
1199 }
1200
1201 return E_INVALIDARG;
1202}
#define FIXME_(x)
Definition: compat.h:77
const char * filename
Definition: ioapi.h:137
static char * dest
Definition: rtl.c:135
static LPSTR _ILGetSTextPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2297
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2606
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2466
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:1953
#define ERR_(ch,...)
Definition: debug.h:156
#define SHGDFIL_FINDDATA
Definition: shlobj.h:1377
#define SHGDFIL_NETRESOURCE
Definition: shlobj.h:1378
#define SHGDFIL_DESCRIPTIONID
Definition: shlobj.h:1379
static PIXELFORMATDESCRIPTOR pfd
Definition: ssstars.c:67

◆ SHGetDataFromIDListW()

HRESULT WINAPI SHGetDataFromIDListW ( LPSHELLFOLDER  psf,
LPCITEMIDLIST  pidl,
int  nFormat,
LPVOID  dest,
int  len 
)

Definition at line 1208 of file pidl.c.

1210{
1211 LPSTR filename, shortname;
1213
1214 TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
1215
1216 pdump(pidl);
1217
1218 if (!psf || !dest)
1219 return E_INVALIDARG;
1220
1221 switch (nFormat)
1222 {
1223 case SHGDFIL_FINDDATA:
1224 pfd = dest;
1225
1226 if (_ILIsDrive(pidl))
1227 return E_INVALIDARG;
1228
1229 if (len < sizeof(WIN32_FIND_DATAW))
1230 return E_INVALIDARG;
1231
1232 ZeroMemory(pfd, sizeof (WIN32_FIND_DATAW));
1233 _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
1234 pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
1235 pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
1236
1238 shortname = _ILGetSTextPointer(pidl);
1239
1240 if (!filename)
1241 pfd->cFileName[0] = '\0';
1242 else if (!MultiByteToWideChar(CP_ACP, 0, filename, -1, pfd->cFileName, MAX_PATH))
1243 pfd->cFileName[MAX_PATH-1] = 0;
1244
1245 if (!shortname)
1246 pfd->cAlternateFileName[0] = '\0';
1247 else if (!MultiByteToWideChar(CP_ACP, 0, shortname, -1, pfd->cAlternateFileName, 14))
1248 pfd->cAlternateFileName[13] = 0;
1249 return S_OK;
1250
1253 FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
1254 break;
1255
1256 default:
1257 ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
1258 }
1259
1260 return E_INVALIDARG;
1261}

◆ SHGetIDListFromObject()

HRESULT WINAPI SHGetIDListFromObject ( IUnknown punk,
PIDLIST_ABSOLUTE ppidl 
)

Definition at line 1486 of file pidl.c.

1487{
1488 IPersistIDList *ppersidl;
1489 IPersistFolder2 *ppf2;
1490 IDataObject *pdo;
1491 IFolderView *pfv;
1492 HRESULT ret;
1493
1494 if(!punk)
1495 return E_NOINTERFACE;
1496
1497 *ppidl = NULL;
1498
1499 /* Try IPersistIDList */
1500 ret = IUnknown_QueryInterface(punk, &IID_IPersistIDList, (void**)&ppersidl);
1501 if(SUCCEEDED(ret))
1502 {
1503 TRACE("IPersistIDList (%p)\n", ppersidl);
1504 ret = IPersistIDList_GetIDList(ppersidl, ppidl);
1505 IPersistIDList_Release(ppersidl);
1506 if(SUCCEEDED(ret))
1507 return ret;
1508 }
1509
1510 /* Try IPersistFolder2 */
1511 ret = IUnknown_QueryInterface(punk, &IID_IPersistFolder2, (void**)&ppf2);
1512 if(SUCCEEDED(ret))
1513 {
1514 TRACE("IPersistFolder2 (%p)\n", ppf2);
1515 ret = IPersistFolder2_GetCurFolder(ppf2, ppidl);
1516 IPersistFolder2_Release(ppf2);
1517 if(SUCCEEDED(ret))
1518 return ret;
1519 }
1520
1521 /* Try IDataObject */
1522 ret = IUnknown_QueryInterface(punk, &IID_IDataObject, (void**)&pdo);
1523 if(SUCCEEDED(ret))
1524 {
1525 IShellItem *psi;
1526 TRACE("IDataObject (%p)\n", pdo);
1528 &IID_IShellItem, (void**)&psi);
1529 if(SUCCEEDED(ret))
1530 {
1531 ret = SHGetIDListFromObject((IUnknown*)psi, ppidl);
1532 IShellItem_Release(psi);
1533 }
1534 IDataObject_Release(pdo);
1535
1536 if(SUCCEEDED(ret))
1537 return ret;
1538 }
1539
1540 /* Try IFolderView */
1541 ret = IUnknown_QueryInterface(punk, &IID_IFolderView, (void**)&pfv);
1542 if(SUCCEEDED(ret))
1543 {
1544 IShellFolder *psf;
1545 TRACE("IFolderView (%p)\n", pfv);
1546 ret = IFolderView_GetFolder(pfv, &IID_IShellFolder, (void**)&psf);
1547 if(SUCCEEDED(ret))
1548 {
1549 /* We might be able to get IPersistFolder2 from a shellfolder. */
1550 ret = SHGetIDListFromObject((IUnknown*)psf, ppidl);
1551 }
1552 IFolderView_Release(pfv);
1553 return ret;
1554 }
1555
1556 return ret;
1557}
const GUID IID_IDataObject
HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
Definition: pidl.c:1486
HRESULT WINAPI SHGetItemFromDataObject(IDataObject *pdtobj, DATAOBJ_GET_ITEM_FLAGS dwFlags, REFIID riid, void **ppv)
#define E_NOINTERFACE
Definition: winerror.h:2364

Referenced by ICommDlgBrowser3_fnIncludeObject(), init_function_pointers(), on_default_action(), and SHGetIDListFromObject().

◆ SHGetNameFromIDList()

HRESULT WINAPI SHGetNameFromIDList ( PCIDLIST_ABSOLUTE  pidl,
SIGDN  sigdnName,
PWSTR ppszName 
)

Definition at line 1423 of file pidl.c.

1424{
1425 IShellFolder *psfparent;
1426 LPCITEMIDLIST child_pidl;
1427 STRRET disp_name;
1428 HRESULT ret;
1429
1430 TRACE("%p 0x%08x %p\n", pidl, sigdnName, ppszName);
1431
1432 *ppszName = NULL;
1433 ret = SHBindToParent(pidl, &IID_IShellFolder, (void**)&psfparent, &child_pidl);
1434 if(SUCCEEDED(ret))
1435 {
1436 switch(sigdnName)
1437 {
1438 /* sigdnName & 0xffff */
1439 case SIGDN_NORMALDISPLAY: /* SHGDN_NORMAL */
1440 case SIGDN_PARENTRELATIVEPARSING: /* SHGDN_INFOLDER | SHGDN_FORPARSING */
1441 case SIGDN_PARENTRELATIVEEDITING: /* SHGDN_INFOLDER | SHGDN_FOREDITING */
1442 case SIGDN_DESKTOPABSOLUTEPARSING: /* SHGDN_FORPARSING */
1443 case SIGDN_DESKTOPABSOLUTEEDITING: /* SHGDN_FOREDITING | SHGDN_FORADDRESSBAR*/
1444 case SIGDN_PARENTRELATIVEFORADDRESSBAR: /* SIGDN_INFOLDER | SHGDN_FORADDRESSBAR */
1445 case SIGDN_PARENTRELATIVE: /* SIGDN_INFOLDER */
1446
1447 disp_name.uType = STRRET_WSTR;
1448 ret = IShellFolder_GetDisplayNameOf(psfparent, child_pidl,
1449 sigdnName & 0xffff,
1450 &disp_name);
1451 if(SUCCEEDED(ret))
1452 ret = StrRetToStrW(&disp_name, pidl, ppszName);
1453
1454 break;
1455
1456 case SIGDN_FILESYSPATH:
1458 if(SHGetPathFromIDListW(pidl, *ppszName))
1459 {
1460 TRACE("Got string %s\n", debugstr_w(*ppszName));
1461 ret = S_OK;
1462 }
1463 else
1464 {
1466 ret = E_INVALIDARG;
1467 }
1468 break;
1469
1470 case SIGDN_URL:
1471 default:
1472 FIXME("Unsupported SIGDN %x\n", sigdnName);
1473 ret = E_FAIL;
1474 }
1475
1476 IShellFolder_Release(psfparent);
1477 }
1478 return ret;
1479}
HRESULT WINAPI StrRetToStrW(LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *ppszName)
Definition: string.c:1623
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1294
SIGDN PWSTR * ppszName
Definition: shobjidl.idl:595
SIGDN sigdnName
Definition: shobjidl.idl:595
@ STRRET_WSTR
Definition: shtypes.idl:85
UINT uType
Definition: shtypes.idl:93

Referenced by _ShowPropertiesDialogThread(), CFSFolder::CallBack(), CShellItem::GetDisplayName(), and init_function_pointers().

◆ SHGetPathFromIDListA()

BOOL WINAPI SHGetPathFromIDListA ( LPCITEMIDLIST  pidl,
LPSTR  pszPath 
)

Definition at line 1278 of file pidl.c.

1279{
1280 WCHAR wszPath[MAX_PATH];
1281 BOOL bSuccess;
1282
1283 bSuccess = SHGetPathFromIDListW(pidl, wszPath);
1284 WideCharToMultiByte(CP_ACP, 0, wszPath, -1, pszPath, MAX_PATH, NULL, NULL);
1285
1286 return bSuccess;
1287}
static BOOLEAN bSuccess
Definition: drive.cpp:433

Referenced by CStartMenuBtnCtxMenu::InvokeCommand(), RenderFILENAMEA(), SHAddToRecentDocs(), test_click_make_new_folder_button(), and test_get_set().

◆ SHGetPathFromIDListW()

BOOL WINAPI SHGetPathFromIDListW ( LPCITEMIDLIST  pidl,
LPWSTR  pszPath 
)

Definition at line 1294 of file pidl.c.

1295{
1296 HRESULT hr;
1297 LPCITEMIDLIST pidlLast;
1298 LPSHELLFOLDER psfFolder;
1300 STRRET strret;
1301
1302 TRACE_(shell)("(pidl=%p,%p)\n", pidl, pszPath);
1303 pdump(pidl);
1304
1305 *pszPath = '\0';
1306 if (!pidl)
1307 return FALSE;
1308
1309 hr = SHBindToParent(pidl, &IID_IShellFolder, (VOID**)&psfFolder, &pidlLast);
1310 if (FAILED(hr))
1311 {
1312 ERR("SHBindToParent failed: %x\n", hr);
1313 return FALSE;
1314 }
1315
1316 dwAttributes = SFGAO_FILESYSTEM;
1317 hr = IShellFolder_GetAttributesOf(psfFolder, 1, &pidlLast, &dwAttributes);
1318 if (FAILED(hr) || !(dwAttributes & SFGAO_FILESYSTEM)) {
1319 WARN("Wrong dwAttributes or GetAttributesOf failed: %x\n", hr);
1320 IShellFolder_Release(psfFolder);
1321 return FALSE;
1322 }
1323
1324 hr = IShellFolder_GetDisplayNameOf(psfFolder, pidlLast, SHGDN_FORPARSING, &strret);
1325 IShellFolder_Release(psfFolder);
1326 if (FAILED(hr)) return FALSE;
1327
1328 hr = StrRetToBufW(&strret, pidlLast, pszPath, MAX_PATH);
1329
1330 TRACE_(shell)("-- %s, 0x%08x\n",debugstr_w(pszPath), hr);
1331 return SUCCEEDED(hr);
1332}
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1522
DWORD dwAttributes
Definition: vdmdbg.h:34

Referenced by BtrfsSend::AddClone(), BrowseCallbackProc(), BtrfsSend::BrowseParent(), BrsFolder_NewFolder(), BrsFolder_OnCommand(), BrsFolder_Treeview_Rename(), ChooseFolder(), CHSourceDlgProc(), CreateDirectoryWatcherFromRegEntry(), CNewMenu::CreateNewFolder(), CNewMenu::CreateNewItem(), CCopyToMenu::DoCopyToFolder(), CDefaultContextMenu::DoCreateNewFolder(), DoGetDir(), CCopyToMenu::DoGetFileTitle(), CMoveToMenu::DoGetFileTitle(), DoInitAliasPIDLs(), CMoveToMenu::DoMoveToFolder(), DoPathes(), CCopyToMenu::DoRealCopy(), CMoveToMenu::DoRealMove(), DoTestEntry(), DoUpdateAutoCompleteWithCWD(), CFontExt::Drop(), CMyDocsDropHandler::Drop(), CDeskLinkDropHandler::Drop(), CAddressEditBox::ExecuteCommandLine(), CACListISF::Expand(), FileExtractDialogWndProc(), CSearchBar::GetAddressEditBoxPath(), CFSFolder::GetCustomViewInfo(), GetIconOverlay(), CShellLink::GetPath(), ILIsParentOrSpecialParent(), CFontExt::Initialize(), CZipFolder::Initialize(), CFSFolder::Initialize(), BtrfsContextMenu::Initialize(), COpenWithMenu::Initialize(), CFSFolder::InitializeEx(), CDefaultContextMenu::InvokePidl(), LoadRdpSettingsFromFile(), CZipExtract::CExtractSettingsPage::OnBrowse(), CDefView::OnNotify(), CAddressEditBox::RefreshAddress(), RenderFILENAMEW(), RenderHDROP(), CShellLink::Resolve(), SaveRdpSettingsToFile(), CShellLink::SetTargetFromPIDLOrPath(), SHAddToRecentDocs(), SHELL_execute(), SHGetFileInfoW(), SHGetNameFromIDList(), SHGetPathFromIDListA(), SHGetPathFromIDListWrapW(), test_EnumObjects(), test_GetDisplayName(), test_ParseDisplayName(), test_SHGetNameFromIDList(), test_SHGetPathFromIDList(), TestCommandLine(), TestHIDA(), WelcomeDlgProc(), and WshCollection_Item().

◆ SHGetRealIDL()

HRESULT WINAPI SHGetRealIDL ( LPSHELLFOLDER  lpsf,
LPCITEMIDLIST  pidlSimple,
LPITEMIDLIST pidlReal 
)

Definition at line 742 of file pidl.c.

743{
744 IDataObject* pDataObj;
745 HRESULT hr;
746
747 hr = IShellFolder_GetUIObjectOf(lpsf, 0, 1, &pidlSimple,
748 &IID_IDataObject, 0, (LPVOID*)&pDataObj);
749 if (SUCCEEDED(hr))
750 {
751 STGMEDIUM medium;
752 FORMATETC fmt;
753
755 fmt.ptd = NULL;
756 fmt.dwAspect = DVASPECT_CONTENT;
757 fmt.lindex = -1;
758 fmt.tymed = TYMED_HGLOBAL;
759
760 hr = IDataObject_GetData(pDataObj, &fmt, &medium);
761
762 IDataObject_Release(pDataObj);
763
764 if (SUCCEEDED(hr))
765 {
766 /*assert(pida->cidl==1);*/
767 LPIDA pida = GlobalLock(medium.u.hGlobal);
768
769 LPCITEMIDLIST pidl_folder = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]);
770 LPCITEMIDLIST pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[1]);
771
772 *pidlReal = ILCombine(pidl_folder, pidl_child);
773
774 if (!*pidlReal)
776
777 GlobalUnlock(medium.u.hGlobal);
778 GlobalFree(medium.u.hGlobal);
779 }
780 }
781
782 return hr;
783}
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
static const WCHAR CFSTR_SHELLIDLISTW[]
Definition: shlobj.h:433
Definition: shlobj.h:499
UINT aoffset[1]
Definition: shlobj.h:500
Definition: dsound.c:943
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)

◆ SHILCreateFromPathA()

HRESULT WINAPI SHILCreateFromPathA ( LPCSTR  path,
LPITEMIDLIST ppidl,
DWORD attributes 
)

Definition at line 380 of file pidl.c.

381{
382 WCHAR lpszDisplayName[MAX_PATH];
383
384 TRACE_(shell)("%s %p 0x%08x\n", path, ppidl, attributes ? *attributes : 0);
385
386 if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName, MAX_PATH))
387 lpszDisplayName[MAX_PATH-1] = 0;
388
389 return SHILCreateFromPathW(lpszDisplayName, ppidl, attributes);
390}

Referenced by ILCreateFromPathA(), and SHILCreateFromPathAW().

◆ SHILCreateFromPathAW()

HRESULT WINAPI SHILCreateFromPathAW ( LPCVOID  path,
LPITEMIDLIST ppidl,
DWORD attributes 
)

Definition at line 408 of file pidl.c.

409{
410 if ( SHELL_OsIsUnicode())
411 return SHILCreateFromPathW (path, ppidl, attributes);
412 return SHILCreateFromPathA (path, ppidl, attributes);
413}

◆ SHILCreateFromPathW()

HRESULT WINAPI SHILCreateFromPathW ( LPCWSTR  path,
LPITEMIDLIST ppidl,
DWORD attributes 
)

Definition at line 392 of file pidl.c.

393{
394 LPSHELLFOLDER sf;
395 DWORD pchEaten;
397
398 TRACE_(shell)("%s %p 0x%08x\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
399
400 if (SUCCEEDED (SHGetDesktopFolder(&sf)))
401 {
402 ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path, &pchEaten, ppidl, attributes);
403 IShellFolder_Release(sf);
404 }
405 return ret;
406}

Referenced by CDefaultContextMenu::DoCreateNewFolder(), ILCreateFromPathW(), CNewMenu::SelectNewItem(), CShellLink::SetTargetFromPIDLOrPath(), SHGetFileInfoW(), SHGetFolderLocation(), SHILCreateFromPathA(), SHILCreateFromPathAW(), and VariantToIdlist().

◆ SHLogILFromFSIL()

LPITEMIDLIST WINAPI SHLogILFromFSIL ( LPITEMIDLIST  pidl)

Definition at line 792 of file pidl.c.

793{
794 FIXME("(pidl=%p)\n",pidl);
795
796 pdump(pidl);
797
798 return 0;
799}

◆ SHParseDisplayName()

HRESULT WINAPI SHParseDisplayName ( LPCWSTR  pszName,
IBindCtx pbc,
LPITEMIDLIST ppidl,
SFGAOF  sfgaoIn,
SFGAOF psfgaoOut 
)

Definition at line 1381 of file pidl.c.

1383{
1384 IShellFolder *psfDesktop;
1386 ULONG dwAttr=sfgaoIn;
1387
1388 if(!ppidl)
1389 return E_INVALIDARG;
1390
1391 if (!pszName)
1392 {
1393 *ppidl = NULL;
1394 return E_INVALIDARG;
1395 }
1396
1397 hr = SHGetDesktopFolder(&psfDesktop);
1398 if (FAILED(hr))
1399 {
1400 *ppidl = NULL;
1401 return hr;
1402 }
1403
1404 hr = IShellFolder_ParseDisplayName(psfDesktop, (HWND)NULL, pbc, (LPOLESTR)pszName, (ULONG *)NULL, ppidl, &dwAttr);
1405
1406 IShellFolder_Release(psfDesktop);
1407
1408 if (SUCCEEDED(hr))
1409 {
1410 if (psfgaoOut) *psfgaoOut = dwAttr;
1411 }
1412 else
1413 {
1414 *ppidl = NULL;
1415 }
1416
1417 return hr;
1418}
uint32_t ULONG
Definition: typedefs.h:59

Referenced by BtrfsSend::AddClone(), BtrfsSend::BrowseParent(), CreateIDataObject(), CACListISF::Expand(), filedlg_collect_places_pidls(), CZipFolder::Initialize(), InitializeShellFolder_(), CSearchBar::OnSearchButtonClicked(), PathToIDList(), shellex_get_contextmenu(), START_TEST(), test_ACListISF_CURRENTDIR(), test_ACListISF_FILESYSDIRS(), test_ACListISF_FILESYSONLY(), test_ACListISF_MYCOMPUTER(), test_ACListISF_NONE(), test_MultipleFiles(), and test_SHParseDisplayName().

◆ SHSimpleIDListFromPathA()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathA ( LPCSTR  lpszPath)

Definition at line 1089 of file pidl.c.

1090{
1091 LPITEMIDLIST pidl = NULL;
1092 LPWSTR wPath = NULL;
1093 int len;
1094
1095 TRACE("%s\n", debugstr_a(lpszPath));
1096
1097 if (lpszPath)
1098 {
1099 len = MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, NULL, 0);
1100 wPath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1101 MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, wPath, len);
1102 }
1103#ifdef __REACTOS__
1104 // FIXME: Needs folder attribute
1105 if (PathFileExistsW(wPath))
1106 {
1107 pidl = ILCreateFromPathW(wPath);
1108 HeapFree(GetProcessHeap(), 0, wPath);
1109 return pidl;
1110 }
1111#endif
1112
1113 _ILParsePathW(wPath, NULL, TRUE, &pidl, NULL);
1114
1115 HeapFree(GetProcessHeap(), 0, wPath);
1116 TRACE("%s %p\n", debugstr_a(lpszPath), pidl);
1117 return pidl;
1118}
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1777
static HRESULT _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile, BOOL bBindCtx, LPITEMIDLIST *ppidl, LPDWORD prgfInOut)
Definition: pidl.c:1030

Referenced by SHSimpleIDListFromPathAW().

◆ SHSimpleIDListFromPathAW()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW ( LPCVOID  lpszPath)

Definition at line 1136 of file pidl.c.

1137{
1138 if ( SHELL_OsIsUnicode())
1139 return SHSimpleIDListFromPathW (lpszPath);
1140 return SHSimpleIDListFromPathA (lpszPath);
1141}
LPITEMIDLIST WINAPI SHSimpleIDListFromPathA(LPCSTR lpszPath)
Definition: pidl.c:1089
LPITEMIDLIST WINAPI SHSimpleIDListFromPathW(LPCWSTR lpszPath)
Definition: pidl.c:1120

◆ SHSimpleIDListFromPathW()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathW ( LPCWSTR  lpszPath)

Definition at line 1120 of file pidl.c.

1121{
1122 LPITEMIDLIST pidl = NULL;
1123
1124 TRACE("%s\n", debugstr_w(lpszPath));
1125#ifdef __REACTOS__
1126 // FIXME: Needs folder attribute
1127 if (PathFileExistsW(lpszPath))
1128 return ILCreateFromPathW(lpszPath);
1129#endif
1130
1131 _ILParsePathW(lpszPath, NULL, TRUE, &pidl, NULL);
1132 TRACE("%s %p\n", debugstr_w(lpszPath), pidl);
1133 return pidl;
1134}

Referenced by BrsFolder_Treeview_Rename(), CShellLink::SetTargetFromPIDLOrPath(), SHChangeNotify(), and SHSimpleIDListFromPathAW().

◆ WINE_DECLARE_DEBUG_CHANNEL()

WINE_DECLARE_DEBUG_CHANNEL ( shell  )

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( pidl  )