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

Go to the source code of this file.

Macros

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

Functions

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

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 28 of file pidl.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 29 of file pidl.c.

◆ NONAMELESSSTRUCT

#define NONAMELESSSTRUCT

Definition at line 31 of file pidl.c.

◆ NONAMELESSUNION

#define NONAMELESSUNION

Definition at line 30 of file pidl.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 27 of file pidl.c.

Function Documentation

◆ _ILAlloc()

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

Definition at line 1580 of file pidl.c.

1581{
1582 LPITEMIDLIST pidlOut = NULL;
1583
1584 pidlOut = SHAlloc(size + 5);
1585 if(pidlOut)
1586 {
1588 LPITEMIDLIST pidlNext;
1589
1590 ZeroMemory(pidlOut, size + 5);
1591 pidlOut->mkid.cb = size + 3;
1592
1593 pData = _ILGetDataPointer(pidlOut);
1594 if (pData)
1595 pData->type = type;
1596
1597 pidlNext = ILGetNext(pidlOut);
1598 if (pidlNext)
1599 pidlNext->mkid.cb = 0x00;
1600 TRACE("-- (pidl=%p, size=%u)\n", pidlOut, size);
1601 }
1602
1603 return pidlOut;
1604}
#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:2191
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 2667 of file pidl.c.

2668{
2669 UINT i;
2670 PITEMID_CHILD *apidldest;
2671
2672 if (!apidlsrc)
2673 return NULL;
2674
2675 apidldest = SHAlloc(cidl * sizeof(PITEMID_CHILD));
2676
2677 for (i = 0; i < cidl; i++)
2678 apidldest[i] = ILClone(apidlsrc[i]);
2679
2680 return apidldest;
2681}
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 2688 of file pidl.c.

2689{
2690 UINT i;
2692
2693 dst = SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
2694 if (!dst)
2695 return NULL;
2696
2697 if (pidl)
2698 *pidl = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[0]]));
2699
2700 for (i = 0; i < cida->cidl; i++)
2701 dst[i] = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[i + 1]]));
2702
2703 return dst;
2704}
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 1685 of file pidl.c.

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

◆ _ILCreateBitBucket()

LPITEMIDLIST _ILCreateBitBucket ( void  )

Definition at line 1679 of file pidl.c.

1680{
1681 TRACE("()\n");
1682 return _ILCreateGuid(PT_GUID, &CLSID_RecycleBin);
1683}

Referenced by SHGetFolderLocation().

◆ _ILCreateControlPanel()

LPITEMIDLIST _ILCreateControlPanel ( void  )

Definition at line 1635 of file pidl.c.

1636{
1637 LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
1638
1639 TRACE("()\n");
1640 if (parent)
1641 {
1642 LPITEMIDLIST cpl = _ILCreateGuid(PT_SHELLEXT, &CLSID_ControlPanel);
1643
1644 if (cpl)
1645 {
1646 ret = ILCombine(parent, cpl);
1647 SHFree(cpl);
1648 }
1649 SHFree(parent);
1650 }
1651 return ret;
1652}
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 1606 of file pidl.c.

1607{
1609
1610 TRACE("()\n");
1611 ret = SHAlloc(2);
1612 if (ret)
1613 ret->mkid.cb = 0;
1614 return ret;
1615}

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

◆ _ILCreateDrive()

LPITEMIDLIST _ILCreateDrive ( LPCWSTR  lpszNew)

Definition at line 1812 of file pidl.c.

1813{
1814 LPITEMIDLIST pidlOut;
1815
1816 TRACE("(%s)\n",debugstr_w(lpszNew));
1817
1818 pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct));
1819 if (pidlOut)
1820 {
1821 LPSTR pszDest;
1822
1823 pszDest = _ILGetTextPointer(pidlOut);
1824 if (pszDest)
1825 {
1826 strcpy(pszDest, "x:\\");
1827 pszDest[0]=toupperW(lpszNew[0]);
1828 TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
1829 }
1830 }
1831 return pidlOut;
1832}
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:2258
static LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size)
Definition: pidl.c:1580
#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 1834 of file pidl.c.

