ReactOS 0.4.15-dev-7788-g1ad9096
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)
 
HRESULT WINAPI SHGetPathCchFromIDListW (_In_ LPCITEMIDLIST pidl, _Out_writes_(cchPathMax) LPWSTR pszPath, _In_ SIZE_T cchPathMax)
 
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 1591 of file pidl.c.

1592{
1593 LPITEMIDLIST pidlOut = NULL;
1594
1595 pidlOut = SHAlloc(size + 5);
1596 if(pidlOut)
1597 {
1599 LPITEMIDLIST pidlNext;
1600
1601 ZeroMemory(pidlOut, size + 5);
1602 pidlOut->mkid.cb = size + 3;
1603
1604 pData = _ILGetDataPointer(pidlOut);
1605 if (pData)
1606 pData->type = type;
1607
1608 pidlNext = ILGetNext(pidlOut);
1609 if (pidlNext)
1610 pidlNext->mkid.cb = 0x00;
1611 TRACE("-- (pidl=%p, size=%u)\n", pidlOut, size);
1612 }
1613
1614 return pidlOut;
1615}
#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:2202
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:855
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:1712

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

◆ _ILCopyaPidl()

PITEMID_CHILD * _ILCopyaPidl ( PCUITEMID_CHILD_ARRAY  apidlsrc,
UINT  cidl 
)

Definition at line 2678 of file pidl.c.

2679{
2680 UINT i;
2681 PITEMID_CHILD *apidldest;
2682
2683 if (!apidlsrc)
2684 return NULL;
2685
2686 apidldest = SHAlloc(cidl * sizeof(PITEMID_CHILD));
2687
2688 for (i = 0; i < cidl; i++)
2689 apidldest[i] = ILClone(apidlsrc[i]);
2690
2691 return apidldest;
2692}
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 2699 of file pidl.c.

2700{
2701 UINT i;
2703
2704 dst = SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
2705 if (!dst)
2706 return NULL;
2707
2708 if (pidl)
2709 *pidl = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[0]]));
2710
2711 for (i = 0; i < cida->cidl; i++)
2712 dst[i] = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[i + 1]]));
2713
2714 return dst;
2715}
GLenum GLenum dst
Definition: glext.h:6340
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
UINT cidl
Definition: shlobj.h:565
unsigned char BYTE
Definition: xxhash.c:193

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

◆ _ILCreateAdminTools()

LPITEMIDLIST _ILCreateAdminTools ( void  )

Definition at line 1696 of file pidl.c.

1697{
1698 TRACE("()\n");
1700}
const GUID CLSID_AdminFolderShortcut
#define PT_GUID
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
Definition: pidl.c:1702

◆ _ILCreateBitBucket()

LPITEMIDLIST _ILCreateBitBucket ( void  )

Definition at line 1690 of file pidl.c.

1691{
1692 TRACE("()\n");
1693 return _ILCreateGuid(PT_GUID, &CLSID_RecycleBin);
1694}

Referenced by SHGetFolderLocation().

◆ _ILCreateControlPanel()

LPITEMIDLIST _ILCreateControlPanel ( void  )

Definition at line 1646 of file pidl.c.

1647{
1648 LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
1649
1650 TRACE("()\n");
1651 if (parent)
1652 {
1653 LPITEMIDLIST cpl = _ILCreateGuid(PT_SHELLEXT, &CLSID_ControlPanel);
1654
1655 if (cpl)
1656 {
1657 ret = ILCombine(parent, cpl);
1658 SHFree(cpl);
1659 }
1660 SHFree(parent);
1661 }
1662 return ret;
1663}
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:703
int ret

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

◆ _ILCreateDesktop()

LPITEMIDLIST _ILCreateDesktop ( void  )

Definition at line 1617 of file pidl.c.

1618{
1620
1621 TRACE("()\n");
1622 ret = SHAlloc(2);
1623 if (ret)
1624 ret->mkid.cb = 0;
1625 return ret;
1626}

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

◆ _ILCreateDrive()

LPITEMIDLIST _ILCreateDrive ( LPCWSTR  lpszNew)

Definition at line 1823 of file pidl.c.

1824{
1825 LPITEMIDLIST pidlOut;
1826
1827 TRACE("(%s)\n",debugstr_w(lpszNew));
1828
1829 pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct));
1830 if (pidlOut)
1831 {
1832 LPSTR pszDest;
1833
1834 pszDest = _ILGetTextPointer(pidlOut);
1835 if (pszDest)
1836 {
1837 strcpy(pszDest, "x:\\");
1838 pszDest[0]=toupperW(lpszNew[0]);
1839 TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
1840 }
1841 }
1842 return pidlOut;
1843}
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:2269
static LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size)
Definition: pidl.c:1591
#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 1845 of file pidl.c.

1846{
1847 LPITEMIDLIST pidlOut;
1848
1849 TRACE("\n");
1850
1851 pidlOut = _ILAlloc(PT_NETWORK, FIELD_OFFSET(PIDLDATA, u.network.szNames[sizeof("Entire Network")]));
1852 if (pidlOut)
1853 {
1855
1856 pData->u.network.dummy = 0;
1857 strcpy(pData->u.network.szNames, "Entire Network");
1858 }
1859 return pidlOut;
1860}
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 1756 of file pidl.c.

1757{
1758 char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
1759 DWORD len, len1, wlen, alen;
1760 LPITEMIDLIST pidl;
1761 PIDLTYPE type;
1762
1763 if (!wfd)
1764 return NULL;
1765
1766 TRACE("(%s, %s)\n",debugstr_w(wfd->cAlternateFileName), debugstr_w(wfd->cFileName));
1767
1768 /* prepare buffer with both names */
1769 len = WideCharToMultiByte(CP_ACP,0,wfd->cFileName,-1,buff,MAX_PATH,NULL,NULL);
1770 len1 = WideCharToMultiByte(CP_ACP,0,wfd->cAlternateFileName,-1, buff+len, sizeof(buff)-len, NULL, NULL);
1771 alen = len + len1;
1772
1773 type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
1774
1775 wlen = lstrlenW(wfd->cFileName) + 1;
1776 pidl = _ILAlloc(type, FIELD_OFFSET(FileStruct, szNames[alen + (alen & 1)]) +
1777 FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD));
1778 if (pidl)
1779 {
1781 FileStruct *fs = &pData->u.file;
1782 FileStructW *fsw;
1783 WORD *pOffsetW;
1784
1785 FileTimeToDosDateTime( &wfd->ftLastWriteTime, &fs->uFileDate, &fs->uFileTime);
1786 fs->dwFileSize = wfd->nFileSizeLow;
1787 fs->uFileAttribs = wfd->dwFileAttributes;
1788 memcpy(fs->szNames, buff, alen);
1789
1790 fsw = (FileStructW*)(pData->u.file.szNames + alen + (alen & 0x1));
1791 fsw->cbLen = FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD);
1792 FileTimeToDosDateTime( &wfd->ftCreationTime, &fsw->uCreationDate, &fsw->uCreationTime);
1793 FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime);
1794 memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR));
1795
1796 pOffsetW = (WORD*)((LPBYTE)pidl + pidl->mkid.cb - sizeof(WORD));
1797 *pOffsetW = (LPBYTE)fsw - (LPBYTE)pidl;
1798 TRACE("-- Set Value: %s\n",debugstr_w(fsw->wszName));
1799 }
1800 return pidl;
1801
1802}
#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 1804 of file pidl.c.