1835{
1836 LPITEMIDLIST pidlOut;
1837
1838 TRACE("\n");
1839
1840 pidlOut = _ILAlloc(PT_NETWORK, FIELD_OFFSET(PIDLDATA, u.network.szNames[sizeof("Entire Network")]));
1841 if (pidlOut)
1842 {
1844
1845 pData->u.network.dummy = 0;
1846 strcpy(pData->u.network.szNames, "Entire Network");
1847 }
1848 return pidlOut;
1849}
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 1745 of file pidl.c.

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

1794{
1795 HANDLE hFile;
1796 WIN32_FIND_DATAW stffile;
1797
1798 if (!ppidl)
1799 return E_INVALIDARG;
1800
1801 hFile = FindFirstFileW(szPath, &stffile);
1804
1806
1807 *ppidl = _ILCreateFromFindDataW(&stffile);
1808
1809 return *ppidl ? S_OK : E_OUTOFMEMORY;
1810}
#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:1745
#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 1691 of file pidl.c.

1692{
1693 LPITEMIDLIST pidlOut;
1694
1695 if (type == PT_SHELLEXT || type == PT_GUID || type == PT_YAGUID)
1696 {
1697 pidlOut = _ILAlloc(type, sizeof(GUIDStruct));
1698 if (pidlOut)
1699 {
1701
1702 pData->u.guid.guid = *guid;
1703 TRACE("-- create GUID-pidl %s\n",
1704 debugstr_guid(&(pData->u.guid.guid)));
1705 }
1706 }
1707 else
1708 {
1709 WARN("%d: invalid type for GUID\n", type);
1710 pidlOut = NULL;
1711 }
1712 return pidlOut;
1713}
#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 1716 of file pidl.c.

1717{
1718 IID iid;
1719
1720 if (FAILED(SHCLSIDFromStringA(szGUID, &iid)))
1721 {
1722 ERR("%s is not a GUID\n", szGUID);
1723 return NULL;
1724 }
1725 return _ILCreateGuid(PT_GUID, &iid);
1726}
#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 1729 of file pidl.c.

1730{
1731 IID iid;
1732
1733#ifndef __REACTOS__
1734 if (FAILED(SHCLSIDFromStringW(szGUID, &iid)))
1735#else
1736 if (!GUIDFromStringW(szGUID, &iid))
1737#endif
1738 {
1739 ERR("%s is not a GUID\n", debugstr_w(szGUID));
1740 return NULL;
1741 }
1742 return _ILCreateGuid(PT_GUID, &iid);
1743}
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 1629 of file pidl.c.

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

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

◆ _ILCreateMyComputer()

LPITEMIDLIST _ILCreateMyComputer ( void  )

Definition at line 1617 of file pidl.c.

1618{
1619 TRACE("()\n");
1620 return _ILCreateGuid(PT_GUID, &CLSID_MyComputer);
1621}

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

◆ _ILCreateMyDocuments()

LPITEMIDLIST _ILCreateMyDocuments ( void  )

Definition at line 1623 of file pidl.c.

1624{
1625 TRACE("()\n");
1626 return _ILCreateGuid(PT_GUID, &CLSID_MyDocuments);
1627}

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

◆ _ILCreateNetwork()

LPITEMIDLIST _ILCreateNetwork ( void  )

Definition at line 1673 of file pidl.c.

1674{
1675 TRACE("()\n");
1676 return _ILCreateGuid(PT_GUID, &CLSID_NetworkPlaces);
1677}

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

◆ _ILCreatePrinters()

LPITEMIDLIST _ILCreatePrinters ( void  )

Definition at line 1654 of file pidl.c.

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