1805{
1806 HANDLE hFile;
1807 WIN32_FIND_DATAW stffile;
1808
1809 if (!ppidl)
1810 return E_INVALIDARG;
1811
1812 hFile = FindFirstFileW(szPath, &stffile);
1815
1817
1818 *ppidl = _ILCreateFromFindDataW(&stffile);
1819
1820 return *ppidl ? S_OK : E_OUTOFMEMORY;
1821}
#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:1756
#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 1702 of file pidl.c.

1703{
1704 LPITEMIDLIST pidlOut;
1705
1706 if (type == PT_SHELLEXT || type == PT_GUID || type == PT_YAGUID)
1707 {
1708 pidlOut = _ILAlloc(type, sizeof(GUIDStruct));
1709 if (pidlOut)
1710 {
1712
1713 pData->u.guid.guid = *guid;
1714 TRACE("-- create GUID-pidl %s\n",
1715 debugstr_guid(&(pData->u.guid.guid)));
1716 }
1717 }
1718 else
1719 {
1720 WARN("%d: invalid type for GUID\n", type);
1721 pidlOut = NULL;
1722 }
1723 return pidlOut;
1724}
#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 1727 of file pidl.c.

1728{
1729 IID iid;
1730
1731 if (FAILED(SHCLSIDFromStringA(szGUID, &iid)))
1732 {
1733 ERR("%s is not a GUID\n", szGUID);
1734 return NULL;
1735 }
1736 return _ILCreateGuid(PT_GUID, &iid);
1737}
#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 1740 of file pidl.c.

1741{
1742 IID iid;
1743
1744#ifndef __REACTOS__
1745 if (FAILED(SHCLSIDFromStringW(szGUID, &iid)))
1746#else
1747 if (!GUIDFromStringW(szGUID, &iid))
1748#endif
1749 {
1750 ERR("%s is not a GUID\n", debugstr_w(szGUID));
1751 return NULL;
1752 }
1753 return _ILCreateGuid(PT_GUID, &iid);
1754}
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 1640 of file pidl.c.

1641{
1642 TRACE("()\n");
1643 return _ILCreateGuid(PT_GUID, &CLSID_Internet);
1644}

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

◆ _ILCreateMyComputer()

LPITEMIDLIST _ILCreateMyComputer ( void  )

Definition at line 1628 of file pidl.c.

1629{
1630 TRACE("()\n");
1631 return _ILCreateGuid(PT_GUID, &CLSID_MyComputer);
1632}

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

◆ _ILCreateMyDocuments()

LPITEMIDLIST _ILCreateMyDocuments ( void  )

Definition at line 1634 of file pidl.c.

1635{
1636 TRACE("()\n");
1637 return _ILCreateGuid(PT_GUID, &CLSID_MyDocuments);
1638}

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

◆ _ILCreateNetwork()

LPITEMIDLIST _ILCreateNetwork ( void  )

Definition at line 1684 of file pidl.c.

1685{
1686 TRACE("()\n");
1687 return _ILCreateGuid(PT_GUID, &CLSID_NetworkPlaces);
1688}

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

◆ _ILCreatePrinters()

LPITEMIDLIST _ILCreatePrinters ( void  )

Definition at line 1665 of file pidl.c.

1666{
1667 LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
1668
1669 TRACE("()\n");
1670 if (parent)
1671 {
1672 LPITEMIDLIST printers = _ILCreateGuid(PT_YAGUID, &CLSID_Printers);
1673
1674 if (printers)
1675 {
1676 ret = ILCombine(parent, printers);
1677 SHFree(printers);
1678 }
1679 SHFree(parent);
1680 }
1681 return ret;
1682}

Referenced by SHGetFolderLocation().

◆ _ILFreeaPidl()

void _ILFreeaPidl ( LPITEMIDLIST apidl,
UINT  cidl 
)

Definition at line 2661 of file pidl.c.

2662{
2663 UINT i;
2664
2665 if (apidl)
2666 {
2667 for (i = 0; i < cidl; i++)
2668 SHFree(apidl[i]);
2669 SHFree(apidl);
2670 }
2671}

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 1870 of file pidl.c.

1871{
1872 TRACE("(%p,%p,%u)\n",pidl,pOut,uSize);
1873
1874 if(_ILIsMyComputer(pidl))
1875 pidl = ILGetNext(pidl);
1876
1877 if (pidl && _ILIsDrive(pidl))
1878 return _ILSimpleGetText(pidl, pOut, uSize);
1879
1880 return 0;
1881}
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
Definition: pidl.c:1946
DWORD _ILSimpleGetText(LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
Definition: pidl.c:2050
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
Definition: pidl.c:1979

Referenced by _ILGetDriveType(), and DrivesContextMenuCallback().

◆ _ILGetExtension()

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

Definition at line 2502 of file pidl.c.

2503{
2504 char szTemp[MAX_PATH];
2505 const char * pPoint;
2506 LPCITEMIDLIST pidlTemp=pidl;
2507
2508 TRACE("pidl=%p\n",pidl);
2509
2510 if (!pidl)
2511 return FALSE;
2512
2513 pidlTemp = ILFindLastID(pidl);
2514
2515 if (!_ILIsValue(pidlTemp))
2516 return FALSE;
2517 if (!_ILSimpleGetText(pidlTemp, szTemp, MAX_PATH))
2518 return FALSE;
2519
2520 pPoint = PathFindExtensionA(szTemp);
2521
2522 if (!*pPoint)
2523 return FALSE;
2524
2525 pPoint++;
2526 lstrcpynA(pOut, pPoint, uOutSize);
2527 TRACE("%s\n",pOut);
2528
2529 return TRUE;
2530}
#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:2000

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

◆ _ILGetFileAttributes()

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

Definition at line 2621 of file pidl.c.

2622{
2624 WORD wAttrib = 0;
2625 int i;
2626
2627 if (!pData)
2628 return 0;
2629
2630 switch(pData->type)
2631 {
2632 case PT_FOLDER:
2633 case PT_VALUE:
2634 wAttrib = pData->u.file.uFileAttribs;
2635 break;
2636 }
2637
2638 if(uOutSize >= 6)
2639 {
2640 i=0;
2641 if(wAttrib & FILE_ATTRIBUTE_READONLY)
2642 pOut[i++] = 'R';
2643 if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
2644 pOut[i++] = 'H';
2645 if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
2646 pOut[i++] = 'S';
2647 if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
2648 pOut[i++] = 'A';
2649 if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
2650 pOut[i++] = 'C';
2651 pOut[i] = 0x00;
2652 }
2653 return wAttrib;
2654}
#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 2437 of file pidl.c.

2438{
2439 FILETIME ft,lft;
2441 BOOL ret;
2442
2443 if (_ILGetFileDateTime( pidl, &ft ))
2444 {
2445 FileTimeToLocalFileTime(&ft, &lft);
2446 FileTimeToSystemTime (&lft, &time);
2447
2449 if (ret)
2450 {
2451 /* Append space + time without seconds */
2452 pOut[ret-1] = ' ';
2454 }
2455 }
2456 else
2457 {
2458 pOut[0] = '\0';
2459 ret = FALSE;
2460 }
2461 return ret;
2462}
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:1044
INT WINAPI GetDateFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpDateStr, INT cchOut)
Definition: lcformat.c:936
__u16 time
Definition: mkdosfs.c:8
#define LOCALE_USER_DEFAULT
BOOL _ILGetFileDateTime(LPCITEMIDLIST pidl, FILETIME *pFt)
Definition: pidl.c:2418
#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 2418 of file pidl.c.

2419{
2421
2422 if (!pdata)
2423 return FALSE;
2424
2425 switch (pdata->type)
2426 {
2427 case PT_FOLDER:
2428 case PT_VALUE:
2429 DosDateTimeToFileTime(pdata->u.file.uFileDate, pdata->u.file.uFileTime, pFt);
2430 break;
2431 default:
2432 return FALSE;
2433 }
2434 return TRUE;
2435}
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 2481 of file pidl.c.

2482{
2484 DWORD dwSize;
2485
2486 if (!pdata)
2487 return 0;
2488
2489 switch (pdata->type)
2490 {
2491 case PT_VALUE:
2492 dwSize = pdata->u.file.dwFileSize;
2493 if (pOut)
2494 StrFormatKBSizeA(dwSize, pOut, uOutSize);
2495 return dwSize;
2496 }
2497 if (pOut)
2498 *pOut = 0x00;
2499 return 0;
2500}
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 2376 of file pidl.c.

2376 {
2377 FileStructW *pFileStructW;
2378 WORD cbOffset;
2379
2380 if (!(_ILIsValue(pidl) || _ILIsFolder(pidl)))
2381 return NULL;
2382
2383 cbOffset = *(const WORD *)((const BYTE *)pidl + pidl->mkid.cb - sizeof(WORD));
2384 pFileStructW = (FileStructW*)((LPBYTE)pidl + cbOffset);
2385
2386 /* Currently I don't see a fool prove way to figure out if a pidl is for sure of WinXP
2387 * style with a FileStructW member. If we switch all our shellfolder-implementations to
2388 * the new format, this won't be a problem. For now, we do as many sanity checks as possible. */
2389 if ((cbOffset & 0x1) || /* FileStructW member is word aligned in the pidl */
2390 /* FileStructW is positioned after FileStruct */
2391 cbOffset < sizeof(pidl->mkid.cb) + sizeof(PIDLTYPE) + sizeof(FileStruct) ||
2392 /* There has to be enough space at cbOffset in the pidl to hold FileStructW and cbOffset */
2393 cbOffset > pidl->mkid.cb - sizeof(cbOffset) - sizeof(FileStructW) ||
2394 pidl->mkid.cb != cbOffset + pFileStructW->cbLen)
2395 {
2396 WARN("Invalid pidl format (cbOffset = %d)!\n", cbOffset);
2397 return NULL;
2398 }
2399
2400 return pFileStructW;
2401}
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:1991
struct tagFileStruct FileStruct

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

◆ _ILGetFileType()

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

Definition at line 2548 of file pidl.c.

2549{
2550#ifdef __REACTOS__ /* r32966 */
2551 char sType[64];
2552#endif
2553
2554 if(_ILIsValue(pidl))
2555 {
2556 char sTemp[64];
2557
2558 if(uOutSize > 0)
2559 pOut[0] = 0;
2560#ifdef __REACTOS__ /* r32966 */
2561 if (_ILGetExtension (pidl, sType, 64))
2562 {
2563 if (HCR_MapTypeToValueA(sType, sTemp, 64, TRUE))
2564 {
2565 /* retrieve description */
2566 if(HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE ))
2567 return;
2568 }
2569 /* display Ext-file as description */
2570 _strupr(sType);
2571 /* load localized file string */
2572 sTemp[0] = '\0';
2574 {
2575 sTemp[63] = '\0';
2576 StringCchPrintfA(pOut, uOutSize, sTemp, sType);
2577 }
2578 }
2579#else
2580 if (_ILGetExtension (pidl, sTemp, 64))
2581 {
2582 if (!( HCR_MapTypeToValueA(sTemp, sTemp, 64, TRUE)
2583 && HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE )))
2584 {
2585 lstrcpynA (pOut, sTemp, uOutSize - 6);
2586 strcat (pOut, "-file");
2587 }
2588 }
2589#endif
2590 }
2591 else
2592#ifdef __REACTOS__ /* r32966 */
2593 {
2594 pOut[0] = '\0';
2596 /* make sure its null terminated */
2597 pOut[uOutSize-1] = '\0';
2598 }
2599#else
2600 lstrcpynA(pOut, "Folder", uOutSize);
2601#endif
2602}
#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:2502
_CRTIMP char *__cdecl _strupr(_Inout_z_ char *_String)
BOOL HCR_MapTypeToValueA(LPCSTR szExtension, LPSTR szFileType, LONG len, BOOL bPrependDot)
Definition: classes.c:91
#define IDS_DIRECTORY
Definition: shresdef.h:157
#define IDS_ANY_FILE
Definition: shresdef.h:183
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 2340 of file pidl.c.

2341{
2343
2344 TRACE("%p\n", pidl);
2345
2346 if (!pdata)
2347 return NULL;
2348
2349 TRACE("pdata->type 0x%04x\n", pdata->type);
2350 switch (pdata->type)
2351 {
2352 case PT_SHELLEXT:
2353 case PT_GUID:
2354 case PT_YAGUID:
2355 return &(pdata->u.guid.guid);
2356
2357 default:
2358 TRACE("Unknown pidl type 0x%04x\n", pdata->type);
2359 break;
2360 }
2361 return NULL;
2362}

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 2312 of file pidl.c.

2313{
2314 /* TRACE(pidl,"(pidl%p)\n", pidl); */
2315
2317
2318 if (!pdata)
2319 return NULL;
2320
2321 switch (pdata->type)
2322 {
2323 case PT_FOLDER:
2324 case PT_VALUE:
2325 case PT_IESPECIAL1:
2326 case PT_IESPECIAL2:
2327 return pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1;
2328
2329 case PT_WORKGRP:
2330 return pdata->u.network.szNames + strlen (pdata->u.network.szNames) + 1;
2331 }
2332 return NULL;
2333}
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 2269 of file pidl.c.

2270{
2271 /* TRACE(pidl,"(pidl%p)\n", pidl);*/
2272
2274
2275 if (!pdata)
2276 return NULL;
2277
2278 switch (pdata->type)
2279 {
2280 case PT_GUID:
2281 case PT_SHELLEXT:
2282 case PT_YAGUID:
2283 return NULL;
2284
2285 case PT_DRIVE:
2286 case PT_DRIVE1:
2287 case PT_DRIVE2:
2288 case PT_DRIVE3:
2289 return pdata->u.drive.szDriveName;
2290
2291 case PT_FOLDER:
2292 case PT_FOLDER1:
2293 case PT_VALUE:
2294 case PT_IESPECIAL1:
2295 case PT_IESPECIAL2:
2296 return pdata->u.file.szNames;
2297
2298 case PT_WORKGRP:
2299 case PT_COMP:
2300 case PT_NETWORK:
2301 case PT_NETPROVIDER:
2302 case PT_SHARE:
2303 return pdata->u.network.szNames;
2304 }
2305 return NULL;
2306}
#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 2213 of file pidl.c.