Referenced by SHGetFolderLocation().

◆ _ILFreeaPidl()

void _ILFreeaPidl ( LPITEMIDLIST apidl,
UINT  cidl 
)

Definition at line 2650 of file pidl.c.

2651{
2652 UINT i;
2653
2654 if (apidl)
2655 {
2656 for (i = 0; i < cidl; i++)
2657 SHFree(apidl[i]);
2658 SHFree(apidl);
2659 }
2660}

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

1860{
1861 TRACE("(%p,%p,%u)\n",pidl,pOut,uSize);
1862
1863 if(_ILIsMyComputer(pidl))
1864 pidl = ILGetNext(pidl);
1865
1866 if (pidl && _ILIsDrive(pidl))
1867 return _ILSimpleGetText(pidl, pOut, uSize);
1868
1869 return 0;
1870}
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
Definition: pidl.c:1935
DWORD _ILSimpleGetText(LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
Definition: pidl.c:2039
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
Definition: pidl.c:1968

Referenced by _ILGetDriveType(), and DrivesContextMenuCallback().

◆ _ILGetExtension()

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

Definition at line 2491 of file pidl.c.

2492{
2493 char szTemp[MAX_PATH];
2494 const char * pPoint;
2495 LPCITEMIDLIST pidlTemp=pidl;
2496
2497 TRACE("pidl=%p\n",pidl);
2498
2499 if (!pidl)
2500 return FALSE;
2501
2502 pidlTemp = ILFindLastID(pidl);
2503
2504 if (!_ILIsValue(pidlTemp))
2505 return FALSE;
2506 if (!_ILSimpleGetText(pidlTemp, szTemp, MAX_PATH))
2507 return FALSE;
2508
2509 pPoint = PathFindExtensionA(szTemp);
2510
2511 if (!*pPoint)
2512 return FALSE;
2513
2514 pPoint++;
2515 lstrcpynA(pOut, pPoint, uOutSize);
2516 TRACE("%s\n",pOut);
2517
2518 return TRUE;
2519}
#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:1989

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

◆ _ILGetFileAttributes()

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

Definition at line 2610 of file pidl.c.

2611{
2613 WORD wAttrib = 0;
2614 int i;
2615
2616 if (!pData)
2617 return 0;
2618
2619 switch(pData->type)
2620 {
2621 case PT_FOLDER:
2622 case PT_VALUE:
2623 wAttrib = pData->u.file.uFileAttribs;
2624 break;
2625 }
2626
2627 if(uOutSize >= 6)
2628 {
2629 i=0;
2630 if(wAttrib & FILE_ATTRIBUTE_READONLY)
2631 pOut[i++] = 'R';
2632 if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
2633 pOut[i++] = 'H';
2634 if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
2635 pOut[i++] = 'S';
2636 if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
2637 pOut[i++] = 'A';
2638 if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
2639 pOut[i++] = 'C';
2640 pOut[i] = 0x00;
2641 }
2642 return wAttrib;
2643}
#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 2426 of file pidl.c.

2427{
2428 FILETIME ft,lft;
2430 BOOL ret;
2431
2432 if (_ILGetFileDateTime( pidl, &ft ))
2433 {
2434 FileTimeToLocalFileTime(&ft, &lft);
2435 FileTimeToSystemTime (&lft, &time);
2436
2438 if (ret)
2439 {
2440 /* Append space + time without seconds */
2441 pOut[ret-1] = ' ';
2443 }
2444 }
2445 else
2446 {
2447 pOut[0] = '\0';
2448 ret = FALSE;
2449 }
2450 return ret;
2451}
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:2407
#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 2407 of file pidl.c.

2408{
2410
2411 if (!pdata)
2412 return FALSE;
2413
2414 switch (pdata->type)
2415 {
2416 case PT_FOLDER:
2417 case PT_VALUE:
2418 DosDateTimeToFileTime(pdata->u.file.uFileDate, pdata->u.file.uFileTime, pFt);
2419 break;
2420 default:
2421 return FALSE;
2422 }
2423 return TRUE;
2424}
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 2470 of file pidl.c.

2471{
2473 DWORD dwSize;
2474
2475 if (!pdata)
2476 return 0;
2477
2478 switch (pdata->type)
2479 {
2480 case PT_VALUE:
2481 dwSize = pdata->u.file.dwFileSize;
2482 if (pOut)
2483 StrFormatKBSizeA(dwSize, pOut, uOutSize);
2484 return dwSize;
2485 }
2486 if (pOut)
2487 *pOut = 0x00;
2488 return 0;
2489}
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 2365 of file pidl.c.

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

2538{
2539#ifdef __REACTOS__ /* r32966 */
2540 char sType[64];
2541#endif
2542
2543 if(_ILIsValue(pidl))
2544 {
2545 char sTemp[64];
2546
2547 if(uOutSize > 0)
2548 pOut[0] = 0;
2549#ifdef __REACTOS__ /* r32966 */
2550 if (_ILGetExtension (pidl, sType, 64))
2551 {
2552 if (HCR_MapTypeToValueA(sType, sTemp, 64, TRUE))
2553 {
2554 /* retrieve description */
2555 if(HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE ))
2556 return;
2557 }
2558 /* display Ext-file as description */
2559 _strupr(sType);
2560 /* load localized file string */
2561 sTemp[0] = '\0';
2563 {
2564 sTemp[63] = '\0';
2565 StringCchPrintfA(pOut, uOutSize, sTemp, sType);
2566 }
2567 }
2568#else
2569 if (_ILGetExtension (pidl, sTemp, 64))
2570 {
2571 if (!( HCR_MapTypeToValueA(sTemp, sTemp, 64, TRUE)
2572 && HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE )))
2573 {
2574 lstrcpynA (pOut, sTemp, uOutSize - 6);
2575 strcat (pOut, "-file");
2576 }
2577 }
2578#endif
2579 }
2580 else
2581#ifdef __REACTOS__ /* r32966 */
2582 {
2583 pOut[0] = '\0';
2585 /* make sure its null terminated */
2586 pOut[uOutSize-1] = '\0';
2587 }
2588#else
2589 lstrcpynA(pOut, "Folder", uOutSize);
2590#endif
2591}
#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:2491
_CRTIMP char *__cdecl _strupr(_Inout_z_ char *_String)
BOOL HCR_MapTypeToValueA(LPCSTR szExtension, LPSTR szFileType, LONG len, BOOL bPrependDot)
Definition: classes.c:88
#define IDS_DIRECTORY
Definition: shresdef.h: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 2329 of file pidl.c.

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

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