2214{
2215 /* TRACE(pidl,"(pidl%p)\n", pidl);*/
2216
2218
2219 if (!pdata)
2220 return NULL;
2221
2222 switch (pdata->type)
2223 {
2224 case PT_GUID:
2225 case PT_SHELLEXT:
2226 case PT_YAGUID:
2227 return NULL;
2228
2229 case PT_DRIVE:
2230 case PT_DRIVE1:
2231 case PT_DRIVE2:
2232 case PT_DRIVE3:
2233 /*return (LPSTR)&(pdata->u.drive.szDriveName);*/
2234 return NULL;
2235
2236 case PT_FOLDER:
2237 case PT_FOLDER1:
2238 case PT_VALUE:
2239 case PT_IESPECIAL1:
2240 case PT_IESPECIAL2:
2241 /*return (LPSTR)&(pdata->u.file.szNames);*/
2242 return NULL;
2243
2244 case PT_WORKGRP:
2245 case PT_COMP:
2246 case PT_NETWORK:
2247 case PT_NETPROVIDER:
2248 case PT_SHARE:
2249 /*return (LPSTR)&(pdata->u.network.szNames);*/
2250 return NULL;
2251
2252 case PT_VALUEW:
2253 return (LPWSTR)pdata->u.file.szNames;
2254
2255#ifdef __REACTOS__ /* r54423 */
2256 case PT_CPLAPPLET:
2257 return pdata->u.cpanel.szName;
2258#endif
2259
2260 }
2261 return NULL;
2262}
#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 if ((pidltemp1->mkid.cb != pidltemp2->mkid.cb) ||
526 !RtlEqualMemory((BYTE*)&pidltemp1->mkid, (BYTE*)&pidltemp2->mkid, pidltemp1->mkid.cb))
527 {
528 return FALSE;
529 }
530 }
531
532 return TRUE;
533}
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
#define RtlEqualMemory(a, b, c)
Definition: kdvm.h:18
FileStructW * _ILGetFileStructW(LPCITEMIDLIST pidl)
Definition: pidl.c:2376
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2340
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: pidl.c:1906

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

◆ _ILIsBitBucket()

BOOL _ILIsBitBucket ( LPCITEMIDLIST  pidl)

Definition at line 1957 of file pidl.c.

1958{
1959 IID *iid = _ILGetGUIDPointer(pidl);
1960
1961 TRACE("(%p)\n", pidl);
1962
1963 if (iid)
1964 return IsEqualIID(iid, &CLSID_RecycleBin);
1965 return FALSE;
1966}
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

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

◆ _ILIsControlPanel()

BOOL _ILIsControlPanel ( LPCITEMIDLIST  pidl)

Definition at line 1935 of file pidl.c.

1936{
1937 IID *iid = _ILGetGUIDPointer(pidl);
1938
1939 TRACE("(%p)\n", pidl);
1940
1941 if (iid)
1942 return IsEqualIID(iid, &CLSID_ControlPanel);
1943 return FALSE;
1944}

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

◆ _ILIsCPanelStruct()

BOOL _ILIsCPanelStruct ( LPCITEMIDLIST  pidl)

Definition at line 2009 of file pidl.c.

2010{
2011 LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
2012
2013 TRACE("(%p)\n",pidl);
2014
2015 return (pidl && lpPData && (lpPData->type == 0));
2016}

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

◆ _ILIsDesktop()

BOOL _ILIsDesktop ( LPCITEMIDLIST  pidl)
inline

Definition at line 1906 of file pidl.c.

1907{
1908 TRACE("(%p)\n",pidl);
1909
1910 return !pidl || !pidl->mkid.cb;
1911}

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

◆ _ILIsDrive()

◆ _ILIsFolder()

◆ _ILIsMyComputer()

BOOL _ILIsMyComputer ( LPCITEMIDLIST  pidl)

Definition at line 1946 of file pidl.c.

1947{
1948 REFIID iid = _ILGetGUIDPointer(pidl);
1949
1950 TRACE("(%p)\n",pidl);
1951
1952 if (iid)
1953 return IsEqualIID(iid, &CLSID_MyComputer);
1954 return FALSE;
1955}
#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 1913 of file pidl.c.

1914{
1915 IID *iid = _ILGetGUIDPointer(pidl);
1916
1917 TRACE("(%p)\n", pidl);
1918
1919 if (iid)
1920 return IsEqualIID(iid, &CLSID_MyDocuments);
1921 return FALSE;
1922}

◆ _ILIsNetHood()

BOOL _ILIsNetHood ( LPCITEMIDLIST  pidl)

Definition at line 1924 of file pidl.c.

1925{
1926 IID *iid = _ILGetGUIDPointer(pidl);
1927
1928 TRACE("(%p)\n", pidl);
1929
1930 if (iid)
1931 return IsEqualIID(iid, &CLSID_NetworkPlaces);
1932 return FALSE;
1933}

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

◆ _ILIsPidlSimple()

BOOL _ILIsPidlSimple ( LPCITEMIDLIST  pidl)

Definition at line 2021 of file pidl.c.

2022{
2023 BOOL ret = TRUE;
2024
2025 if(! _ILIsDesktop(pidl)) /* pidl=NULL or mkid.cb=0 */
2026 {
2027 WORD len = pidl->mkid.cb;
2028 LPCITEMIDLIST pidlnext = (LPCITEMIDLIST) (((const BYTE*)pidl) + len );
2029
2030 if (pidlnext->mkid.cb)
2031 ret = FALSE;
2032 }
2033
2034 TRACE("%s\n", ret ? "Yes" : "No");
2035 return ret;
2036}

Referenced by SHBindToParent().

◆ _ILIsSpecialFolder()

BOOL _ILIsSpecialFolder ( LPCITEMIDLIST  pidl)

Definition at line 1968 of file pidl.c.

1969{
1970 LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1971
1972 TRACE("(%p)\n",pidl);
1973
1974 return (pidl && ( (lpPData && (PT_GUID== lpPData->type || PT_SHELLEXT== lpPData->type || PT_YAGUID == lpPData->type)) ||
1975 (pidl && pidl->mkid.cb == 0x00)
1976 ));
1977}

Referenced by SHGetDataFromIDListA().

◆ _ILIsUnicode()

BOOL _ILIsUnicode ( LPCITEMIDLIST  pidl)

Definition at line 1897 of file pidl.c.

1898{
1899 LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1900
1901 TRACE("(%p)\n",pidl);
1902
1903 return (pidl && lpPData && PT_VALUEW == lpPData->type);
1904}

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 1034 of file pidl.c.