2302{
2303 /* TRACE(pidl,"(pidl%p)\n", pidl); */
2304
2306
2307 if (!pdata)
2308 return NULL;
2309
2310 switch (pdata->type)
2311 {
2312 case PT_FOLDER:
2313 case PT_VALUE:
2314 case PT_IESPECIAL1:
2315 case PT_IESPECIAL2:
2316 return pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1;
2317
2318 case PT_WORKGRP:
2319 return pdata->u.network.szNames + strlen (pdata->u.network.szNames) + 1;
2320 }
2321 return NULL;
2322}
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 2258 of file pidl.c.

2259{
2260 /* TRACE(pidl,"(pidl%p)\n", pidl);*/
2261
2263
2264 if (!pdata)
2265 return NULL;
2266
2267 switch (pdata->type)
2268 {
2269 case PT_GUID:
2270 case PT_SHELLEXT:
2271 case PT_YAGUID:
2272 return NULL;
2273
2274 case PT_DRIVE:
2275 case PT_DRIVE1:
2276 case PT_DRIVE2:
2277 case PT_DRIVE3:
2278 return pdata->u.drive.szDriveName;
2279
2280 case PT_FOLDER:
2281 case PT_FOLDER1:
2282 case PT_VALUE:
2283 case PT_IESPECIAL1:
2284 case PT_IESPECIAL2:
2285 return pdata->u.file.szNames;
2286
2287 case PT_WORKGRP:
2288 case PT_COMP:
2289 case PT_NETWORK:
2290 case PT_NETPROVIDER:
2291 case PT_SHARE:
2292 return pdata->u.network.szNames;
2293 }
2294 return NULL;
2295}
#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 2202 of file pidl.c.