1036{
1037 LPSHELLFOLDER pSF = NULL;
1038 LPBC pBC = NULL;
1039 HRESULT ret;
1040
1041 TRACE("%s %p %d (%p)->%p (%p)->0x%x\n", debugstr_w(path), lpFindFile, bBindCtx,
1042 ppidl, ppidl ? *ppidl : NULL,
1043 prgfInOut, prgfInOut ? *prgfInOut : 0);
1044
1045 ret = SHGetDesktopFolder(&pSF);
1046 if (FAILED(ret))
1047 return ret;
1048
1049 if (lpFindFile || bBindCtx)
1050 ret = IFileSystemBindData_Constructor(lpFindFile, &pBC);
1051
1052 if (SUCCEEDED(ret))
1053 {
1054 ret = IShellFolder_ParseDisplayName(pSF, 0, pBC, (LPOLESTR)path, NULL, ppidl, prgfInOut);
1055 }
1056
1057 if (pBC)
1058 {
1059 IBindCtx_Release(pBC);
1060 pBC = NULL;
1061 }
1062
1063 IShellFolder_Release(pSF);
1064
1065 if (FAILED(ret) && ppidl)
1066 *ppidl = NULL;
1067
1068 TRACE("%s %p 0x%x\n", debugstr_w(path), ppidl ? *ppidl : NULL, prgfInOut ? *prgfInOut : 0);
1069
1070 return ret;
1071}
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 2050 of file pidl.c.

2051{
2052 DWORD dwReturn=0;
2053 LPSTR szSrc;
2054 LPWSTR szSrcW;
2055 GUID const * riid;
2056 char szTemp[MAX_PATH];
2057
2058 TRACE("(%p %p %x)\n",pidl,szOut,uOutSize);
2059
2060 if (!pidl)
2061 return 0;
2062
2063 if (szOut)
2064 *szOut = 0;
2065
2066 if (_ILIsDesktop(pidl))
2067 {
2068 /* desktop */
2069 if (HCR_GetClassNameA(&CLSID_ShellDesktop, szTemp, MAX_PATH))
2070 {
2071 if (szOut)
2072 lstrcpynA(szOut, szTemp, uOutSize);
2073
2074 dwReturn = strlen (szTemp);
2075 }
2076 }
2077 else if (( szSrc = _ILGetTextPointer(pidl) ))
2078 {
2079 /* filesystem */
2080 if (szOut)
2081 lstrcpynA(szOut, szSrc, uOutSize);
2082
2083 dwReturn = strlen(szSrc);
2084 }
2085 else if (( szSrcW = _ILGetTextPointerW(pidl) ))
2086 {
2087 /* unicode filesystem */
2088 WideCharToMultiByte(CP_ACP,0,szSrcW, -1, szTemp, MAX_PATH, NULL, NULL);
2089
2090 if (szOut)
2091 lstrcpynA(szOut, szTemp, uOutSize);
2092
2093 dwReturn = strlen (szTemp);
2094 }
2095 else if (( riid = _ILGetGUIDPointer(pidl) ))
2096 {
2097 /* special folder */
2098 if ( HCR_GetClassNameA(riid, szTemp, MAX_PATH) )
2099 {
2100 if (szOut)
2101 lstrcpynA(szOut, szTemp, uOutSize);
2102
2103 dwReturn = strlen (szTemp);
2104 }
2105 }
2106 else
2107 {
2108 ERR("-- no text\n");
2109 }
2110
2111 TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_a(szOut),dwReturn);
2112 return dwReturn;
2113}
REFIID riid
Definition: atlbase.h:39
static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl)
Definition: pidl.c:2213
BOOL HCR_GetClassNameA(REFIID riid, LPSTR szDest, DWORD len)
Definition: classes.c:474

Referenced by _ILGetDrive(), and _ILGetExtension().

◆ _ILSimpleGetTextW()

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

Definition at line 2122 of file pidl.c.

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

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:1594

◆ ILAppendID()

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

Definition at line 889 of file pidl.c.

890{
891 LPITEMIDLIST idlRet;
893
894 WARN("(pidl=%p,pidl=%p,%08u)semi-stub\n",pidl,item,bEnd);
895
896 pdump (pidl);
897 pdump (itemid);
898
899 if (_ILIsDesktop(pidl))
900 {
901 idlRet = ILClone(itemid);
902 SHFree (pidl);
903 return idlRet;
904 }
905
906 if (bEnd)
907 idlRet = ILCombine(pidl, itemid);
908 else
909 idlRet = ILCombine(itemid, pidl);
910
911 SHFree(pidl);
912 return idlRet;
913}
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(), CZipFolder::GetCurFolder(), CFindFolder::GetCurFolder(), CNetworkConnections::GetCurFolder(), CCommonFolder< TSelf, TItemId, TExtractIcon >::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(), CViewStatePropertyBag::Init(), init_function_pointers(), CDefaultContextMenu::Initialize(), CRegFolder::Initialize(), CFolderItem::Initialize(), CFontExt::Initialize(), CRecycleBinItemContextMenu::Initialize(), CNtObjectFolderExtractIcon::Initialize(), CRegistryFolderExtractIcon::Initialize(), CFolder::Initialize(), CFolderItems::Initialize(), CZipFolder::Initialize(), CFindFolder::Initialize(), CNetworkConnections::Initialize(), CCommonFolder< TSelf, TItemId, TExtractIcon >::Initialize(), CNtObjectFolder::Initialize(), CRegistryFolder::Initialize(), CACListISF::Initialize(), CAdminToolsFolder::Initialize(), CControlPanelFolder::Initialize(), CFontsFolder::Initialize(), CFSFolder::Initialize(), CMyDocsFolder::Initialize(), CNetFolder::Initialize(), CPrinterFolder::Initialize(), CRecycleBin::Initialize(), CMergedFolder::Initialize(), CCopyMoveToMenu::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 CMruNode::_GetPidlSlot(), 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 703 of file pidl.c.

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

Referenced by _ILCreateControlPanel(), _ILCreatePrinters(), _ReparsePIDL(), _ShowPropertiesDialogThread(), CCommonFolder< TSelf, TItemId, TExtractIcon >::BindToObject(), ShellPath::create_absolute_pidl(), DoGetFileTitle(), CCopyMoveToMenu::DoRealFileOp(), 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(), 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(), and TestHIDA().

◆ ILCreateFromPathA()

LPITEMIDLIST WINAPI ILCreateFromPathA ( LPCSTR  path)

Definition at line 970 of file pidl.c.

971{
972 LPITEMIDLIST pidlnew = NULL;
973
974 TRACE_(shell)("%s\n", debugstr_a(path));
975
976 if (SUCCEEDED(SHILCreateFromPathA(path, &pidlnew, NULL)))
977 return pidlnew;
978 return NULL;
979}
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 1000 of file pidl.c.

1001{
1002 if ( SHELL_OsIsUnicode())
1003 return ILCreateFromPathW (path);
1004 return ILCreateFromPathA (path);
1005}
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
Definition: pidl.c:986
LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR path)
Definition: pidl.c:970
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:140

◆ ILCreateFromPathW()

◆ ILFindChild()

PUIDLIST_RELATIVE WINAPI ILFindChild ( PIDLIST_ABSOLUTE  pidl1,
PCIDLIST_ABSOLUTE  pidl2 
)

Definition at line 645 of file pidl.c.

646{
647 LPCITEMIDLIST pidltemp1 = pidl1;
648 LPCITEMIDLIST pidltemp2 = pidl2;
650
651 TRACE("pidl1=%p pidl2=%p\n",pidl1, pidl2);
652
653 /* explorer reads from registry directly (StreamMRU),
654 so we can only check here */
655 if ((!pcheck (pidl1)) || (!pcheck (pidl2)))
656 return FALSE;
657
658 pdump (pidl1);
659 pdump (pidl2);
660
661 if (_ILIsDesktop(pidl1))
662 {
663 ret = pidl2;
664 }
665 else
666 {
667 while (pidltemp1->mkid.cb && pidltemp2->mkid.cb)
668 {
669 if (!_ILHACKCompareSimpleIds(pidltemp1, pidltemp2))
670 return FALSE;
671
672 pidltemp1 = ILGetNext(pidltemp1);
673 pidltemp2 = ILGetNext(pidltemp2);
674 ret = pidltemp2;
675 }
676
677 if (pidltemp1->mkid.cb)
678 ret = NULL; /* elements of pidl1 left*/
679 }
680 TRACE_(shell)("--- %p\n", ret);
681 return (PUIDLIST_RELATIVE)ret; /* pidl 1 is shorter */
682}
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 929 of file pidl.c.

930{
931 TRACE("(pidl=%p)\n",pidl);
932 SHFree(pidl);
933}

Referenced by CMenuBand::_CallCB(), CFSDropTarget::_DoDrop(), CMruNode::_GetPidlSlot(), _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(), CAddressEditBox::Execute(), 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(), GetParsingName(), CShellBrowser::GetPropertyBag(), 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(), MRUList_PidlList_0(), CShellBrowser::NavigateToParent(), on_default_action(), CMenuSFToolbar::OnDeletingButton(), CShellBrowser::OnDestroy(), CDefView::OnNotify(), CShellBrowser::OnOrganizeFavorites(), 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(), CDefaultContextMenu::TryToBrowse(), 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(), CTravelEntry::~CTravelEntry(), and CViewStatePropertyBag::~CViewStatePropertyBag().

◆ 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:66

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:1352
BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
Definition: shellstring.c:85
#define ILGDN_NORMAL
Definition: undocshell.h:67
#define ILGDN_INFOLDER
Definition: undocshell.h:68

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 819 of file pidl.c.

820{
821 LPCSHITEMID si;
822 UINT len=0;
823
824 if (pidl)
825 {
826 si = &(pidl->mkid);
827
828 while (si->cb)
829 {
830 len += si->cb;
831 si = (LPCSHITEMID)(((const BYTE*)si)+si->cb);
832 }
833 len += 2;
834 }
835 TRACE("pidl=%p size=%u\n",pidl, len);
836 return len;
837}
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 949 of file pidl.c.

950{
951 TRACE("%p\n", pidl);
952
953 Free(pidl);
954}
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
Definition: exfuncs.h:815

◆ ILIsEqual()

BOOL WINAPI ILIsEqual ( LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)

Definition at line 539 of file pidl.c.

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

Referenced by CViewStatePropertyBag::_IsSamePidl(), 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 596 of file pidl.c.

597{
598 LPCITEMIDLIST pParent = pidlParent;
599 LPCITEMIDLIST pChild = pidlChild;
600
601 TRACE("%p %p %x\n", pidlParent, pidlChild, bImmediate);
602
603 if (!pParent || !pChild)
604 return FALSE;
605
606 while (pParent->mkid.cb && pChild->mkid.cb)
607 {
608 if (!_ILHACKCompareSimpleIds(pParent, pChild))
609 return FALSE;
610
612 pChild = ILGetNext(pChild);
613 }
614
615 /* child has shorter name than parent */
616 if (pParent->mkid.cb)
617 return FALSE;
618
619 /* not immediate descent */
620 if ((!pChild->mkid.cb || ILGetNext(pChild)->mkid.cb) && bImmediate)
621 return FALSE;
622
623 return TRUE;
624}
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 1352 of file pidl.c.

1353{
1354 IShellFolder * psfDesktop;
1356
1357 TRACE_(shell)("pidl=%p\n", pidl);
1358 pdump(pidl);
1359
1360 if (!pidl || !ppv)
1361 return E_INVALIDARG;
1362
1363 *ppv = NULL;
1364 if (ppidlLast)
1365 *ppidlLast = NULL;
1366
1367 hr = SHGetDesktopFolder(&psfDesktop);
1368 if (FAILED(hr))
1369 return hr;
1370
1371 if (_ILIsPidlSimple(pidl))
1372 {
1373 /* we are on desktop level */
1374 hr = IShellFolder_QueryInterface(psfDesktop, riid, ppv);
1375 }
1376 else
1377 {
1378 LPITEMIDLIST pidlParent = ILClone(pidl);
1379 ILRemoveLastID(pidlParent);
1380 hr = IShellFolder_BindToObject(psfDesktop, pidlParent, NULL, riid, ppv);
1381 SHFree (pidlParent);
1382 }
1383
1384 IShellFolder_Release(psfDesktop);
1385
1386 if (SUCCEEDED(hr) && ppidlLast)
1387 *ppidlLast = ILFindLastID(pidl);
1388
1389 TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08x\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
1390 return hr;
1391}
REFIID LPVOID * ppv
Definition: atlbase.h:39
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:212
BOOL _ILIsPidlSimple(LPCITEMIDLIST pidl)
Definition: pidl.c:2021
HRESULT hr
Definition: shlfolder.c:183

Referenced by CViewStatePropertyBag::_IsSystemFolder(), _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(), CShellMenuCallback::OnGetContextMenu(), CExplorerBand::OnTreeItemDragging(), CExplorerBand::OnWinEvent(), r_verify_pidl(), CAddressEditBox::RefreshAddress(), RSHELL_CStartMenu_CreateInstance(), SHELL_execute(), SHELL_PidlGetIconLocationW(), shellex_get_contextmenu(), shellex_get_dataobj(), SHGetFileInfoW(), SHGetNameFromIDList(), SHGetPathCchFromIDListW(), SHIsRemovableDrive(), 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:1510

Referenced by CStartMenuBtnCtxMenu::QueryContextMenu().

◆ SHGetDataFromIDListA()

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

Definition at line 1154 of file pidl.c.

1156{
1157 LPSTR filename, shortname;
1159
1160 TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
1161
1162 pdump(pidl);
1163 if (!psf || !dest)
1164 return E_INVALIDARG;
1165
1166 switch (nFormat)
1167 {
1168 case SHGDFIL_FINDDATA:
1169 pfd = dest;
1170
1171 if (_ILIsDrive(pidl) || _ILIsSpecialFolder(pidl))
1172 return E_INVALIDARG;
1173
1174 if (len < sizeof(WIN32_FIND_DATAA))
1175 return E_INVALIDARG;
1176
1177 ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
1178 _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
1179 pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
1180 pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
1181
1183 shortname = _ILGetSTextPointer(pidl);
1184
1185 if (filename)
1186 lstrcpynA(pfd->cFileName, filename, sizeof(pfd->cFileName));
1187 else
1188 pfd->cFileName[0] = '\0';
1189
1190 if (shortname)
1191 lstrcpynA(pfd->cAlternateFileName, shortname, sizeof(pfd->cAlternateFileName));
1192 else
1193 pfd->cAlternateFileName[0] = '\0';
1194 return S_OK;
1195
1198 FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
1199 break;
1200
1201 default:
1202 ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
1203 }
1204
1205 return E_INVALIDARG;
1206}
#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:2312
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2621
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2481
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:1968
#define ERR_(ch,...)
Definition: debug.h:156
#define SHGDFIL_FINDDATA
Definition: shlobj.h:1443
#define SHGDFIL_NETRESOURCE
Definition: shlobj.h:1444
#define SHGDFIL_DESCRIPTIONID
Definition: shlobj.h:1445
static PIXELFORMATDESCRIPTOR pfd
Definition: ssstars.c:67