2203{
2204 /* TRACE(pidl,"(pidl%p)\n", pidl);*/
2205
2207
2208 if (!pdata)
2209 return NULL;
2210
2211 switch (pdata->type)
2212 {
2213 case PT_GUID:
2214 case PT_SHELLEXT:
2215 case PT_YAGUID:
2216 return NULL;
2217
2218 case PT_DRIVE:
2219 case PT_DRIVE1:
2220 case PT_DRIVE2:
2221 case PT_DRIVE3:
2222 /*return (LPSTR)&(pdata->u.drive.szDriveName);*/
2223 return NULL;
2224
2225 case PT_FOLDER:
2226 case PT_FOLDER1:
2227 case PT_VALUE:
2228 case PT_IESPECIAL1:
2229 case PT_IESPECIAL2:
2230 /*return (LPSTR)&(pdata->u.file.szNames);*/
2231 return NULL;
2232
2233 case PT_WORKGRP:
2234 case PT_COMP:
2235 case PT_NETWORK:
2236 case PT_NETPROVIDER:
2237 case PT_SHARE:
2238 /*return (LPSTR)&(pdata->u.network.szNames);*/
2239 return NULL;
2240
2241 case PT_VALUEW:
2242 return (LPWSTR)pdata->u.file.szNames;
2243
2244#ifdef __REACTOS__ /* r54423 */
2245 case PT_CPLAPPLET:
2246 return pdata->u.cpanel.szName;
2247#endif
2248
2249 }
2250 return NULL;
2251}
#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:2365
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2329
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: pidl.c:1895

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

◆ _ILIsBitBucket()

BOOL _ILIsBitBucket ( LPCITEMIDLIST  pidl)

Definition at line 1946 of file pidl.c.

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

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

◆ _ILIsControlPanel()

BOOL _ILIsControlPanel ( 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_ControlPanel);
1932 return FALSE;
1933}

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

◆ _ILIsCPanelStruct()

BOOL _ILIsCPanelStruct ( LPCITEMIDLIST  pidl)

Definition at line 1998 of file pidl.c.

1999{
2000 LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
2001
2002 TRACE("(%p)\n",pidl);
2003
2004 return (pidl && lpPData && (lpPData->type == 0));
2005}

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

◆ _ILIsDesktop()

BOOL _ILIsDesktop ( LPCITEMIDLIST  pidl)
inline

Definition at line 1895 of file pidl.c.

1896{
1897 TRACE("(%p)\n",pidl);
1898
1899 return !pidl || !pidl->mkid.cb;
1900}

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

◆ _ILIsDrive()

◆ _ILIsFolder()

◆ _ILIsMyComputer()

BOOL _ILIsMyComputer ( LPCITEMIDLIST  pidl)

Definition at line 1935 of file pidl.c.

1936{
1937 REFIID iid = _ILGetGUIDPointer(pidl);
1938
1939 TRACE("(%p)\n",pidl);
1940
1941 if (iid)
1942 return IsEqualIID(iid, &CLSID_MyComputer);
1943 return FALSE;
1944}
#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 1902 of file pidl.c.

1903{
1904 IID *iid = _ILGetGUIDPointer(pidl);
1905
1906 TRACE("(%p)\n", pidl);
1907
1908 if (iid)
1909 return IsEqualIID(iid, &CLSID_MyDocuments);
1910 return FALSE;
1911}

◆ _ILIsNetHood()

BOOL _ILIsNetHood ( 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_NetworkPlaces);
1921 return FALSE;
1922}

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

◆ _ILIsPidlSimple()

BOOL _ILIsPidlSimple ( LPCITEMIDLIST  pidl)

Definition at line 2010 of file pidl.c.

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

Referenced by SHBindToParent().

◆ _ILIsSpecialFolder()

BOOL _ILIsSpecialFolder ( LPCITEMIDLIST  pidl)

Definition at line 1957 of file pidl.c.

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

Referenced by SHGetDataFromIDListA().

◆ _ILIsUnicode()

BOOL _ILIsUnicode ( LPCITEMIDLIST  pidl)

Definition at line 1886 of file pidl.c.

1887{
1888 LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1889
1890 TRACE("(%p)\n",pidl);
1891
1892 return (pidl && lpPData && PT_VALUEW == lpPData->type);
1893}

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

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

Referenced by _ILGetDrive(), and _ILGetExtension().

◆ _ILSimpleGetTextW()

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

Definition at line 2111 of file pidl.c.

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

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

◆ Alloc()

LPVOID WINAPI Alloc ( INT  )

Referenced by ILGlobalClone().

◆ Free()

BOOL WINAPI Free ( LPVOID  lpMem)

Definition at line 116 of file comctl32undoc.c.