◆ SHGetDataFromIDListW()

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

Definition at line 1212 of file pidl.c.

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

Referenced by CViewStatePropertyBag::_IsSystemFolder().

◆ SHGetIDListFromObject()

HRESULT WINAPI SHGetIDListFromObject ( IUnknown punk,
PIDLIST_ABSOLUTE ppidl 
)

Definition at line 1501 of file pidl.c.

1502{
1503 IPersistIDList *ppersidl;
1504 IPersistFolder2 *ppf2;
1505 IDataObject *pdo;
1506 IFolderView *pfv;
1507 HRESULT ret;
1508
1509 if(!punk)
1510 return E_NOINTERFACE;
1511
1512 *ppidl = NULL;
1513
1514 /* Try IPersistIDList */
1515 ret = IUnknown_QueryInterface(punk, &IID_IPersistIDList, (void**)&ppersidl);
1516 if(SUCCEEDED(ret))
1517 {
1518 TRACE("IPersistIDList (%p)\n", ppersidl);
1519 ret = IPersistIDList_GetIDList(ppersidl, ppidl);
1520 IPersistIDList_Release(ppersidl);
1521 if(SUCCEEDED(ret))
1522 return ret;
1523 }
1524
1525 /* Try IPersistFolder2 */
1526 ret = IUnknown_QueryInterface(punk, &IID_IPersistFolder2, (void**)&ppf2);
1527 if(SUCCEEDED(ret))
1528 {
1529 TRACE("IPersistFolder2 (%p)\n", ppf2);
1530 ret = IPersistFolder2_GetCurFolder(ppf2, ppidl);
1531 IPersistFolder2_Release(ppf2);
1532 if(SUCCEEDED(ret))
1533 return ret;
1534 }
1535
1536 /* Try IDataObject */
1537 ret = IUnknown_QueryInterface(punk, &IID_IDataObject, (void**)&pdo);
1538 if(SUCCEEDED(ret))
1539 {
1540 IShellItem *psi;
1541 TRACE("IDataObject (%p)\n", pdo);
1543 &IID_IShellItem, (void**)&psi);
1544 if(SUCCEEDED(ret))
1545 {
1546 ret = SHGetIDListFromObject((IUnknown*)psi, ppidl);
1547 IShellItem_Release(psi);
1548 }
1549 IDataObject_Release(pdo);
1550
1551 if(SUCCEEDED(ret))
1552 return ret;
1553 }
1554
1555 /* Try IFolderView */
1556 ret = IUnknown_QueryInterface(punk, &IID_IFolderView, (void**)&pfv);
1557 if(SUCCEEDED(ret))
1558 {
1559 IShellFolder *psf;
1560 TRACE("IFolderView (%p)\n", pfv);
1561 ret = IFolderView_GetFolder(pfv, &IID_IShellFolder, (void**)&psf);
1562 if(SUCCEEDED(ret))
1563 {
1564 /* We might be able to get IPersistFolder2 from a shellfolder. */
1565 ret = SHGetIDListFromObject((IUnknown*)psf, ppidl);
1566 }
1567 IFolderView_Release(pfv);
1568 return ret;
1569 }
1570
1571 return ret;
1572}
const GUID IID_IDataObject
HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
Definition: pidl.c:1501
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 1438 of file pidl.c.

1439{
1440 IShellFolder *psfparent;
1441 LPCITEMIDLIST child_pidl;
1442 STRRET disp_name;
1443 HRESULT ret;
1444
1445 TRACE("%p 0x%08x %p\n", pidl, sigdnName, ppszName);
1446
1447 *ppszName = NULL;
1448 ret = SHBindToParent(pidl, &IID_IShellFolder, (void**)&psfparent, &child_pidl);
1449 if(SUCCEEDED(ret))
1450 {
1451 switch(sigdnName)
1452 {
1453 /* sigdnName & 0xffff */
1454 case SIGDN_NORMALDISPLAY: /* SHGDN_NORMAL */
1455 case SIGDN_PARENTRELATIVEPARSING: /* SHGDN_INFOLDER | SHGDN_FORPARSING */
1456 case SIGDN_PARENTRELATIVEEDITING: /* SHGDN_INFOLDER | SHGDN_FOREDITING */
1457 case SIGDN_DESKTOPABSOLUTEPARSING: /* SHGDN_FORPARSING */
1458 case SIGDN_DESKTOPABSOLUTEEDITING: /* SHGDN_FOREDITING | SHGDN_FORADDRESSBAR*/
1459 case SIGDN_PARENTRELATIVEFORADDRESSBAR: /* SIGDN_INFOLDER | SHGDN_FORADDRESSBAR */
1460 case SIGDN_PARENTRELATIVE: /* SIGDN_INFOLDER */
1461
1462 disp_name.uType = STRRET_WSTR;
1463 ret = IShellFolder_GetDisplayNameOf(psfparent, child_pidl,
1464 sigdnName & 0xffff,
1465 &disp_name);
1466 if(SUCCEEDED(ret))
1467 ret = StrRetToStrW(&disp_name, pidl, ppszName);
1468
1469 break;
1470
1471 case SIGDN_FILESYSPATH:
1473 if(SHGetPathFromIDListW(pidl, *ppszName))
1474 {
1475 TRACE("Got string %s\n", debugstr_w(*ppszName));
1476 ret = S_OK;
1477 }
1478 else
1479 {
1481 ret = E_INVALIDARG;
1482 }
1483 break;
1484
1485 case SIGDN_URL:
1486 default:
1487 FIXME("Unsupported SIGDN %x\n", sigdnName);
1488 ret = E_FAIL;
1489 }
1490
1491 IShellFolder_Release(psfparent);
1492 }
1493 return ret;
1494}
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:1344
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(), GetParsingName(), and init_function_pointers().

◆ SHGetPathCchFromIDListW()

HRESULT WINAPI SHGetPathCchFromIDListW ( _In_ LPCITEMIDLIST  pidl,
_Out_writes_(cchPathMax) LPWSTR  pszPath,
_In_ SIZE_T  cchPathMax 
)

Definition at line 1299 of file pidl.c.

1303{
1304 HRESULT hr;
1305 LPCITEMIDLIST pidlLast;
1306 LPSHELLFOLDER psfFolder;
1308 STRRET strret;
1309
1310 TRACE_(shell)("(pidl=%p,%p)\n", pidl, pszPath);
1311 pdump(pidl);
1312
1313 *pszPath = UNICODE_NULL;
1314 if (!pidl)
1315 return E_FAIL;
1316
1317 hr = SHBindToParent(pidl, &IID_IShellFolder, (VOID**)&psfFolder, &pidlLast);
1318 if (FAILED(hr))
1319 {
1320 ERR("SHBindToParent failed: %x\n", hr);
1321 return hr;
1322 }
1323
1324 dwAttributes = SFGAO_FILESYSTEM;
1325 hr = IShellFolder_GetAttributesOf(psfFolder, 1, &pidlLast, &dwAttributes);
1326 if (FAILED(hr) || !(dwAttributes & SFGAO_FILESYSTEM))
1327 {
1328 WARN("Wrong dwAttributes or GetAttributesOf failed: %x\n", hr);
1329 IShellFolder_Release(psfFolder);
1330 return E_FAIL;
1331 }
1332
1333 hr = IShellFolder_GetDisplayNameOf(psfFolder, pidlLast, SHGDN_FORPARSING, &strret);
1334 IShellFolder_Release(psfFolder);
1335 if (FAILED(hr))
1336 return hr;
1337
1338 hr = StrRetToBufW(&strret, pidlLast, pszPath, cchPathMax);
1339
1340 TRACE_(shell)("-- %s, 0x%08x\n",debugstr_w(pszPath), hr);
1341 return hr;
1342}
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1522
#define UNICODE_NULL
DWORD dwAttributes
Definition: vdmdbg.h:34