117{
118 return !LocalFree( lpMem );
119}
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c: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(), CNetworkConnections::GetCurFolder(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetCurFolder(), CZipFolder::GetCurFolder(), CFindFolder::GetCurFolder(), CAdminToolsFolder::GetCurFolder(), CControlPanelFolder::GetCurFolder(), CDesktopFolder::GetCurFolder(), CDrivesFolder::GetCurFolder(), CFontsFolder::GetCurFolder(), CFSFolder::GetCurFolder(), CMyDocsFolder::GetCurFolder(), CNetFolder::GetCurFolder(), CPrinterFolder::GetCurFolder(), CRecycleBin::GetCurFolder(), CShellItem::GetIDList(), CShellLink::GetIDList(), GetParentPidl(), CShellBrowser::GetPidl(), CTravelEntry::GetPidl(), GetPidlFromDataObject(), CMenuSFToolbar::GetShellFolder(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetUIObjectOf(), CShellBrowser::GetWindowData(), ILAppendID(), ILCombine(), ILIsParentOrSpecialParent(), CViewStatePropertyBag::Init(), init_function_pointers(), CDefaultContextMenu::Initialize(), CRegFolder::Initialize(), CFolderItem::Initialize(), CFontExt::Initialize(), CRecycleBinItemContextMenu::Initialize(), CNtObjectFolderExtractIcon::Initialize(), CRegistryFolderExtractIcon::Initialize(), CFolder::Initialize(), CFolderItems::Initialize(), CNetworkConnections::Initialize(), CCommonFolder< TSelf, TItemId, TExtractIcon >::Initialize(), CNtObjectFolder::Initialize(), CRegistryFolder::Initialize(), CZipFolder::Initialize(), CFindFolder::Initialize(), CAdminToolsFolder::Initialize(), CControlPanelFolder::Initialize(), CFontsFolder::Initialize(), CFSFolder::Initialize(), CMyDocsFolder::Initialize(), CNetFolder::Initialize(), CPrinterFolder::Initialize(), CRecycleBin::Initialize(), CMergedFolder::Initialize(), CACListISF::Initialize(), CNewMenu::Initialize(), CCopyMoveToMenu::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(), CFindFolderContextMenu::InvokeCommand(), CDefaultContextMenu::InvokePidl(), IShellBrowserImpl_BrowseObject(), CSendToMenu::LoadAllItems(), CDefView::OnNotify(), CExplorerBand::OnWinEvent(), CCommonFolder< TSelf, TItemId, TExtractIcon >::ParseDisplayName(), CFolder::ParseName(), CAddressEditBox::ParseNow(), CExplorerBand::RefreshTreePidl(), RenderFILENAMEA(), RenderFILENAMEW(), RenderHDROP(), SHCreateShellItem(), SHELL32_CoCreateInitSF(), SHELL32_ParseNextElement(), SHGetRealIDL(), SHOpenFolderAndSelectItems(), test_SHCreateShellItem(), test_SHCreateShellItemArray(), 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:130

◆ 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(), 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(), 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(), 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:68

Referenced by SHOpenFolderWindow().

◆ ILGetDisplayNameEx()

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

Definition at line 162 of file pidl.c.

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

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

◆ ILGetDisplayNameExA()

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

Definition at line 74 of file pidl.c.

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

Referenced by ILGetDisplayName(), and ILGetDisplayNameEx().

◆ ILGetDisplayNameExW()

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

Definition at line 91 of file pidl.c.

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

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

◆ ILGetNext()

◆ ILGetSize()

UINT WINAPI ILGetSize ( LPCITEMIDLIST  pidl)

Definition at line 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 1341 of file pidl.c.

1342{
1343 IShellFolder * psfDesktop;
1345
1346 TRACE_(shell)("pidl=%p\n", pidl);
1347 pdump(pidl);
1348
1349 if (!pidl || !ppv)
1350 return E_INVALIDARG;
1351
1352 *ppv = NULL;
1353 if (ppidlLast)
1354 *ppidlLast = NULL;
1355
1356 hr = SHGetDesktopFolder(&psfDesktop);
1357 if (FAILED(hr))
1358 return hr;
1359
1360 if (_ILIsPidlSimple(pidl))
1361 {
1362 /* we are on desktop level */
1363 hr = IShellFolder_QueryInterface(psfDesktop, riid, ppv);
1364 }
1365 else
1366 {
1367 LPITEMIDLIST pidlParent = ILClone(pidl);
1368 ILRemoveLastID(pidlParent);
1369 hr = IShellFolder_BindToObject(psfDesktop, pidlParent, NULL, riid, ppv);
1370 SHFree (pidlParent);
1371 }
1372
1373 IShellFolder_Release(psfDesktop);
1374
1375 if (SUCCEEDED(hr) && ppidlLast)
1376 *ppidlLast = ILFindLastID(pidl);
1377
1378 TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08x\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
1379 return hr;
1380}
REFIID LPVOID * ppv
Definition: atlbase.h:39
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:212
BOOL _ILIsPidlSimple(LPCITEMIDLIST pidl)
Definition: pidl.c:2010
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(), CExplorerBand::OnTreeItemDragging(), CExplorerBand::OnWinEvent(), r_verify_pidl(), CAddressEditBox::RefreshAddress(), RSHELL_CStartMenu_CreateInstance(), SHELL_execute(), SHELL_PidlGetIconLocationW(), shellex_get_contextmenu(), shellex_get_dataobj(), SHGetFileInfoW(), SHGetNameFromIDList(), SHGetPathFromIDListW(), 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:2301
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2610
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2470
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:1957
#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 1490 of file pidl.c.

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

1428{
1429 IShellFolder *psfparent;
1430 LPCITEMIDLIST child_pidl;
1431 STRRET disp_name;
1432 HRESULT ret;
1433
1434 TRACE("%p 0x%08x %p\n", pidl, sigdnName, ppszName);
1435
1436 *ppszName = NULL;
1437 ret = SHBindToParent(pidl, &IID_IShellFolder, (void**)&psfparent, &child_pidl);
1438 if(SUCCEEDED(ret))
1439 {
1440 switch(sigdnName)
1441 {
1442 /* sigdnName & 0xffff */
1443 case SIGDN_NORMALDISPLAY: /* SHGDN_NORMAL */
1444 case SIGDN_PARENTRELATIVEPARSING: /* SHGDN_INFOLDER | SHGDN_FORPARSING */
1445 case SIGDN_PARENTRELATIVEEDITING: /* SHGDN_INFOLDER | SHGDN_FOREDITING */
1446 case SIGDN_DESKTOPABSOLUTEPARSING: /* SHGDN_FORPARSING */
1447 case SIGDN_DESKTOPABSOLUTEEDITING: /* SHGDN_FOREDITING | SHGDN_FORADDRESSBAR*/
1448 case SIGDN_PARENTRELATIVEFORADDRESSBAR: /* SIGDN_INFOLDER | SHGDN_FORADDRESSBAR */
1449 case SIGDN_PARENTRELATIVE: /* SIGDN_INFOLDER */
1450
1451 disp_name.uType = STRRET_WSTR;
1452 ret = IShellFolder_GetDisplayNameOf(psfparent, child_pidl,
1453 sigdnName & 0xffff,
1454 &disp_name);
1455 if(SUCCEEDED(ret))
1456 ret = StrRetToStrW(&disp_name, pidl, ppszName);
1457
1458 break;
1459
1460 case SIGDN_FILESYSPATH:
1462 if(SHGetPathFromIDListW(pidl, *ppszName))
1463 {
1464 TRACE("Got string %s\n", debugstr_w(*ppszName));
1465 ret = S_OK;
1466 }
1467 else
1468 {
1470 ret = E_INVALIDARG;
1471 }
1472 break;
1473
1474 case SIGDN_URL:
1475 default:
1476 FIXME("Unsupported SIGDN %x\n", sigdnName);
1477 ret = E_FAIL;
1478 }
1479
1480 IShellFolder_Release(psfparent);
1481 }
1482 return ret;
1483}
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:1298
SIGDN PWSTR * ppszName
Definition: shobjidl.idl:595
SIGDN sigdnName
Definition: shobjidl.idl:595
@ STRRET_WSTR
Definition: shtypes.idl:85
UINT uType
Definition: shtypes.idl:93

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

◆ SHGetPathFromIDListA()

BOOL WINAPI SHGetPathFromIDListA ( LPCITEMIDLIST  pidl,
LPSTR  pszPath 
)

Definition at line 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 1298 of file pidl.c.

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

Referenced by BtrfsSend::AddClone(), BrowseCallbackProc(), BtrfsSend::BrowseParent(), BrsFolder_NewFolder(), BrsFolder_OnCommand(), BrsFolder_Treeview_Rename(), ChooseFolder(), CHSourceDlgProc(), CreateDirectoryWatcherFromRegEntry(), CNewMenu::CreateNewFolder(), CNewMenu::CreateNewItem(), 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(), LoadRdpSettingsFromFile(), 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 1385 of file pidl.c.

1387{
1388 IShellFolder *psfDesktop;
1390 ULONG dwAttr=sfgaoIn;
1391
1392 if(!ppidl)
1393 return E_INVALIDARG;
1394
1395 if (!pszName)
1396 {
1397 *ppidl = NULL;
1398 return E_INVALIDARG;
1399 }
1400
1401 hr = SHGetDesktopFolder(&psfDesktop);
1402 if (FAILED(hr))
1403 {
1404 *ppidl = NULL;
1405 return hr;
1406 }
1407
1408 hr = IShellFolder_ParseDisplayName(psfDesktop, (HWND)NULL, pbc, (LPOLESTR)pszName, (ULONG *)NULL, ppidl, &dwAttr);
1409
1410 IShellFolder_Release(psfDesktop);
1411
1412 if (SUCCEEDED(hr))
1413 {
1414 if (psfgaoOut) *psfgaoOut = dwAttr;
1415 }
1416 else
1417 {
1418 *ppidl = NULL;
1419 }
1420
1421 return hr;
1422}
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  )