Referenced by SHGetPathFromIDListW().

◆ SHGetPathFromIDListA()

BOOL WINAPI SHGetPathFromIDListA ( LPCITEMIDLIST  pidl,
LPSTR  pszPath 
)

Definition at line 1282 of file pidl.c.

1283{
1284 WCHAR wszPath[MAX_PATH];
1285 BOOL bSuccess;
1286
1287 bSuccess = SHGetPathFromIDListW(pidl, wszPath);
1288 WideCharToMultiByte(CP_ACP, 0, wszPath, -1, pszPath, MAX_PATH, NULL, NULL);
1289
1290 return bSuccess;
1291}
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 1344 of file pidl.c.

1345{
1346 return SUCCEEDED(SHGetPathCchFromIDListW(pidl, pszPath, MAX_PATH));
1347}
HRESULT WINAPI SHGetPathCchFromIDListW(_In_ LPCITEMIDLIST pidl, _Out_writes_(cchPathMax) LPWSTR pszPath, _In_ SIZE_T cchPathMax)
Definition: pidl.c:1299

Referenced by BtrfsSend::AddClone(), BrowseCallbackProc(), BtrfsSend::BrowseParent(), BrsFolder_NewFolder(), BrsFolder_OnCommand(), BrsFolder_Treeview_Rename(), ChooseFolder(), CHSourceDlgProc(), CreateDirectoryWatcherFromRegEntry(), CNewMenu::CreateNewFolder(), CNewMenu::CreateNewItem(), CCopyMoveToMenu::DoAction(), CDefaultContextMenu::DoCreateNewFolder(), DoGetDir(), DoGetFileTitle(), DoInitAliasPIDLs(), DoPathes(), CCopyMoveToMenu::DoRealFileOp(), 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(), IsPidlPrograms(), LoadRdpSettingsFromFile(), CShellBrowser::OnAddToFavorites(), CZipExtract::CExtractSettingsPage::OnBrowse(), CDefView::OnNotify(), 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 746 of file pidl.c.

747{
748 IDataObject* pDataObj;
749 HRESULT hr;
750
751 hr = IShellFolder_GetUIObjectOf(lpsf, 0, 1, &pidlSimple,
752 &IID_IDataObject, 0, (LPVOID*)&pDataObj);
753 if (SUCCEEDED(hr))
754 {
755 STGMEDIUM medium;
756 FORMATETC fmt;
757
759 fmt.ptd = NULL;
760 fmt.dwAspect = DVASPECT_CONTENT;
761 fmt.lindex = -1;
762 fmt.tymed = TYMED_HGLOBAL;
763
764 hr = IDataObject_GetData(pDataObj, &fmt, &medium);
765
766 IDataObject_Release(pDataObj);
767
768 if (SUCCEEDED(hr))
769 {
770 /*assert(pida->cidl==1);*/
771 LPIDA pida = GlobalLock(medium.u.hGlobal);
772
773 LPCITEMIDLIST pidl_folder = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]);
774 LPCITEMIDLIST pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[1]);
775
776 *pidlReal = ILCombine(pidl_folder, pidl_child);
777
778 if (!*pidlReal)
780
781 GlobalUnlock(medium.u.hGlobal);
782 GlobalFree(medium.u.hGlobal);
783 }
784 }
785
786 return hr;
787}
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:499
Definition: shlobj.h:565
UINT aoffset[1]
Definition: shlobj.h:566
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 796 of file pidl.c.

797{
798 FIXME("(pidl=%p)\n",pidl);
799
800 pdump(pidl);
801
802 return 0;
803}

◆ SHParseDisplayName()

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

Definition at line 1396 of file pidl.c.

1398{
1399 IShellFolder *psfDesktop;
1401 ULONG dwAttr=sfgaoIn;
1402
1403 if(!ppidl)
1404 return E_INVALIDARG;
1405
1406 if (!pszName)
1407 {
1408 *ppidl = NULL;
1409 return E_INVALIDARG;
1410 }
1411
1412 hr = SHGetDesktopFolder(&psfDesktop);
1413 if (FAILED(hr))
1414 {
1415 *ppidl = NULL;
1416 return hr;
1417 }
1418
1419 hr = IShellFolder_ParseDisplayName(psfDesktop, (HWND)NULL, pbc, (LPOLESTR)pszName, (ULONG *)NULL, ppidl, &dwAttr);
1420
1421 IShellFolder_Release(psfDesktop);
1422
1423 if (SUCCEEDED(hr))
1424 {
1425 if (psfgaoOut) *psfgaoOut = dwAttr;
1426 }
1427 else
1428 {
1429 *ppidl = NULL;
1430 }
1431
1432 return hr;
1433}
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 1093 of file pidl.c.

1094{
1095 LPITEMIDLIST pidl = NULL;
1096 LPWSTR wPath = NULL;
1097 int len;
1098
1099 TRACE("%s\n", debugstr_a(lpszPath));
1100
1101 if (lpszPath)
1102 {
1103 len = MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, NULL, 0);
1104 wPath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1105 MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, wPath, len);
1106 }
1107#ifdef __REACTOS__
1108 // FIXME: Needs folder attribute
1109 if (PathFileExistsW(wPath))
1110 {
1111 pidl = ILCreateFromPathW(wPath);
1112 HeapFree(GetProcessHeap(), 0, wPath);
1113 return pidl;
1114 }
1115#endif
1116
1117 _ILParsePathW(wPath, NULL, TRUE, &pidl, NULL);
1118
1119 HeapFree(GetProcessHeap(), 0, wPath);
1120 TRACE("%s %p\n", debugstr_a(lpszPath), pidl);
1121 return pidl;
1122}
#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:1034

Referenced by SHSimpleIDListFromPathAW().

◆ SHSimpleIDListFromPathAW()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW ( LPCVOID  lpszPath)

Definition at line 1140 of file pidl.c.

1141{
1142 if ( SHELL_OsIsUnicode())
1143 return SHSimpleIDListFromPathW (lpszPath);
1144 return SHSimpleIDListFromPathA (lpszPath);
1145}
LPITEMIDLIST WINAPI SHSimpleIDListFromPathA(LPCSTR lpszPath)
Definition: pidl.c:1093
LPITEMIDLIST WINAPI SHSimpleIDListFromPathW(LPCWSTR lpszPath)
Definition: pidl.c:1124

◆ SHSimpleIDListFromPathW()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathW ( LPCWSTR  lpszPath)

Definition at line 1124 of file pidl.c.

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

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  )