ReactOS 0.4.16-dev-1305-ge26ad0d
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 <shellutils.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)
 
EXTERN_C HWND BindCtx_GetUIWindow (_In_ IBindCtx *pBindCtx)
 
EXTERN_C HRESULT BindCtx_RegisterObjectParam (_In_ IBindCtx *pBindCtx, _In_ LPOLESTR pszKey, _In_opt_ IUnknown *punk, _Out_ LPBC *ppbc)
 
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)
 
LPCITEMIDLIST _ILIsParentEx (LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild, BOOL bImmediate)
 
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 SHELL32_CreateSimpleIDListFromPath (LPCWSTR pszPath, DWORD dwAttributes)
 
LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath)
 
LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath)
 
LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW (LPCVOID lpszPath)
 
static HRESULT GetShellFolder2ItemDetailsExToBuffer (IShellFolder2 *psf2, LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, void *buf, UINT cb)
 
static HRESULT GetShellFolder1ItemDetailsExToBuffer (LPSHELLFOLDER psf, LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, void *buf, UINT cb)
 
HRESULT WINAPI SHGetDataFromIDListA (LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID dest, int len)
 
HRESULT WINAPI SHGetDataFromIDListW (LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID dest, int len)
 
BOOL WINAPI SHGetPathFromIDListA (LPCITEMIDLIST pidl, LPSTR pszPath)
 
HRESULT WINAPI SHGetPathCchFromIDListW (_In_ LPCITEMIDLIST pidl, _Out_writes_(cchPathMax) LPWSTR pszPath, _In_ SIZE_T cchPathMax)
 
BOOL WINAPI SHGetPathFromIDListW (LPCITEMIDLIST pidl, LPWSTR pszPath)
 
HRESULT WINAPI SHBindToParent (LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
 
HRESULT WINAPI SHParseDisplayName (LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
 
HRESULT WINAPI SHGetNameFromIDList (PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName)
 
HRESULT WINAPI SHGetItemFromDataObject (IDataObject *pdtobj, DATAOBJ_GET_ITEM_FLAGS dwFlags, REFIID riid, void **ppv)
 
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, BYTE SortOrder)
 
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, LPWSTR pOut, UINT uSize)
 
BOOL _ILIsUnicode (LPCITEMIDLIST pidl)
 
BOOL _ILIsDesktop (LPCITEMIDLIST pidl)
 
BOOL _ILIsMyDocuments (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 _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)
 
DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
 
BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
 
DWORD _ILGetFileAttributes (LPCITEMIDLIST pidl, LPWSTR 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 1762 of file pidl.c.

1763{
1764 LPITEMIDLIST pidlOut = NULL;
1765
1766 pidlOut = SHAlloc(size + 5);
1767 if(pidlOut)
1768 {
1770 LPITEMIDLIST pidlNext;
1771
1772 ZeroMemory(pidlOut, size + 5);
1773 pidlOut->mkid.cb = size + 3;
1774
1775 pData = _ILGetDataPointer(pidlOut);
1776 if (pData)
1777 pData->type = type;
1778
1779 pidlNext = ILGetNext(pidlOut);
1780 if (pidlNext)
1781 pidlNext->mkid.cb = 0x00;
1782 TRACE("-- (pidl=%p, size=%u)\n", pidlOut, size);
1783 }
1784
1785 return pidlOut;
1786}
#define NULL
Definition: types.h:112
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:315
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLsizeiptr size
Definition: glext.h:5919
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2272
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:971
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:1753

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

◆ _ILCopyaPidl()

PITEMID_CHILD * _ILCopyaPidl ( PCUITEMID_CHILD_ARRAY  apidlsrc,
UINT  cidl 
)

Definition at line 2623 of file pidl.c.

2624{
2625 PITEMID_CHILD *apidldest;
2626
2627 if (!apidlsrc)
2628 return NULL;
2629
2630 apidldest = SHAlloc(cidl * sizeof(PITEMID_CHILD));
2631 for (UINT i = 0; i < cidl; i++)
2632 {
2633 PITEMID_CHILD clone = ILClone(apidlsrc[i]);
2634 if ((apidldest[i] = clone) == NULL)
2635 {
2636 _ILFreeaPidl(apidldest, i);
2637 return NULL;
2638 }
2639 }
2640 return apidldest;
2641}
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:238
void _ILFreeaPidl(LPITEMIDLIST *apidl, UINT cidl)
Definition: pidl.c:2608

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

◆ _ILCopyCidaToaPidl()

LPITEMIDLIST * _ILCopyCidaToaPidl ( LPITEMIDLIST pidl,
const CIDA cida 
)

Definition at line 2648 of file pidl.c.

2649{
2650 UINT i;
2651 LPITEMIDLIST *dst = SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
2652 if (!dst)
2653 return NULL;
2654
2655 for (i = 0; i < cida->cidl; i++)
2656 {
2657 PITEMID_CHILD clone = ILClone(HIDA_GetPIDLItem(cida, i));
2658 if ((dst[i] = clone) == NULL)
2659 {
2660 _ILFreeaPidl(dst, i);
2661 return NULL;
2662 }
2663 }
2664
2665 if (pidl)
2666 {
2667 *pidl = ILClone(HIDA_GetPIDLFolder(cida));
2668 if (!*pidl)
2669 {
2670 _ILFreeaPidl(dst, cida->cidl);
2671 return NULL;
2672 }
2673 }
2674 return dst;
2675}
GLenum GLenum dst
Definition: glext.h:6340
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:695
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
Definition: shellutils.h:690
UINT cidl
Definition: shlobj.h:580

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

◆ _ILCreateAdminTools()

LPITEMIDLIST _ILCreateAdminTools ( void  )

Definition at line 1874 of file pidl.c.

1875{
1876 TRACE("()\n");
1877 return _ILCreateGuid(PT_GUID, &CLSID_AdminFolderShortcut, REGITEMORDER_DEFAULT); //FIXME
1878}
const GUID CLSID_AdminFolderShortcut
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid, BYTE SortOrder)
Definition: pidl.c:1880
#define PT_GUID
Definition: pidl.h:87

◆ _ILCreateBitBucket()

LPITEMIDLIST _ILCreateBitBucket ( void  )

Definition at line 1868 of file pidl.c.

1869{
1870 TRACE("()\n");
1871 return _ILCreateGuid(PT_DESKTOP_REGITEM, &CLSID_RecycleBin, REGITEMORDER_RECYCLEBIN);
1872}
#define PT_DESKTOP_REGITEM
Definition: lnktool.cpp:38

Referenced by SHGetFolderLocation().

◆ _ILCreateControlPanel()

LPITEMIDLIST _ILCreateControlPanel ( void  )

Definition at line 1817 of file pidl.c.

1818{
1820
1821 TRACE("()\n");
1822 if (parent)
1823 {
1824 LPITEMIDLIST cpl = _ILCreateGuid(PT_COMPUTER_REGITEM, &CLSID_ControlPanel, REGITEMORDER_MYCOMPUTER_CONTROLS);
1825 if (cpl)
1826 {
1827 ret = ILCombine(parent, cpl);
1828 SHFree(cpl);
1829 }
1830 SHFree(parent);
1831 }
1832 return ret;
1833}
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:337
r parent
Definition: btrfs.c:3010
#define PT_COMPUTER_REGITEM
Definition: lnktool.cpp:39
LPITEMIDLIST _ILCreateMyComputer(void)
Definition: pidl.c:1799
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817
int ret

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

◆ _ILCreateDesktop()

LPITEMIDLIST _ILCreateDesktop ( void  )

Definition at line 1788 of file pidl.c.

1789{
1791
1792 TRACE("()\n");
1793 ret = SHAlloc(2);
1794 if (ret)
1795 ret->mkid.cb = 0;
1796 return ret;
1797}

Referenced by BrFolder_OnOK(), CDesktopFolder::FinalConstruct(), and SHGetFolderLocation().

◆ _ILCreateDrive()

LPITEMIDLIST _ILCreateDrive ( LPCWSTR  lpszNew)

Definition at line 2001 of file pidl.c.

2002{
2003 LPITEMIDLIST pidlOut;
2004
2005 TRACE("(%s)\n",debugstr_w(lpszNew));
2006
2007 pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct));
2008 if (pidlOut)
2009 {
2010 LPSTR pszDest = _ILGetTextPointer(pidlOut);
2011 if (pszDest)
2012 {
2013 lstrcpyA(pszDest, "x:\\");
2014 pszDest[0] = toupper(lpszNew[0]);
2015 TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
2016 }
2017 }
2018 return pidlOut;
2019}
int toupper(int c)
Definition: utclib.c:881
#define debugstr_a
Definition: kernel32.h:31
#define debugstr_w
Definition: kernel32.h:32
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:100
LPSTR _ILGetTextPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2336
static LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size)
Definition: pidl.c:1762
#define PT_DRIVE
Definition: pidl.h:88
char * LPSTR
Definition: xmlstorage.h:182

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

◆ _ILCreateEntireNetwork()

LPITEMIDLIST _ILCreateEntireNetwork ( void  )

Definition at line 2021 of file pidl.c.

2022{
2023 LPITEMIDLIST pidlOut;
2024
2025 TRACE("\n");
2026
2027 pidlOut = _ILAlloc(PT_NETWORK, FIELD_OFFSET(PIDLDATA, u.network.szNames[sizeof("Entire Network")]));
2028 if (pidlOut)
2029 {
2031
2032 pData->u.network.dummy = 0;
2033 strcpy(pData->u.network.szNames, "Entire Network");
2034 }
2035 return pidlOut;
2036}
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
strcpy
Definition: string.h:131
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255

◆ _ILCreateFromFindDataW()

LPITEMIDLIST _ILCreateFromFindDataW ( const WIN32_FIND_DATAW wfd)

Definition at line 1934 of file pidl.c.

1935{
1936 char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
1937 DWORD len, len1, wlen, alen;
1938 LPITEMIDLIST pidl;
1939 PIDLTYPE type;
1940
1941 if (!wfd)
1942 return NULL;
1943
1944 TRACE("(%s, %s)\n",debugstr_w(wfd->cAlternateFileName), debugstr_w(wfd->cFileName));
1945
1946 /* prepare buffer with both names */
1947 len = WideCharToMultiByte(CP_ACP,0,wfd->cFileName,-1,buff,MAX_PATH,NULL,NULL);
1948 len1 = WideCharToMultiByte(CP_ACP,0,wfd->cAlternateFileName,-1, buff+len, sizeof(buff)-len, NULL, NULL);
1949 alen = len + len1;
1950
1951 type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
1952
1953 wlen = lstrlenW(wfd->cFileName) + 1;
1954 pidl = _ILAlloc(type, FIELD_OFFSET(FileStruct, szNames[alen + (alen & 1)]) +
1955 FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD));
1956 if (pidl)
1957 {
1959 FileStruct *fs = &pData->u.file;
1960 FileStructW *fsw;
1961 WORD *pOffsetW;
1962
1963 FileTimeToDosDateTime( &wfd->ftLastWriteTime, &fs->uFileDate, &fs->uFileTime);
1964 fs->dwFileSize = wfd->nFileSizeLow;
1965 fs->uFileAttribs = wfd->dwFileAttributes;
1966 memcpy(fs->szNames, buff, alen);
1967
1968 fsw = (FileStructW*)(pData->u.file.szNames + alen + (alen & 0x1));
1969 fsw->cbLen = FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD);
1970 FileTimeToDosDateTime( &wfd->ftCreationTime, &fsw->uCreationDate, &fsw->uCreationTime);
1971 FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime);
1972 memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR));
1973
1974 pOffsetW = (WORD*)((LPBYTE)pidl + pidl->mkid.cb - sizeof(WORD));
1975 *pOffsetW = (LPBYTE)fsw - (LPBYTE)pidl;
1976 TRACE("-- Set Value: %s\n",debugstr_w(fsw->wszName));
1977 }
1978 return pidl;
1979
1980}
#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:156
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(), CFSFolder::_CreateIDListFromName(), _ILCreateFromPathW(), and CFSFolder::_ParseSimple().

◆ _ILCreateFromPathW()

HRESULT _ILCreateFromPathW ( LPCWSTR  szPath,
LPITEMIDLIST ppidl 
)

Definition at line 1982 of file pidl.c.

1983{
1984 HANDLE hFile;
1985 WIN32_FIND_DATAW stffile;
1986
1987 if (!ppidl)
1988 return E_INVALIDARG;
1989
1990 hFile = FindFirstFileW(szPath, &stffile);
1993
1995
1996 *ppidl = _ILCreateFromFindDataW(&stffile);
1997
1998 return *ppidl ? S_OK : E_OUTOFMEMORY;
1999}
#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:1934
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92

◆ _ILCreateGuid()

LPITEMIDLIST _ILCreateGuid ( PIDLTYPE  type,
REFIID  guid,
BYTE  SortOrder 
)

Definition at line 1880 of file pidl.c.

1881{
1882 LPITEMIDLIST pidlOut;
1883
1884 if (type == PT_SHELLEXT || type == PT_GUID || type == PT_YAGUID)
1885 {
1886 pidlOut = _ILAlloc(type, sizeof(GUIDStruct));
1887 if (pidlOut)
1888 {
1890 pData->u.guid.uSortOrder = SortOrder;
1891 pData->u.guid.guid = *guid;
1892 TRACE("-- create GUID-pidl %s\n",
1893 debugstr_guid(&(pData->u.guid.guid)));
1894 }
1895 }
1896 else
1897 {
1898 WARN("%d: invalid type for GUID\n", type);
1899 pidlOut = NULL;
1900 }
1901 return pidlOut;
1902}
#define WARN(fmt,...)
Definition: precomp.h:61
GUID guid
Definition: version.c:147
#define debugstr_guid
Definition: kernel32.h:35
#define PT_YAGUID
Definition: pidl.h:103
#define PT_SHELLEXT
Definition: pidl.h:91

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

◆ _ILCreateGuidFromStrA()

LPITEMIDLIST _ILCreateGuidFromStrA ( LPCSTR  szGUID)

Definition at line 1905 of file pidl.c.

1906{
1907 IID iid;
1908
1909 if (FAILED(SHCLSIDFromStringA(szGUID, &iid)))
1910 {
1911 ERR("%s is not a GUID\n", szGUID);
1912 return NULL;
1913 }
1914 return _ILCreateGuid(PT_GUID, &iid);
1915}
#define ERR(fmt,...)
Definition: precomp.h:57
DWORD WINAPI SHCLSIDFromStringA(LPCSTR clsid, CLSID *id)
Definition: shellole.c:259
#define FAILED(hr)
Definition: intsafe.h:51

◆ _ILCreateGuidFromStrW()

LPITEMIDLIST _ILCreateGuidFromStrW ( LPCWSTR  szGUID)

Definition at line 1917 of file pidl.c.

1918{
1919 IID iid;
1920
1921#ifndef __REACTOS__
1922 if (FAILED(SHCLSIDFromStringW(szGUID, &iid)))
1923#else
1924 if (!GUIDFromStringW(szGUID, &iid))
1925#endif
1926 {
1927 ERR("%s is not a GUID\n", debugstr_w(szGUID));
1928 return NULL;
1929 }
1930 return _ILCreateGuid(PT_GUID, &iid);
1931}
DWORD WINAPI SHCLSIDFromStringW(LPCWSTR clsid, CLSID *id)
Definition: shellole.c:267
BOOL WINAPI GUIDFromStringW(_In_ PCWSTR psz, _Out_ LPGUID pguid)

◆ _ILCreateIExplore()

LPITEMIDLIST _ILCreateIExplore ( void  )

Definition at line 1811 of file pidl.c.

1812{
1813 TRACE("()\n");
1814 return _ILCreateGuid(PT_DESKTOP_REGITEM, &CLSID_Internet, REGITEMORDER_INTERNET);
1815}

Referenced by SHGetFolderLocation().

◆ _ILCreateMyComputer()

LPITEMIDLIST _ILCreateMyComputer ( void  )

Definition at line 1799 of file pidl.c.

1800{
1801 TRACE("()\n");
1802 return _ILCreateGuid(PT_DESKTOP_REGITEM, &CLSID_MyComputer, REGITEMORDER_MYCOMPUTER);
1803}

Referenced by _ILCreateControlPanel(), CDesktopFolder::_ParseDisplayNameByParent(), CDrivesFolder::FinalConstruct(), CDesktopFolder::ParseDisplayName(), and SHGetFolderLocation().

◆ _ILCreateMyDocuments()

LPITEMIDLIST _ILCreateMyDocuments ( void  )

Definition at line 1805 of file pidl.c.

1806{
1807 TRACE("()\n");
1808 return _ILCreateGuid(PT_DESKTOP_REGITEM, &CLSID_MyDocuments, REGITEMORDER_MYDOCS_DEFAULT);
1809}

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

◆ _ILCreateNetwork()

LPITEMIDLIST _ILCreateNetwork ( void  )

Definition at line 1862 of file pidl.c.

1863{
1864 TRACE("()\n");
1865 return _ILCreateGuid(PT_DESKTOP_REGITEM, &CLSID_NetworkPlaces, REGITEMORDER_NETHOOD);
1866}

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

◆ _ILCreatePrinters()

LPITEMIDLIST _ILCreatePrinters ( void  )

Definition at line 1835 of file pidl.c.

1836{
1837#ifdef __REACTOS__
1838 // Note: Wine returns the PIDL as it was in Windows 95, NT5 moved it into CSIDL_CONTROLS
1839 extern HRESULT SHGetFolderLocationHelper(HWND hwnd, int nFolder, REFCLSID clsid, LPITEMIDLIST *ppidl);
1840 LPITEMIDLIST pidl;
1841 SHGetFolderLocationHelper(NULL, CSIDL_CONTROLS, &CLSID_Printers, &pidl);
1842 return pidl;
1843#else
1844 LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
1845
1846 TRACE("()\n");
1847 if (parent)
1848 {
1849 LPITEMIDLIST printers = _ILCreateGuid(PT_YAGUID, &CLSID_Printers);
1850
1851 if (printers)
1852 {
1853 ret = ILCombine(parent, printers);
1854 SHFree(printers);
1855 }
1856 SHFree(parent);
1857 }
1858 return ret;
1859#endif
1860}
REFCLSID clsid
Definition: msctf.c:82
#define REFCLSID
Definition: guiddef.h:117
#define CSIDL_CONTROLS
Definition: shlobj.h:2184
_In_ int nFolder
Definition: shlobj.h:1527
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by SHGetFolderLocation().

◆ _ILFreeaPidl()

◆ _ILGetDataPointer()

◆ _ILGetDrive()

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

Definition at line 2046 of file pidl.c.

2047{
2048 TRACE("(%p,%p,%u)\n",pidl,pOut,uSize);
2049
2050 if(_ILIsMyComputer(pidl))
2051 pidl = ILGetNext(pidl);
2052
2053 if (pidl && _ILIsDrive(pidl))
2054 return _ILSimpleGetTextW(pidl, pOut, uSize);
2055
2056 return 0;
2057}
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
Definition: pidl.c:2098
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
Definition: pidl.c:2131
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
Definition: pidl.c:2192

Referenced by _ILGetDriveType(), and DrivesContextMenuCallback().

◆ _ILGetExtension()

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

Definition at line 2532 of file pidl.c.

2533{
2534 WCHAR szTemp[MAX_PATH];
2535 LPCWSTR pPoint;
2536 LPCITEMIDLIST pidlTemp = pidl;
2537
2538 TRACE("pidl=%p\n",pidl);
2539
2540 if (!pidl)
2541 return FALSE;
2542
2543 pidlTemp = ILFindLastID(pidl);
2544
2545 if (!_ILIsValue(pidlTemp))
2546 return FALSE;
2547 if (!_ILSimpleGetTextW(pidlTemp, szTemp, _countof(szTemp)))
2548 return FALSE;
2549
2550 pPoint = PathFindExtensionW(szTemp);
2551
2552 if (!*pPoint)
2553 return FALSE;
2554
2555 pPoint++;
2556 lstrcpynW(pOut, pPoint, uOutSize);
2557 TRACE("%s\n", debugstr_w(pOut));
2558
2559 return TRUE;
2560}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define lstrcpynW
Definition: compat.h:738
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
Definition: path.c:1217
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:199
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:2145
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define _countof(array)
Definition: sndvol32.h:70
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by SHELL32_GetFSItemAttributes(), and SHELL_IsShortcut().

◆ _ILGetFileAttributes()

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

Definition at line 2579 of file pidl.c.

2580{
2581 DWORD wAttrib = 0;
2582 if (_ILGetFSType(pidl))
2583 wAttrib = _ILGetDataPointer(pidl)->u.file.uFileAttribs;
2584
2585 if (uOutSize >= 6)
2586 {
2587 UINT i = 0;
2588 if(wAttrib & FILE_ATTRIBUTE_READONLY)
2589 pOut[i++] = L'R';
2590 if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
2591 pOut[i++] = L'H';
2592 if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
2593 pOut[i++] = L'S';
2594 if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
2595 pOut[i++] = L'A';
2596 if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
2597 pOut[i++] = L'C';
2598 pOut[i] = UNICODE_NULL;
2599 }
2600 return wAttrib;
2601}
#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
#define UNICODE_NULL
#define L(x)
Definition: ntvdm.h:50
static BYTE _ILGetFSType(LPCITEMIDLIST pidl)
Definition: pidl.h:149
struct tagFileStruct file
Definition: pidl.h:235
union tagPIDLDATA::@624 u

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

◆ _ILGetFileDateTime()

BOOL _ILGetFileDateTime ( LPCITEMIDLIST  pidl,
FILETIME pFt 
)

Definition at line 2486 of file pidl.c.

2487{
2488 if (_ILGetFSType(pidl) > PT_FS) /* Only non-simple FS items have a date */
2489 {
2491 return DosDateTimeToFileTime(pdata->u.file.uFileDate, pdata->u.file.uFileTime, pFt);
2492 }
2493 return FALSE;
2494}
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
Definition: time.c:75
#define PT_FS
Definition: lnktool.cpp:40
static PROTOCOLDATA * pdata
Definition: protocol.c:158

Referenced by CRecycleBin::CompareIDs(), CFSFolder::GetDetailsOf(), CRecycleBin::GetDetailsOf(), SHGetDataFromIDListA(), and SHGetDataFromIDListW().

◆ _ILGetFileSize()

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

Definition at line 2513 of file pidl.c.

2514{
2516 if (!pdata)
2517 return 0;
2518
2519 if (_ILGetFSType(pidl) & PT_FS_FILE_FLAG)
2520 {
2521 /* FIXME: Handle INVALID_FILE_SIZE (get size from disk) */
2522 DWORD dwSize = pdata->u.file.dwFileSize;
2523 if (pOut)
2524 StrFormatKBSizeW(dwSize, pOut, uOutSize);
2525 return dwSize;
2526 }
2527 if (pOut)
2528 *pOut = UNICODE_NULL;
2529 return 0;
2530}
LPWSTR WINAPI StrFormatKBSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:1757
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56

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

◆ _ILGetFileStructW()

FileStructW * _ILGetFileStructW ( LPCITEMIDLIST  pidl)

Definition at line 2444 of file pidl.c.

2444 {
2445 FileStructW *pFileStructW;
2446 WORD cbOffset;
2447
2448 if (!_ILIsFolderOrFile(pidl))
2449 return NULL;
2450
2451 cbOffset = *(const WORD *)((const BYTE *)pidl + pidl->mkid.cb - sizeof(WORD));
2452 pFileStructW = (FileStructW*)((LPBYTE)pidl + cbOffset);
2453
2454 /* Currently I don't see a fool prove way to figure out if a pidl is for sure of WinXP
2455 * style with a FileStructW member. If we switch all our shellfolder-implementations to
2456 * the new format, this won't be a problem. For now, we do as many sanity checks as possible. */
2457 if ((cbOffset & 0x1) || /* FileStructW member is word aligned in the pidl */
2458 /* FileStructW is positioned after FileStruct */
2459 cbOffset < sizeof(pidl->mkid.cb) + sizeof(PIDLTYPE) + sizeof(FileStruct) ||
2460 /* There has to be enough space at cbOffset in the pidl to hold FileStructW and cbOffset */
2461 cbOffset > pidl->mkid.cb - sizeof(cbOffset) - sizeof(FileStructW) ||
2462 pidl->mkid.cb != cbOffset + pFileStructW->cbLen)
2463 {
2464 WARN("Invalid pidl format (cbOffset = %d)!\n", cbOffset);
2465 return NULL;
2466 }
2467
2468 return pFileStructW;
2469}
struct tagFileStruct FileStruct
unsigned char BYTE
Definition: xxhash.c:193

Referenced by _ILHACKCompareSimpleIds(), _ILSimpleGetTextW(), AddFSClassKeysToArray(), CreateItem(), and GetItemFileName().

◆ _ILGetGUIDPointer()

IID * _ILGetGUIDPointer ( LPCITEMIDLIST  pidl)

Definition at line 2408 of file pidl.c.

2409{
2411
2412 TRACE("%p\n", pidl);
2413
2414 if (!pdata)
2415 return NULL;
2416
2417 TRACE("pdata->type 0x%04x\n", pdata->type);
2418 switch (pdata->type)
2419 {
2420 case PT_SHELLEXT:
2421 case PT_GUID:
2422 case PT_YAGUID:
2423 return &(pdata->u.guid.guid);
2424
2425 default:
2426 TRACE("Unknown pidl type 0x%04x\n", pdata->type);
2427 break;
2428 }
2429 return NULL;
2430}

Referenced by _ILHACKCompareSimpleIds(), _ILIsBitBucket(), _ILIsMyComputer(), _ILIsMyDocuments(), _ILSimpleGetTextW(), CRegFolder::_IsInNameSpace(), CRegFolder::BindToObject(), CGuidItemExtractIcon_CreateInstance(), CRegFolder::CompareIDs(), CRegItemContextMenu_CreateInstance(), CRegFolder::GetDetailsOf(), CRegFolder::GetDisplayNameOf(), CRegFolder::GetUIObjectOf(), HCR_GetFolderAttributes(), and CRegFolderInfo::IsRegItem().

◆ _ILGetSTextPointer()

static LPSTR _ILGetSTextPointer ( LPCITEMIDLIST  pidl)
static

Definition at line 2377 of file pidl.c.

2378{
2379 /* TRACE(pidl,"(pidl%p)\n", pidl); */
2380
2381 PIDLTYPE type;
2383 if (!pdata)
2384 return NULL;
2385
2386 type = pdata->type;
2387 if (_ILGetFSType(pidl) && !(type & PT_FS_UNICODE_FLAG))
2388 type = PT_FS;
2389
2390 switch (type)
2391 {
2392 case PT_FS:
2393 case PT_IESPECIAL1:
2394 case PT_IESPECIAL2:
2395 return pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1;
2396
2397 case PT_WORKGRP:
2398 return pdata->u.network.szNames + strlen (pdata->u.network.szNames) + 1;
2399 }
2400 return NULL;
2401}
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define PT_FS_UNICODE_FLAG
Definition: lnktool.cpp:41
#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 2336 of file pidl.c.

2337{
2338 /* TRACE(pidl,"(pidl%p)\n", pidl);*/
2339
2340 PIDLTYPE type;
2342 if (!pdata)
2343 return NULL;
2344
2345 type = _ILGetFSType(pidl);
2346 if (type && !(type & PT_FS_UNICODE_FLAG))
2347 return pdata->u.file.szNames;
2348
2349 if (_ILIsDrive(pidl))
2350 return pdata->u.drive.szDriveName;
2351
2352 switch (pdata->type)
2353 {
2354 case PT_GUID:
2355 case PT_SHELLEXT:
2356 case PT_YAGUID:
2357 return NULL;
2358
2359 case PT_IESPECIAL1:
2360 case PT_IESPECIAL2:
2361 return pdata->u.file.szNames;
2362
2363 case PT_WORKGRP:
2364 case PT_COMP:
2365 case PT_NETWORK:
2366 case PT_NETPROVIDER:
2367 case PT_SHARE:
2368 return pdata->u.network.szNames;
2369 }
2370 return NULL;
2371}
#define PT_SHARE
Definition: pidl.h:105
#define PT_COMP
Definition: pidl.h:99
#define PT_NETPROVIDER
Definition: pidl.h:100

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

◆ _ILGetTextPointerW()

static LPWSTR _ILGetTextPointerW ( LPCITEMIDLIST  pidl)
static

Definition at line 2283 of file pidl.c.

2284{
2285 /* TRACE(pidl,"(pidl%p)\n", pidl);*/
2286
2288
2289 if (!pdata)
2290 return NULL;
2291
2292 if (_ILGetFSType(pidl) & PT_FS_UNICODE_FLAG)
2293 return (LPWSTR)pdata->u.file.szNames;
2294
2295 switch (pdata->type)
2296 {
2297 case PT_GUID:
2298 case PT_SHELLEXT:
2299 case PT_YAGUID:
2300 return NULL;
2301
2302 case PT_DRIVE:
2303 case PT_DRIVE1:
2304 case PT_DRIVE2:
2305 case PT_DRIVE3:
2306 /*return (LPSTR)&(pdata->u.drive.szDriveName);*/
2307 return NULL;
2308
2309 case PT_IESPECIAL1:
2310 case PT_IESPECIAL2:
2311 /*return (LPSTR)&(pdata->u.file.szNames);*/
2312 return NULL;
2313
2314 case PT_WORKGRP:
2315 case PT_COMP:
2316 case PT_NETWORK:
2317 case PT_NETPROVIDER:
2318 case PT_SHARE:
2319 /*return (LPSTR)&(pdata->u.network.szNames);*/
2320 return NULL;
2321
2322#ifdef __REACTOS__ /* r54423 */
2323 case PT_CPLAPPLET:
2324 return pdata->u.cpanel.szName;
2325#endif
2326
2327 }
2328 return NULL;
2329}
#define PT_DRIVE1
Definition: pidl.h:92
#define PT_DRIVE3
Definition: pidl.h:90
#define PT_DRIVE2
Definition: pidl.h:89
#define PT_CPLAPPLET
Definition: pidl.h:86
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by _ILSimpleGetTextW().

◆ _ILHACKCompareSimpleIds()

BOOL _ILHACKCompareSimpleIds ( LPCITEMIDLIST  pidltemp1,
LPCITEMIDLIST  pidltemp2 
)

Definition at line 522 of file pidl.c.

523{
524 LPPIDLDATA pdata1 = _ILGetDataPointer(pidltemp1);
525 LPPIDLDATA pdata2 = _ILGetDataPointer(pidltemp2);
526
527 IID *iid1 = _ILGetGUIDPointer(pidltemp1);
528 IID *iid2 = _ILGetGUIDPointer(pidltemp2);
529
530 FileStructW* pDataW1 = _ILGetFileStructW(pidltemp1);
531 FileStructW* pDataW2 = _ILGetFileStructW(pidltemp2);
532
533 if (_ILIsDesktop(pidltemp1) && _ILIsDesktop(pidltemp2))
534 {
535 return TRUE;
536 }
537 else if (_ILIsDesktop(pidltemp1) || _ILIsDesktop(pidltemp2))
538 {
539 return FALSE;
540 }
541 else if (iid1 || iid2)
542 {
543 if (!iid1 || !iid2 || memcmp(iid1, iid2, sizeof(GUID)))
544 return FALSE;
545 }
546 else if (pDataW1 || pDataW2)
547 {
548 if (!pDataW1 || !pDataW2 || wcsicmp(pDataW1->wszName, pDataW2->wszName))
549 return FALSE;
550 }
551 else if (_ILIsFolder(pidltemp1) || _ILIsFolder(pidltemp2))
552 {
553 if (!_ILIsFolder(pidltemp1) || !_ILIsFolder(pidltemp2) || strcmp(pdata1->u.file.szNames, pdata2->u.file.szNames))
554 return FALSE;
555 }
556 else if (_ILIsValue(pidltemp1) || _ILIsValue(pidltemp2))
557 {
558 if (!_ILIsValue(pidltemp1) || !_ILIsValue(pidltemp2) || strcmp(pdata1->u.file.szNames, pdata2->u.file.szNames))
559 return FALSE;
560 }
561 else if (_ILIsDrive(pidltemp1) || _ILIsDrive(pidltemp2))
562 {
563 if (!_ILIsDrive(pidltemp1) || !_ILIsDrive(pidltemp2) || pdata1->u.drive.szDriveName[0] != pdata2->u.drive.szDriveName[0])
564 return FALSE;
565 }
566 else
567 {
568 if ((pidltemp1->mkid.cb != pidltemp2->mkid.cb) ||
569 !RtlEqualMemory((BYTE*)&pidltemp1->mkid, (BYTE*)&pidltemp2->mkid, pidltemp1->mkid.cb))
570 {
571 return FALSE;
572 }
573 }
574
575 return TRUE;
576}
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(dst, src, len)
Definition: kdvm.h:18
FileStructW * _ILGetFileStructW(LPCITEMIDLIST pidl)
Definition: pidl.c:2444
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2138
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2408
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: pidl.c:2080
struct tagDriveStruct drive
Definition: pidl.h:234

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

◆ _ILIsBitBucket()

BOOL _ILIsBitBucket ( LPCITEMIDLIST  pidl)

Definition at line 2109 of file pidl.c.

2110{
2111 IID *iid = _ILGetGUIDPointer(pidl);
2112
2113 TRACE("(%p)\n", pidl);
2114
2115 if (iid)
2116 return IsEqualIID(iid, &CLSID_RecycleBin);
2117 return FALSE;
2118}
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

Referenced by CGuidItemExtractIcon_CreateInstance().

◆ _ILIsCPanelStruct()

BOOL _ILIsCPanelStruct ( LPCITEMIDLIST  pidl)

Definition at line 2151 of file pidl.c.

2152{
2153 LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
2154
2155 TRACE("(%p)\n",pidl);
2156
2157 return (pidl && lpPData && (lpPData->type == 0));
2158}
PIDLTYPE type
Definition: pidl.h:230

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

◆ _ILIsDesktop()

BOOL _ILIsDesktop ( LPCITEMIDLIST  pidl)
inline

Definition at line 2080 of file pidl.c.

2081{
2082 TRACE("(%p)\n",pidl);
2083
2084 return !pidl || !pidl->mkid.cb;
2085}

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

◆ _ILIsDrive()

◆ _ILIsFolder()

BOOL _ILIsFolder ( LPCITEMIDLIST  pidl)

Definition at line 2138 of file pidl.c.

2139{
2140 /* A folder or a simple PT_FS with a child */
2141 const BYTE type = _ILGetFSType(pidl);
2142 return (type & PT_FS_FOLDER_FLAG) != 0 || (type == PT_FS && ILGetNext(pidl));
2143}

Referenced by CFSFolder::_GetDropTarget(), _ILHACKCompareSimpleIds(), AddFSClassKeysToArray(), CFSFolder::BindToObject(), CFSExtractIcon_CreateInstance(), CFSFolder::CompareSortFoldersFirst(), CFSFolder::GetDisplayNameOf(), and CDefView::UpdateStatusbar().

◆ _ILIsMyComputer()

BOOL _ILIsMyComputer ( LPCITEMIDLIST  pidl)

Definition at line 2098 of file pidl.c.

2099{
2100 REFIID iid = _ILGetGUIDPointer(pidl);
2101
2102 TRACE("(%p)\n",pidl);
2103
2104 if (iid)
2105 return IsEqualIID(iid, &CLSID_MyComputer);
2106 return FALSE;
2107}
#define REFIID
Definition: guiddef.h:118

Referenced by _ILGetDrive(), BrFolder_Treeview_Expand(), and CDesktopFolder::GetAttributesOf().

◆ _ILIsMyDocuments()

BOOL _ILIsMyDocuments ( LPCITEMIDLIST  pidl)

Definition at line 2087 of file pidl.c.

2088{
2089 IID *iid = _ILGetGUIDPointer(pidl);
2090
2091 TRACE("(%p)\n", pidl);
2092
2093 if (iid)
2094 return IsEqualIID(iid, &CLSID_MyDocuments);
2095 return FALSE;
2096}

◆ _ILIsParentEx()

LPCITEMIDLIST _ILIsParentEx ( LPCITEMIDLIST  pidlParent,
LPCITEMIDLIST  pidlChild,
BOOL  bImmediate 
)

Definition at line 639 of file pidl.c.

640{
641 LPCITEMIDLIST pParentRoot = pidlParent, pChildRoot = pidlChild, pResult = NULL;
642 LPITEMIDLIST pidl;
643 SIZE_T cb = 0;
644
645 if (!pidlParent || !pidlChild)
646 return pResult;
647
648 while (pidlParent->mkid.cb)
649 {
650 cb += pidlChild->mkid.cb;
651 if (!pidlChild->mkid.cb)
652 {
653 if (pidlParent->mkid.cb)
654 return pResult; /* The child is shorter than the parent */
655 else
656 break;
657 }
658 pidlChild = _ILUnsafeNext(pidlChild);
659 pidlParent = _ILUnsafeNext(pidlParent);
660 }
661
662 if (bImmediate && (!pidlChild->mkid.cb || _ILUnsafeNext(pidlChild)->mkid.cb))
663 return pResult; /* Same as parent or a deeper grandchild */
664
665 if ((pidl = SHAlloc(cb + sizeof(WORD))) != NULL)
666 {
667 CopyMemory(pidl, pChildRoot, cb);
668 ZeroMemory((BYTE*)pidl + cb, sizeof(WORD));
669 if (ILIsEqual(pParentRoot, pidl))
670 pResult = pidlChild;
671 ILFree(pidl);
672 }
673 return pResult;
674}
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1045
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:583
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define CopyMemory
Definition: winbase.h:1751

Referenced by ILFindChild(), and ILIsParent().

◆ _ILIsPidlSimple()

BOOL _ILIsPidlSimple ( LPCITEMIDLIST  pidl)

Definition at line 2163 of file pidl.c.

2164{
2165 BOOL ret = TRUE;
2166
2167 if(! _ILIsDesktop(pidl)) /* pidl=NULL or mkid.cb=0 */
2168 {
2169 WORD len = pidl->mkid.cb;
2170 LPCITEMIDLIST pidlnext = (LPCITEMIDLIST) (((const BYTE*)pidl) + len );
2171
2172 if (pidlnext->mkid.cb)
2173 ret = FALSE;
2174 }
2175
2176 TRACE("%s\n", ret ? "Yes" : "No");
2177 return ret;
2178}
unsigned int BOOL
Definition: ntddk_ex.h:94

Referenced by SHBindToParent().

◆ _ILIsSpecialFolder()

◆ _ILIsUnicode()

BOOL _ILIsUnicode ( LPCITEMIDLIST  pidl)

Definition at line 2073 of file pidl.c.

2074{
2075 TRACE("(%p)\n",pidl);
2076
2077 return (_ILGetFSType(pidl) & PT_FS_UNICODE_FLAG) != 0;
2078}

Referenced by pdump_impl().

◆ _ILIsValue()

BOOL _ILIsValue ( LPCITEMIDLIST  pidl)

Definition at line 2145 of file pidl.c.

2146{
2147 const BYTE type = _ILGetFSType(pidl);
2148 return type && !(type & PT_FS_FOLDER_FLAG);
2149}

Referenced by _ILGetExtension(), _ILHACKCompareSimpleIds(), AddFSClassKeysToArray(), ExtensionFromPidl(), CFSFolder::GetUIObjectOf(), and COpenWithMenu::Initialize().

◆ _ILParsePathW()

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

Definition at line 1150 of file pidl.c.

1152{
1153 LPSHELLFOLDER pSF = NULL;
1154 LPBC pBC = NULL;
1155 HRESULT ret;
1156
1157 TRACE("%s %p %d (%p)->%p (%p)->0x%x\n", debugstr_w(path), lpFindFile, bBindCtx,
1158 ppidl, ppidl ? *ppidl : NULL,
1159 prgfInOut, prgfInOut ? *prgfInOut : 0);
1160
1161 ret = SHGetDesktopFolder(&pSF);
1162 if (FAILED(ret))
1163 return ret;
1164
1165 if (lpFindFile || bBindCtx)
1166 ret = IFileSystemBindData_Constructor(lpFindFile, &pBC);
1167
1168 if (SUCCEEDED(ret))
1169 {
1170 ret = IShellFolder_ParseDisplayName(pSF, 0, pBC, (LPOLESTR)path, NULL, ppidl, prgfInOut);
1171 }
1172
1173 if (pBC)
1174 {
1175 IBindCtx_Release(pBC);
1176 pBC = NULL;
1177 }
1178
1179 IShellFolder_Release(pSF);
1180
1181 if (FAILED(ret) && ppidl)
1182 *ppidl = NULL;
1183
1184 TRACE("%s %p 0x%x\n", debugstr_w(path), ppidl ? *ppidl : NULL, prgfInOut ? *prgfInOut : 0);
1185
1186 return ret;
1187}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
HRESULT WINAPI IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV)
#define IShellFolder_ParseDisplayName
Definition: utils.cpp:14
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static LPOLESTR
Definition: stg_prop.c:27
interface IBindCtx * LPBC
Definition: objfwd.h:18

Referenced by SHELL32_CreateSimpleIDListFromPath(), SHSimpleIDListFromPathA(), and SHSimpleIDListFromPathW().

◆ _ILSimpleGetTextW()

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

Definition at line 2192 of file pidl.c.

2193{
2194 DWORD dwReturn;
2195 FileStructW *pFileStructW = _ILGetFileStructW(pidl);
2196
2197 TRACE("(%p %p %x)\n",pidl,szOut,uOutSize);
2198
2199 if (pFileStructW) {
2200 lstrcpynW(szOut, pFileStructW->wszName, uOutSize);
2201 dwReturn = lstrlenW(pFileStructW->wszName);
2202 } else {
2203 GUID const * riid;
2204 WCHAR szTemp[MAX_PATH];
2205 LPSTR szSrc;
2206 LPWSTR szSrcW;
2207 dwReturn=0;
2208
2209 if (!pidl)
2210 return 0;
2211
2212 if (szOut)
2213 *szOut = 0;
2214
2215 if (_ILIsDesktop(pidl))
2216 {
2217 /* desktop */
2218 if (HCR_GetClassNameW(&CLSID_ShellDesktop, szTemp, _countof(szTemp)))
2219 {
2220 if (szOut)
2221 lstrcpynW(szOut, szTemp, uOutSize);
2222
2223 dwReturn = lstrlenW (szTemp);
2224 }
2225 }
2226 else if (( szSrcW = _ILGetTextPointerW(pidl) ))
2227 {
2228 /* unicode filesystem */
2229 if (szOut)
2230 lstrcpynW(szOut, szSrcW, uOutSize);
2231
2232 dwReturn = lstrlenW(szSrcW);
2233 }
2234 else if (( szSrc = _ILGetTextPointer(pidl) ))
2235 {
2236 /* filesystem */
2237 MultiByteToWideChar(CP_ACP, 0, szSrc, -1, szTemp, _countof(szTemp));
2238
2239 if (szOut)
2240 lstrcpynW(szOut, szTemp, uOutSize);
2241
2242 dwReturn = lstrlenW (szTemp);
2243 }
2244 else if (( riid = _ILGetGUIDPointer(pidl) ))
2245 {
2246 /* special folder */
2247 if ( HCR_GetClassNameW(riid, szTemp, _countof(szTemp)))
2248 {
2249 if (szOut)
2250 lstrcpynW(szOut, szTemp, uOutSize);
2251
2252 dwReturn = lstrlenW (szTemp);
2253 }
2254 }
2255 else
2256 {
2257 ERR("-- no text\n");
2258 }
2259 }
2260
2261 TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_w(szOut),dwReturn);
2262 return dwReturn;
2263}
#define MultiByteToWideChar
Definition: compat.h:110
REFIID riid
Definition: atlbase.h:39
static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl)
Definition: pidl.c:2283
BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len)
Definition: classes.c:422

Referenced by _ILGetDrive(), _ILGetExtension(), AddFSClassKeysToArray(), CFSFolder::GetDisplayNameOf(), GetItemDriveNumber(), GetItemFileName(), RenderHDROP(), and SHELL32_GetFSItemAttributes().

◆ Alloc()

LPVOID WINAPI Alloc ( INT  )

Referenced by ILGlobalClone().

◆ BindCtx_GetUIWindow()

EXTERN_C HWND BindCtx_GetUIWindow ( _In_ IBindCtx pBindCtx)

Definition at line 537 of file utils.cpp.

538{
539 HWND hWnd = NULL;
540
542 if (pBindCtx && SUCCEEDED(pBindCtx->GetObjectParam((LPWSTR)L"UI During Binding", &punk)))
543 IUnknown_GetWindow(punk, &hWnd);
544
545 return hWnd;
546}
HWND hWnd
Definition: settings.c:17
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336

Referenced by SHParseDisplayName().

◆ BindCtx_RegisterObjectParam()

EXTERN_C HRESULT BindCtx_RegisterObjectParam ( _In_ IBindCtx pBindCtx,
_In_ LPOLESTR  pszKey,
_In_opt_ IUnknown punk,
_Out_ LPBC ppbc 
)

Definition at line 597 of file utils.cpp.

602{
603 HRESULT hr = S_OK;
605
606 *ppbc = pBindCtx;
607
608 if (pBindCtx)
609 {
610 pBindCtx->AddRef();
611 }
612 else
613 {
614 hr = CreateBindCtx(0, ppbc);
615 if (FAILED(hr))
616 return hr;
617 }
618
619 if (!punk)
620 punk = pUnknown = new CDummyOleWindow();
621
622 hr = (*ppbc)->RegisterObjectParam(pszKey, punk);
623
624 if (pUnknown)
625 pUnknown->Release();
626
627 if (FAILED(hr))
628 {
629 (*ppbc)->Release();
630 *ppbc = NULL;
631 }
632
633 return hr;
634}
_In_ PUNKNOWN pUnknown
Definition: drmk.h:76
ULONG Release()
HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC *ppbc)
Definition: bindctx.c:556
HRESULT hr
Definition: shlfolder.c:183

Referenced by SHParseDisplayName().

◆ Free()

BOOL WINAPI Free ( LPVOID  lpMem)

Definition at line 113 of file comctl32undoc.c.

114{
115 return !LocalFree( lpMem );
116}
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594

◆ GetShellFolder1ItemDetailsExToBuffer()

static HRESULT GetShellFolder1ItemDetailsExToBuffer ( LPSHELLFOLDER  psf,
LPCITEMIDLIST  pidl,
const SHCOLUMNID *  pscid,
void buf,
UINT  cb 
)
static

Definition at line 1272 of file pidl.c.

1274{
1275 IShellFolder2 *psf2;
1276 HRESULT hr = IShellFolder_QueryInterface(psf, &IID_IShellFolder2, (void**)&psf2);
1277 if (SUCCEEDED(hr))
1278 {
1279 hr = GetShellFolder2ItemDetailsExToBuffer(psf2, pidl, pscid, buf, cb);
1280 IShellFolder2_Release(psf2);
1281 }
1282 return hr;
1283}
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
static HRESULT GetShellFolder2ItemDetailsExToBuffer(IShellFolder2 *psf2, LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, void *buf, UINT cb)
Definition: pidl.c:1258

Referenced by SHGetDataFromIDListW().

◆ GetShellFolder2ItemDetailsExToBuffer()

static HRESULT GetShellFolder2ItemDetailsExToBuffer ( IShellFolder2 psf2,
LPCITEMIDLIST  pidl,
const SHCOLUMNID *  pscid,
void buf,
UINT  cb 
)
static

Definition at line 1258 of file pidl.c.

1260{
1261 VARIANT var;
1262 V_VT(&var) = VT_EMPTY;
1263 HRESULT hr = IShellFolder2_GetDetailsEx(psf2, pidl, pscid, &var);
1264 if (SUCCEEDED(hr))
1265 {
1267 VariantClear(&var);
1268 }
1269 return hr;
1270}
@ VT_EMPTY
Definition: compat.h:2295
const char * var
Definition: shader.c:5666
#define V_VT(A)
Definition: oleauto.h:211
static HRESULT SHELL_VariantToBuffer(VARIANT *pVar, void *pData, SIZE_T cb)
Definition: shell32_main.h:265
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648

Referenced by GetShellFolder1ItemDetailsExToBuffer().

◆ ILAppendID()

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

Definition at line 1005 of file pidl.c.

1006{
1007 LPITEMIDLIST idlRet;
1009
1010 WARN("(pidl=%p,pidl=%p,%08u)semi-stub\n",pidl,item,bEnd);
1011
1012 pdump (pidl);
1013 pdump (itemid);
1014
1015 if (_ILIsDesktop(pidl))
1016 {
1017 idlRet = ILClone(itemid);
1018 SHFree (pidl);
1019 return idlRet;
1020 }
1021
1022 if (bEnd)
1023 idlRet = ILCombine(pidl, itemid);
1024 else
1025 idlRet = ILCombine(itemid, pidl);
1026
1027 SHFree(pidl);
1028 return idlRet;
1029}
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:322
static ATOM item
Definition: dde.c:856

Referenced by init_function_pointers().

◆ ILClone()

LPITEMIDLIST WINAPI ILClone ( LPCITEMIDLIST  pidl)

Definition at line 238 of file pidl.c.

239{
240 DWORD len;
241 LPITEMIDLIST newpidl;
242
243 if (!pidl)
244 return NULL;
245
246 len = ILGetSize(pidl);
247 newpidl = SHAlloc(len);
248 if (newpidl)
249 memcpy(newpidl,pidl,len);
250
251 TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
252 pdump(pidl);
253
254 return newpidl;
255}
#define ILGetSize
Definition: shellclasses.h:638

Referenced by _ILCopyaPidl(), _ILCopyCidaToaPidl(), _ILReadFromSharedMemory(), CAddressEditBox::AddComboBoxItem(), CMergedFolder::AddNameSpace(), CEnumMergedFolder::Begin(), BrFolder_InitTreeView(), BrFolder_InsertItem(), BrFolder_OnOK(), BrFolder_Treeview_Changed(), BrFolder_UpdateItemEx(), CDesktopBrowser::BrowseObject(), DoGetAliasPIDLs(), ExplorerMessageLoop(), CCabFolder::ExtractFilesUI(), FILEDLG95_LOOKIN_AddItem(), FM_SetMenuParameter(), CShellItem::get_parent_pidl(), CISFBand::GetBandInfoSFB(), CFontExt::GetCurFolder(), CZipFolder::GetCurFolder(), CNetworkConnections::GetCurFolder(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetCurFolder(), CAdminToolsFolder::GetCurFolder(), CControlPanelFolder::GetCurFolder(), CDesktopFolder::GetCurFolder(), CDrivesFolder::GetCurFolder(), CFontsFolder::GetCurFolder(), CFSFolder::GetCurFolder(), CMyDocsFolder::GetCurFolder(), CNetFolder::GetCurFolder(), CPrinterFolder::GetCurFolder(), CShellItem::GetIDList(), CShellLink::GetIDList(), GetParentPidl(), CTravelEntry::GetPidl(), GetPidlFromDataObject(), CMenuSFToolbar::GetShellFolder(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetUIObjectOf(), CShellBrowser::GetWindowData(), ILAppendID(), ILCombine(), ILIsParentOrSpecialParent(), CViewStatePropertyBag::Init(), init_function_pointers(), CDefaultContextMenu::Initialize(), CFolderItem::Initialize(), CFontExt::Initialize(), CShellFolderViewCBWrapper::Initialize(), CNtObjectFolderExtractIcon::Initialize(), CRegistryFolderExtractIcon::Initialize(), CFolder::Initialize(), CFolderItems::Initialize(), CZipFolder::Initialize(), CCabFolder::Initialize(), CNetworkConnections::Initialize(), CCommonFolder< TSelf, TItemId, TExtractIcon >::Initialize(), CNtObjectFolder::Initialize(), CRegistryFolder::Initialize(), CACListISF::Initialize(), CAdminToolsFolder::Initialize(), CControlPanelFolder::Initialize(), CFontsFolder::Initialize(), CFSFolder::Initialize(), CMyDocsFolder::Initialize(), CNetFolder::Initialize(), CPrinterFolder::Initialize(), CRecycleBin::Initialize(), CMergedFolder::Initialize(), CNewMenu::Initialize(), CRegFolder::Initialize(), CFSFolder::InitializeEx(), CISFBand::InitializeSFB(), CSearchBar::Invoke(), IShellBrowserImpl_BrowseObject(), CDefView::Item(), CDefView::LV_AddItem(), CDefView::LV_RenameItem(), CDefView::LV_UpdateItem(), CShellBrowser::NavigateToParent(), CEnumIDListBase::Next(), CEnumMergedFolder::Next(), CACListISF::NextLocation(), CDefView::OnNotify(), CAddressEditBox::OnWinEvent(), CMergedFolder::ParseDisplayName(), ParseSharedPacket(), CAddressEditBox::PopulateComboBox(), CStartMenuBtnCtxMenu::QueryContextMenu(), CShellItem::SetIDList(), CMenuSFToolbar::SetShellFolder(), CShellLink::SetTargetFromPIDLOrPath(), SHBindToFolderIDListParent(), SHBindToParent(), SHCloneIETHREADPARAM(), SHCreateFromDesktop(), SHCreateShellItem(), SHGetPidlInfo(), SHILClone(), and test_AttributesRegistration().

◆ ILCloneFirst()

LPITEMIDLIST WINAPI ILCloneFirst ( LPCITEMIDLIST  pidl)

Definition at line 263 of file pidl.c.

264{
265 DWORD len;
266 LPITEMIDLIST pidlNew = NULL;
267
268 TRACE("pidl=%p\n", pidl);
269 pdump(pidl);
270
271 if (pidl)
272 {
273 len = pidl->mkid.cb;
274 pidlNew = SHAlloc(len+2);
275 if (pidlNew)
276 {
277 memcpy(pidlNew,pidl,len+2); /* 2 -> mind a desktop pidl */
278
279 if (len)
280 ILGetNext(pidlNew)->mkid.cb = 0x00;
281 }
282 }
283 TRACE("-- newpidl=%p\n",pidlNew);
284
285 return pidlNew;
286}

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

818{
819 DWORD len1,len2;
820 LPITEMIDLIST pidlNew;
821
822 TRACE("pidl=%p pidl=%p\n",pidl1,pidl2);
823
824 if (!pidl1 && !pidl2) return NULL;
825
826 pdump (pidl1);
827 pdump (pidl2);
828
829 if (!pidl1)
830 {
831 pidlNew = ILClone(pidl2);
832 return pidlNew;
833 }
834
835 if (!pidl2)
836 {
837 pidlNew = ILClone(pidl1);
838 return pidlNew;
839 }
840
841 len1 = ILGetSize(pidl1)-2;
842 len2 = ILGetSize(pidl2);
843 pidlNew = SHAlloc(len1+len2);
844
845 if (pidlNew)
846 {
847 memcpy(pidlNew,pidl1,len1);
848 memcpy(((BYTE *)pidlNew)+len1,pidl2,len2);
849 }
850
851 /* TRACE(pidl,"--new pidl=%p\n",pidlNew);*/
852 return pidlNew;
853}

Referenced by _ILCreateAbsolute(), _ILCreateControlPanel(), _ILCreatePrinters(), CDesktopFolder::_ParseDisplayNameByParent(), CCommonFolder< TSelf, TItemId, TExtractIcon >::BindToObject(), BrFolder_InsertItem(), ShellPath::create_absolute_pidl(), CRecycleBin_ChangeNotifyBBItem(), CMyDocsDropHandler::Drop(), CDeskLinkDropHandler::Drop(), FILEDLG95_LOOKIN_Init(), CAddressEditBox::FillOneLevel(), FM_InitMenuPopup(), ICommDlgBrowser3_fnIncludeObject(), ILAppendID(), init_function_pointers(), COpenWithMenu::Initialize(), CZipFolder::Initialize(), CFileDefExt::InitMultifilePageThread(), InstallFontFiles(), CDefaultContextMenu::InvokePidl(), IShellBrowserImpl_BrowseObject(), CShellLink::Load(), CSendToMenu::LoadAllItems(), CDefView::OnNotify(), CCommonFolder< TSelf, TItemId, TExtractIcon >::ParseDisplayName(), CFolder::ParseName(), CAddressEditBox::ParseNow(), RenderFILENAMEA(), RenderFILENAMEW(), RenderHDROP(), SHCreateShellItem(), SHELL32_CoCreateInitSF(), SHELL32_ParseNextElement(), SHELL_CIDA_ILCloneFull(), SHGetRealIDL(), test_SHCreateShellItem(), test_SHCreateShellItemArray(), and TestHIDA().

◆ ILCreateFromPathA()

LPITEMIDLIST WINAPI ILCreateFromPathA ( LPCSTR  path)

Definition at line 1086 of file pidl.c.

1087{
1088 LPITEMIDLIST pidlnew = NULL;
1089
1090 TRACE_(shell)("%s\n", debugstr_a(path));
1091
1092 if (SUCCEEDED(SHILCreateFromPathA(path, &pidlnew, NULL)))
1093 return pidlnew;
1094 return NULL;
1095}
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:392

Referenced by ILCreateFromPathAW(), and init_function_pointers().

◆ ILCreateFromPathAW()

LPITEMIDLIST WINAPI ILCreateFromPathAW ( LPCVOID  path)

Definition at line 1116 of file pidl.c.

1117{
1118 if ( SHELL_OsIsUnicode())
1119 return ILCreateFromPathW (path);
1120 return ILCreateFromPathA (path);
1121}
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
Definition: pidl.c:1102
LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR path)
Definition: pidl.c:1086
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:159

◆ ILCreateFromPathW()

◆ ILFindChild()

PUIDLIST_RELATIVE WINAPI ILFindChild ( PIDLIST_ABSOLUTE  pidl1,
PCIDLIST_ABSOLUTE  pidl2 
)

Definition at line 751 of file pidl.c.

752{
753#ifdef __REACTOS__
754 TRACE("pidl1=%p pidl2=%p\n", pidl1, pidl2);
755
756 if (_ILIsDesktop(pidl1))
757 return (PUIDLIST_RELATIVE)pidl2;
758 return (PUIDLIST_RELATIVE)_ILIsParentEx(pidl1, pidl2, FALSE);
759#else /* __REACTOS__ */
760 LPCITEMIDLIST pidltemp1 = pidl1;
761 LPCITEMIDLIST pidltemp2 = pidl2;
763
764 TRACE("pidl1=%p pidl2=%p\n",pidl1, pidl2);
765
766 /* explorer reads from registry directly (StreamMRU),
767 so we can only check here */
768 if ((!pcheck (pidl1)) || (!pcheck (pidl2)))
769 return FALSE;
770
771 pdump (pidl1);
772 pdump (pidl2);
773
774 if (_ILIsDesktop(pidl1))
775 {
776 ret = pidl2;
777 }
778 else
779 {
780 while (pidltemp1->mkid.cb && pidltemp2->mkid.cb)
781 {
782 if (!_ILHACKCompareSimpleIds(pidltemp1, pidltemp2))
783 return FALSE;
784
785 pidltemp1 = ILGetNext(pidltemp1);
786 pidltemp2 = ILGetNext(pidltemp2);
787 ret = pidltemp2;
788 }
789
790 if (pidltemp1->mkid.cb)
791 ret = NULL; /* elements of pidl1 left*/
792 }
793 TRACE_(shell)("--- %p\n", ret);
794 return (PUIDLIST_RELATIVE)ret; /* pidl 1 is shorter */
795#endif /* __REACTOS__ */
796}
BOOL pcheck(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:360
BOOL _ILHACKCompareSimpleIds(LPCITEMIDLIST pidltemp1, LPCITEMIDLIST pidltemp2)
Definition: pidl.c:522
LPCITEMIDLIST _ILIsParentEx(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild, BOOL bImmediate)
Definition: pidl.c:639
ITEMIDLIST_RELATIVE UNALIGNED * PUIDLIST_RELATIVE
Definition: shtypes.idl:55

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

◆ ILFindLastID()

◆ ILFree()

void WINAPI ILFree ( LPITEMIDLIST  pidl)

Definition at line 1045 of file pidl.c.

1046{
1047 TRACE("(pidl=%p)\n",pidl);
1048 SHFree(pidl);
1049}

Referenced by CMenuBand::_CallCB(), CMruNode::_GetPidlSlot(), _ILCreateAbsolute(), _ILIsParentEx(), CFSFolder::_ParseSimple(), _tmain(), CRegFolderEnum::AddItemsFromKey(), CEnumMergedFolder::Begin(), CCommonFolder< TSelf, TItemId, TExtractIcon >::BindToObject(), BrFolder_ExpandToPidl(), BrFolder_OnInitDialog(), BrFolder_Treeview_Changed(), BrFolder_Treeview_Rename(), BrowseSelectedFolder(), CShellBrowser::BrowseToPath(), CDesktopFolder::CallBack(), CRecycleBinEnum::CBEnumRecycleBin(), CShellItem::Compare(), CFindFolder::CreateAbsolutePidlArray(), CreateCommand(), CRecycleBin_ChangeNotifyBBItem(), CRecycleBin_NotifyRecycled(), DoTestEntry(), CEnumMergedFolder::DsaDeleteCallback(), DumpCommand(), ebrowser_browse_to_desktop(), CAddressEditBox::Execute(), ExplorerMessageLoop(), CCabFolder::ExtractFilesUI(), 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(), CFindFolder::GetFSFolderAndChild(), GetMergedFolder(), CMenuCallback::GetObject(), CShellItem::GetParent(), GetParsingName(), CShellBrowser::GetPropertyBag(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetUIObjectOf(), ICommDlgBrowser3_fnIncludeObject(), IEGetNameAndFlagsEx(), ILFreeHelper(), CRegFolderEnum::Initialize(), CFileDefExt::InitMultifilePageThread(), CDefaultContextMenu::InvokePidl(), IShellBrowserImpl_BrowseObject(), IShellBrowserImpl_ICommDlgBrowser_OnDefaultCommand(), CShellLink::Load(), CShellBrowser::LoadHistory(), CDefView::LV_UpdateItem(), MRUList_PidlList_0(), CShellBrowser::NavigateToParent(), on_default_action(), CMenuSFToolbar::OnDeletingButton(), CShellBrowser::OnDestroy(), CShellLink::OnInitDialog(), CDefView::OnNotify(), CShellBrowser::OnOrganizeFavorites(), CAddressEditBox::OnWinEvent(), CDesktopFolder::ParseDisplayName(), CRegFolder::ParseDisplayName(), CCommonFolder< TSelf, TItemId, TExtractIcon >::ParseDisplayName(), CAddressEditBox::PopulateComboBox(), CStartMenuBtnCtxMenu::QueryContextMenu(), RenderHDROP(), CShellLink::Reset(), RSHELL_CStartMenu_CreateInstance(), CShellItem::SetIDList(), CRegFolder::SetNameOf(), CShellLink::SetTargetFromPIDLOrPath(), SHBindToFolderIDListParent(), SHBrowseForFolderW(), SHChangeNotify(), SHChangeNotifyRegister(), SHCreateShellItem(), SHDestroyIETHREADPARAM(), SHELL32_BindToSF(), SHELL32_CoCreateInitSF(), SHELL32_CompareChildren(), SHELL32_GetDisplayNameOfChild(), SHELL32_ParseNextElement(), SHELL32_PropertySheet(), SHELL_CreateAbsolutePidl(), SHELL_GetCaptionFromDataObject(), CDesktopFolder::ShellUrlParseDisplayName(), SHExplorerParseCmdLine(), SHGetPidlInfo(), SHILAppend(), SHObjectProperties(), SHOpenNewFrame(), START_TEST(), 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_sei_lpIDList(), 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(), TryGetUpdatedPidl(), CDefaultContextMenu::TryToBrowse(), CTravelEntry::Update(), CCommonFolder< TSelf, TItemId, TExtractIcon >::~CCommonFolder(), CFileDefExt::~CFileDefExt(), CMergedFolder::~CMergedFolder(), CNewMenu::~CNewMenu(), CNtObjectFolderExtractIcon::~CNtObjectFolderExtractIcon(), CRegistryFolderExtractIcon::~CRegistryFolderExtractIcon(), CShellFolderViewCBWrapper::~CShellFolderViewCBWrapper(), CShellItem::~CShellItem(), CShellLink::~CShellLink(), CStartMenuBtnCtxMenu::~CStartMenuBtnCtxMenu(), CTravelEntry::~CTravelEntry(), and CViewStatePropertyBag::~CViewStatePropertyBag().

◆ ILGetDisplayName()

BOOL WINAPI ILGetDisplayName ( LPCITEMIDLIST  pidl,
LPVOID  path 
)

Definition at line 184 of file pidl.c.

185{
186 TRACE_(shell)("%p %p\n", pidl, path);
187
188 if (SHELL_OsIsUnicode())
191}
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
Definition: pidl.c:101
static BOOL ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
Definition: pidl.c:84
#define ILGDN_FORPARSING
Definition: undocshell.h:74

Referenced by SHOpenFolderWindow().

◆ ILGetDisplayNameEx()

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

Definition at line 172 of file pidl.c.

173{
174 TRACE_(shell)("%p %p %p %d\n", psf, pidl, path, type);
175
176 if (SHELL_OsIsUnicode())
177 return ILGetDisplayNameExW(psf, pidl, path, type);
178 return ILGetDisplayNameExA(psf, pidl, path, type);
179}

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

◆ ILGetDisplayNameExA()

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

Definition at line 84 of file pidl.c.

85{
86 BOOL ret = FALSE;
87 WCHAR wPath[MAX_PATH];
88
89 TRACE("%p %p %p %d\n", psf, pidl, path, type);
90
91 if (!pidl || !path)
92 return FALSE;
93
94 ret = ILGetDisplayNameExW(psf, pidl, wPath, type);
96 TRACE("%p %p %s\n", psf, pidl, debugstr_a(path));
97
98 return ret;
99}

Referenced by ILGetDisplayName(), and ILGetDisplayNameEx().

◆ ILGetDisplayNameExW()

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

Definition at line 101 of file pidl.c.

102{
103 LPSHELLFOLDER psfParent, lsf = psf;
105 LPCITEMIDLIST pidllast;
106 STRRET strret;
107 DWORD flag;
108
109 TRACE("%p %p %p %x\n", psf, pidl, path, type);
110
111 if (!pidl || !path)
112 return FALSE;
113
114 if (!lsf)
115 {
116 ret = SHGetDesktopFolder(&lsf);
117 if (FAILED(ret))
118 return FALSE;
119 }
120
121 switch (type)
122 {
123 case ILGDN_FORPARSING:
124 flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
125 break;
126 case ILGDN_NORMAL:
127 flag = SHGDN_NORMAL;
128 break;
129 case ILGDN_INFOLDER:
130 flag = SHGDN_INFOLDER;
131 break;
132 default:
133 FIXME("Unknown type parameter = %x\n", type);
134 flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
135 break;
136 }
137
138 if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
139 {
140 ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag, &strret);
141 if (SUCCEEDED(ret))
142 {
143 if(!StrRetToStrNW(path, MAX_PATH, &strret, pidl))
144 ret = E_FAIL;
145 }
146 }
147 else
148 {
149 ret = SHBindToParent(pidl, &IID_IShellFolder, (LPVOID*)&psfParent, &pidllast);
150 if (SUCCEEDED(ret))
151 {
152 ret = IShellFolder_GetDisplayNameOf(psfParent, pidllast, flag, &strret);
153 if (SUCCEEDED(ret))
154 {
155 if(!StrRetToStrNW(path, MAX_PATH, &strret, pidllast))
156 ret = E_FAIL;
157 }
158 IShellFolder_Release(psfParent);
159 }
160 }
161
162 TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
163
164 if (!psf)
165 IShellFolder_Release(lsf);
166 return SUCCEEDED(ret);
167}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define NO_ERROR
Definition: dderror.h:5
#define E_FAIL
Definition: ddrawi.h:102
#define IShellFolder_GetDisplayNameOf
Definition: utils.cpp:13
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:1498
BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
Definition: shellstring.c:85
#define ILGDN_NORMAL
Definition: undocshell.h:75
#define ILGDN_INFOLDER
Definition: undocshell.h:76

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

936{
937 LPCSHITEMID si;
938 UINT len=0;
939
940 if (pidl)
941 {
942 si = &(pidl->mkid);
943
944 while (si->cb)
945 {
946 len += si->cb;
947 si = (LPCSHITEMID)(((const BYTE*)si)+si->cb);
948 }
949 len += 2;
950 }
951 TRACE("pidl=%p size=%u\n",pidl, len);
952 return len;
953}
const SHITEMID * LPCSHITEMID
Definition: shtypes.idl:30
WORD cb
Definition: shtypes.idl:27

◆ ILGlobalClone()

LPITEMIDLIST WINAPI ILGlobalClone ( LPCITEMIDLIST  pidl)

Definition at line 472 of file pidl.c.

473{
474 DWORD len;
475 LPITEMIDLIST newpidl;
476
477 if (!pidl)
478 return NULL;
479
480 len = ILGetSize(pidl);
481 newpidl = Alloc(len);
482 if (newpidl)
483 memcpy(newpidl,pidl,len);
484
485 TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
486 pdump(pidl);
487
488 return newpidl;
489}
LPVOID WINAPI Alloc(INT)

◆ ILGlobalFree()

void WINAPI ILGlobalFree ( LPITEMIDLIST  pidl)

Definition at line 1065 of file pidl.c.

1066{
1067 TRACE("%p\n", pidl);
1068
1069 Free(pidl);
1070}
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
Definition: exfuncs.h:815

◆ ILIsEqual()

BOOL WINAPI ILIsEqual ( LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)

Definition at line 583 of file pidl.c.

584{
585 LPCITEMIDLIST pidltemp1 = pidl1;
586 LPCITEMIDLIST pidltemp2 = pidl2;
587
588 TRACE("pidl1=%p pidl2=%p\n",pidl1, pidl2);
589
590#ifdef __REACTOS__
591 IShellFolder *psfDesktop;
592 UINT depth1;
593
594 if (pidl1 == pidl2 || _ILMemCmpEqualIDList(pidltemp1, pidltemp2))
595 return TRUE;
596
597 depth1 = _ILGetDepth(pidl1);
598 if (depth1 && depth1 == _ILGetDepth(pidl2) && SUCCEEDED(SHGetDesktopFolder(&psfDesktop)))
599 {
600 HRESULT hr = IShellFolder_CompareIDs(psfDesktop, SHCIDS_CANONICALONLY, pidl1, pidl2);
601 IShellFolder_Release(psfDesktop);
602 return hr == 0;
603 }
604#else /* __REACTOS__ */
605 /*
606 * Explorer reads from registry directly (StreamMRU),
607 * so we can only check here
608 */
609 if (!pcheck(pidl1) || !pcheck (pidl2))
610#ifdef __REACTOS__
611 {
612 /* We don't understand the PIDL content but that does not mean it's invalid */
613 }
614#else
615 return FALSE;
616#endif
617
618 pdump (pidl1);
619 pdump (pidl2);
620
621 if (!pidl1 || !pidl2)
622 return FALSE;
623
624 while (pidltemp1->mkid.cb && pidltemp2->mkid.cb)
625 {
626 if (!_ILHACKCompareSimpleIds(pidltemp1, pidltemp2))
627 return FALSE;
628
629 pidltemp1 = ILGetNext(pidltemp1);
630 pidltemp2 = ILGetNext(pidltemp2);
631 }
632
633 if (!pidltemp1->mkid.cb && !pidltemp2->mkid.cb)
634 return TRUE;
635#endif /* __REACTOS__ */
636 return FALSE;
637}
#define SHCIDS_CANONICALONLY
Definition: shobjidl.idl:226
#define IShellFolder_CompareIDs
Definition: utils.cpp:15
UINT _ILGetDepth(LPCITEMIDLIST pidl)

Referenced by _ILIsParentEx(), CViewStatePropertyBag::_IsSamePidl(), BrFolder_ExpandToPidl(), BrFolder_FindTreeItemOfAbsoluteItem(), BrFolder_IsTreeItemInEnum(), BrFolder_TreeItemHasThisChild(), BrowseCallbackProc(), DoGetAliasPIDLs(), CAddressEditBox::Execute(), FILEDLG95_LOOKIN_Init(), FILEDLG95_LOOKIN_SearchItem(), FILEDLG95_OnOpen(), CAddressEditBox::FillOneLevel(), ILIsParentOrSpecialParent(), init_function_pointers(), CSearchBar::Invoke(), IShellBrowserImpl_BrowseObject(), CDefView::LV_FindItemByPidl(), CSearchBar::OnLocationEditChange(), CAddressEditBox::PopulateComboBox(), CChangeNotifyServer::ShouldNotify(), START_TEST(), 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 698 of file pidl.c.

699{
700 LPCITEMIDLIST pParent = pidlParent;
701 LPCITEMIDLIST pChild = pidlChild;
702
703 TRACE("%p %p %x\n", pidlParent, pidlChild, bImmediate);
704
705#ifdef __REACTOS__
706 return _ILIsParentEx(pParent, pChild, bImmediate) != NULL;
707#else /* __REACTOS__ */
708 if (!pParent || !pChild)
709 return FALSE;
710
711 while (pParent->mkid.cb && pChild->mkid.cb)
712 {
713 if (!_ILHACKCompareSimpleIds(pParent, pChild))
714 return FALSE;
715
717 pChild = ILGetNext(pChild);
718 }
719
720 /* child has shorter name than parent */
721 if (pParent->mkid.cb)
722 return FALSE;
723
724 /* not immediate descent */
725 if ((!pChild->mkid.cb || ILGetNext(pChild)->mkid.cb) && bImmediate)
726 return FALSE;
727
728 return TRUE;
729#endif /* __REACTOS__ */
730}
FxObject * pParent
Definition: fxdpcapi.cpp:86

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

◆ ILLoadFromStream()

HRESULT WINAPI ILLoadFromStream ( IStream pStream,
LPITEMIDLIST ppPidl 
)

Definition at line 294 of file pidl.c.

295{
296 WORD wLen = 0;
297 DWORD dwBytesRead;
299
300
301 TRACE_(shell)("%p %p\n", pStream , ppPidl);
302
303 SHFree(*ppPidl);
304 *ppPidl = NULL;
305
306 IStream_AddRef (pStream);
307
308 if (SUCCEEDED(IStream_Read(pStream, &wLen, 2, &dwBytesRead)))
309 {
310 TRACE("PIDL length is %d\n", wLen);
311 if (wLen != 0)
312 {
313 *ppPidl = SHAlloc (wLen);
314 if (SUCCEEDED(IStream_Read(pStream, *ppPidl , wLen, &dwBytesRead)))
315 {
316 TRACE("Stream read OK\n");
317 ret = S_OK;
318 }
319 else
320 {
321 WARN("reading pidl failed\n");
322 SHFree(*ppPidl);
323 *ppPidl = NULL;
324 }
325 }
326 else
327 {
328 *ppPidl = NULL;
329 ret = S_OK;
330 }
331 }
332
333 /* we are not yet fully compatible */
334 if (*ppPidl && !pcheck(*ppPidl))
335 {
336 WARN("Check failed\n");
337#ifndef __REACTOS__ /* We don't know all pidl formats, must allow loading unknown */
338 SHFree(*ppPidl);
339 *ppPidl = NULL;
340#endif
341 }
342
343 IStream_Release (pStream);
344 TRACE("done\n");
345 return ret;
346}

Referenced by CShellLink::Load().

◆ ILRemoveLastID()

◆ ILSaveToStream()

HRESULT WINAPI ILSaveToStream ( IStream pStream,
LPCITEMIDLIST  pPidl 
)

Definition at line 354 of file pidl.c.

355{
356 WORD wLen = 0;
358
359 TRACE_(shell)("%p %p\n", pStream, pPidl);
360
361 IStream_AddRef (pStream);
362
363 wLen = ILGetSize(pPidl);
364
365 if (SUCCEEDED(IStream_Write(pStream, &wLen, 2, NULL)))
366 {
367 if (SUCCEEDED(IStream_Write(pStream, pPidl, wLen, NULL)))
368 ret = S_OK;
369 }
370 IStream_Release (pStream);
371
372 return ret;
373}

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

◆ SHBindToParent()

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

Definition at line 1498 of file pidl.c.

1499{
1500 IShellFolder * psfDesktop;
1502
1503 TRACE_(shell)("pidl=%p\n", pidl);
1504 pdump(pidl);
1505
1506 if (!pidl || !ppv)
1507 return E_INVALIDARG;
1508
1509 *ppv = NULL;
1510 if (ppidlLast)
1511 *ppidlLast = NULL;
1512
1513 hr = SHGetDesktopFolder(&psfDesktop);
1514 if (FAILED(hr))
1515 return hr;
1516
1517 if (_ILIsPidlSimple(pidl))
1518 {
1519 /* we are on desktop level */
1520 hr = IShellFolder_QueryInterface(psfDesktop, riid, ppv);
1521 }
1522 else
1523 {
1524 LPITEMIDLIST pidlParent = ILClone(pidl);
1525 ILRemoveLastID(pidlParent);
1526 hr = IShellFolder_BindToObject(psfDesktop, pidlParent, NULL, riid, ppv);
1527 SHFree (pidlParent);
1528 }
1529
1530 IShellFolder_Release(psfDesktop);
1531
1532 if (SUCCEEDED(hr) && ppidlLast)
1533 *ppidlLast = ILFindLastID(pidl);
1534
1535 TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08x\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
1536 return hr;
1537}
REFIID LPVOID * ppv
Definition: atlbase.h:39
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:222
BOOL _ILIsPidlSimple(LPCITEMIDLIST pidl)
Definition: pidl.c:2163

Referenced by CViewStatePropertyBag::_IsSystemFolder(), CAddressEditBox::AddComboBoxItem(), BindToObject(), CShellBrowser::BrowseToPath(), CreateIDataObject(), Entry::do_context_menu(), CAddressEditBox::Execute(), FolderBrowseCallback(), CFolderItem::get_Name(), CFSFolder::GetAttributesOf(), GetDisplayNameOf(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetUIObjectOf(), GetUIObjectOfAbsolute(), GetUIObjectOfAbsPidl(), GetUIObjectOfPath(), ILGetDisplayNameExW(), Initialize(), InitializeShellFolder_(), CShellBrowser::OnAddToFavorites(), CShellMenuCallback::OnGetContextMenu(), r_verify_pidl(), CAddressEditBox::RefreshAddress(), RSHELL_CStartMenu_CreateInstance(), SHELL_DisplayNameOf(), SHELL_GetUIObjectOfAbsoluteItem(), SHELL_InvokePidl(), shellex_get_contextmenu(), SHGetAttributes(), SHGetFileInfoW(), SHGetNameAndFlagsW(), SHGetNameFromIDList(), SHGetPathCchFromIDListW(), SHIsRemovableDrive(), START_TEST(), test_AttributesRegistration(), test_GetDisplayName(), test_GetUIObject(), and test_SHCreateDefaultContextMenu().

◆ SHCloneSpecialIDList()

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

Definition at line 446 of file pidl.c.

447{
448 LPITEMIDLIST ppidl;
449 TRACE_(shell)("(hwnd=%p,csidl=0x%x,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
450
451 if (fCreate)
453
454 SHGetSpecialFolderLocation(hwndOwner, nFolder, &ppidl);
455 return ppidl;
456}
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3384
#define CSIDL_FLAG_CREATE

Referenced by BrFolder_OnInitDialog(), CRecycleBin_ChangeNotifyBBItem(), FileOpCallback(), CShellLink::Load(), CDefView::OnCreate(), CStartMenuBtnCtxMenu::QueryContextMenu(), START_TEST(), and test_sei_lpIDList().

◆ SHELL32_CreateSimpleIDListFromPath()

LPITEMIDLIST SHELL32_CreateSimpleIDListFromPath ( LPCWSTR  pszPath,
DWORD  dwAttributes 
)

Definition at line 1189 of file pidl.c.

1190{
1192 LPITEMIDLIST pidl = NULL;
1193 _ILParsePathW(pszPath, &data, TRUE, &pidl, NULL);
1194 return pidl;
1195}
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
static HRESULT _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile, BOOL bBindCtx, LPITEMIDLIST *ppidl, LPDWORD prgfInOut)
Definition: pidl.c:1150
DWORD dwAttributes
Definition: vdmdbg.h:34

Referenced by CRecycleBin::GetFSFolderForItem(), and SHGetFileInfoW().

◆ SHGetDataFromIDListA()

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

Definition at line 1292 of file pidl.c.

1294{
1295 LPSTR filename, shortname;
1297
1298 TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
1299
1300 pdump(pidl);
1301 if (!psf || !dest)
1302 return E_INVALIDARG;
1303
1304 switch (nFormat)
1305 {
1306 case SHGDFIL_FINDDATA:
1307 pfd = dest;
1308
1309 if (_ILIsDrive(pidl) || _ILIsSpecialFolder(pidl))
1310 return E_INVALIDARG;
1311
1312 if (len < sizeof(WIN32_FIND_DATAA))
1313 return E_INVALIDARG;
1314
1315 ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
1316 _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
1317 pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
1318 pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
1319
1321 shortname = _ILGetSTextPointer(pidl);
1322
1323 if (filename)
1324 lstrcpynA(pfd->cFileName, filename, sizeof(pfd->cFileName));
1325 else
1326 pfd->cFileName[0] = '\0';
1327
1328 if (shortname)
1329 lstrcpynA(pfd->cAlternateFileName, shortname, sizeof(pfd->cAlternateFileName));
1330 else
1331 pfd->cAlternateFileName[0] = '\0';
1332 return S_OK;
1333
1335 return SHGetDataFromIDListW(psf, pidl, nFormat, dest, len);
1336
1338 FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
1339 break;
1340
1341 default:
1342 ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
1343 }
1344
1345 return E_INVALIDARG;
1346}
#define FIXME_(x)
Definition: compat.h:77
#define lstrcpynA
Definition: compat.h:751
const char * filename
Definition: ioapi.h:137
static char * dest
Definition: rtl.c:135
static LPSTR _ILGetSTextPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2377
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2579
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2120
BOOL _ILGetFileDateTime(LPCITEMIDLIST pidl, FILETIME *pFt)
Definition: pidl.c:2486
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2513
HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID dest, int len)
Definition: pidl.c:1352
#define ERR_(ch,...)
Definition: debug.h:156
#define SHGDFIL_FINDDATA
Definition: shlobj.h:1460
#define SHGDFIL_NETRESOURCE
Definition: shlobj.h:1461
#define SHGDFIL_DESCRIPTIONID
Definition: shlobj.h:1462
static PIXELFORMATDESCRIPTOR pfd
Definition: ssstars.c:67

◆ SHGetDataFromIDListW()

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

Definition at line 1352 of file pidl.c.

1354{
1355 LPSTR filename, shortname;
1357
1358 TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
1359
1360 pdump(pidl);
1361
1362 if (!psf || !dest)
1363 return E_INVALIDARG;
1364
1365 switch (nFormat)
1366 {
1367 case SHGDFIL_FINDDATA: /* FIXME: Ask the folder for PID_FINDDATA */
1368 pfd = dest;
1369
1370 if (_ILIsDrive(pidl))
1371 return E_INVALIDARG;
1372
1373 if (len < sizeof(WIN32_FIND_DATAW))
1374 return E_INVALIDARG;
1375
1376 ZeroMemory(pfd, sizeof (WIN32_FIND_DATAW));
1377 _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
1378 pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
1379 pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
1380
1382 shortname = _ILGetSTextPointer(pidl);
1383
1384 if (!filename)
1385 pfd->cFileName[0] = '\0';
1386 else if (!MultiByteToWideChar(CP_ACP, 0, filename, -1, pfd->cFileName, MAX_PATH))
1387 pfd->cFileName[MAX_PATH-1] = 0;
1388
1389 if (!shortname)
1390 pfd->cAlternateFileName[0] = '\0';
1391 else if (!MultiByteToWideChar(CP_ACP, 0, shortname, -1, pfd->cAlternateFileName, 14))
1392 pfd->cAlternateFileName[13] = 0;
1393 return S_OK;
1394
1396 {
1397 /* TODO: Use PKEY_DescriptionID when the propsys headers are ready */
1398 SHCOLUMNID scid = { FMTID_ShellDetails, PID_DESCRIPTIONID };
1399 return GetShellFolder1ItemDetailsExToBuffer(psf, pidl, &scid, dest, len);
1400 }
1401
1403 FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
1404 break;
1405
1406 default:
1407 ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
1408 }
1409
1410 return E_INVALIDARG;
1411}
static HRESULT GetShellFolder1ItemDetailsExToBuffer(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, void *buf, UINT cb)
Definition: pidl.c:1272
#define PID_DESCRIPTIONID
Definition: shlguid.h:171

Referenced by CViewStatePropertyBag::_IsSystemFolder(), and SHGetDataFromIDListA().

◆ SHGetIDListFromObject()

HRESULT WINAPI SHGetIDListFromObject ( IUnknown punk,
PIDLIST_ABSOLUTE ppidl 
)

Definition at line 1674 of file pidl.c.

1675{
1676 IPersistIDList *ppersidl;
1677 IPersistFolder2 *ppf2;
1678 IDataObject *pdo;
1679 IFolderView *pfv;
1680 HRESULT ret;
1681
1682 if(!punk)
1683 return E_NOINTERFACE;
1684
1685 *ppidl = NULL;
1686
1687 /* Try IPersistIDList */
1688 ret = IUnknown_QueryInterface(punk, &IID_IPersistIDList, (void**)&ppersidl);
1689 if(SUCCEEDED(ret))
1690 {
1691 TRACE("IPersistIDList (%p)\n", ppersidl);
1692 ret = IPersistIDList_GetIDList(ppersidl, ppidl);
1693 IPersistIDList_Release(ppersidl);
1694 if(SUCCEEDED(ret))
1695 return ret;
1696 }
1697
1698 /* Try IPersistFolder2 */
1699 ret = IUnknown_QueryInterface(punk, &IID_IPersistFolder2, (void**)&ppf2);
1700 if(SUCCEEDED(ret))
1701 {
1702 TRACE("IPersistFolder2 (%p)\n", ppf2);
1703 ret = IPersistFolder2_GetCurFolder(ppf2, ppidl);
1704 IPersistFolder2_Release(ppf2);
1705 if(SUCCEEDED(ret))
1706 return ret;
1707 }
1708
1709 /* Try IDataObject */
1710 ret = IUnknown_QueryInterface(punk, &IID_IDataObject, (void**)&pdo);
1711 if(SUCCEEDED(ret))
1712 {
1713 IShellItem *psi;
1714 TRACE("IDataObject (%p)\n", pdo);
1716 &IID_IShellItem, (void**)&psi);
1717 if(SUCCEEDED(ret))
1718 {
1719 ret = SHGetIDListFromObject((IUnknown*)psi, ppidl);
1720 IShellItem_Release(psi);
1721 }
1722 IDataObject_Release(pdo);
1723
1724 if(SUCCEEDED(ret))
1725 return ret;
1726 }
1727
1728 /* Try IFolderView */
1729 ret = IUnknown_QueryInterface(punk, &IID_IFolderView, (void**)&pfv);
1730 if(SUCCEEDED(ret))
1731 {
1732 IShellFolder *psf;
1733 TRACE("IFolderView (%p)\n", pfv);
1734 ret = IFolderView_GetFolder(pfv, &IID_IShellFolder, (void**)&psf);
1735 if(SUCCEEDED(ret))
1736 {
1737 /* We might be able to get IPersistFolder2 from a shellfolder. */
1738 ret = SHGetIDListFromObject((IUnknown*)psf, ppidl);
1739 }
1740 IFolderView_Release(pfv);
1741 return ret;
1742 }
1743
1744 return ret;
1745}
const GUID IID_IDataObject
HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
Definition: pidl.c:1674
HRESULT WINAPI SHGetItemFromDataObject(IDataObject *pdtobj, DATAOBJ_GET_ITEM_FLAGS dwFlags, REFIID riid, void **ppv)
Definition: pidl.c:1665
#define E_NOINTERFACE
Definition: winerror.h:2364

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

◆ SHGetItemFromDataObject()

HRESULT WINAPI SHGetItemFromDataObject ( IDataObject pdtobj,
DATAOBJ_GET_ITEM_FLAGS  dwFlags,
REFIID  riid,
void **  ppv 
)

Definition at line 1665 of file pidl.c.

1667{
1668 return E_NOTIMPL; // FIXME
1669}
#define E_NOTIMPL
Definition: ddrawi.h:99

Referenced by init_function_pointers(), and SHGetIDListFromObject().

◆ SHGetNameFromIDList()

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

Definition at line 1604 of file pidl.c.

1605{
1606 IShellFolder *psfparent;
1607 LPCITEMIDLIST child_pidl;
1608 STRRET disp_name;
1609 HRESULT ret;
1610
1611 TRACE("%p 0x%08x %p\n", pidl, sigdnName, ppszName);
1612
1613 *ppszName = NULL;
1614 ret = SHBindToParent(pidl, &IID_IShellFolder, (void**)&psfparent, &child_pidl);
1615 if(SUCCEEDED(ret))
1616 {
1617 switch(sigdnName)
1618 {
1619 /* sigdnName & 0xffff */
1620 case SIGDN_NORMALDISPLAY: /* SHGDN_NORMAL */
1621 case SIGDN_PARENTRELATIVEPARSING: /* SHGDN_INFOLDER | SHGDN_FORPARSING */
1622 case SIGDN_PARENTRELATIVEEDITING: /* SHGDN_INFOLDER | SHGDN_FOREDITING */
1623 case SIGDN_DESKTOPABSOLUTEPARSING: /* SHGDN_FORPARSING */
1624 case SIGDN_DESKTOPABSOLUTEEDITING: /* SHGDN_FOREDITING | SHGDN_FORADDRESSBAR*/
1625 case SIGDN_PARENTRELATIVEFORADDRESSBAR: /* SIGDN_INFOLDER | SHGDN_FORADDRESSBAR */
1626 case SIGDN_PARENTRELATIVE: /* SIGDN_INFOLDER */
1627
1628 disp_name.uType = STRRET_WSTR;
1629 ret = IShellFolder_GetDisplayNameOf(psfparent, child_pidl,
1630 sigdnName & 0xffff,
1631 &disp_name);
1632 if(SUCCEEDED(ret))
1633 ret = StrRetToStrW(&disp_name, pidl, ppszName);
1634
1635 break;
1636
1637 case SIGDN_FILESYSPATH:
1639 if(SHGetPathFromIDListW(pidl, *ppszName))
1640 {
1641 TRACE("Got string %s\n", debugstr_w(*ppszName));
1642 ret = S_OK;
1643 }
1644 else
1645 {
1647 ret = E_INVALIDARG;
1648 }
1649 break;
1650
1651 case SIGDN_URL:
1652 default:
1653 FIXME("Unsupported SIGDN %x\n", sigdnName);
1654 ret = E_FAIL;
1655 }
1656
1657 IShellFolder_Release(psfparent);
1658 }
1659 return ret;
1660}
HRESULT WINAPI StrRetToStrW(LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *ppszName)
Definition: string.c:1631
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:1490
SIGDN PWSTR * ppszName
Definition: shobjidl.idl:606
SIGDN sigdnName
Definition: shobjidl.idl:606
@ STRRET_WSTR
Definition: shtypes.idl:85
UINT uType
Definition: shtypes.idl:93

Referenced by CFSDropTarget::_DoDrop(), CShellItem::GetDisplayName(), GetParsingName(), init_function_pointers(), and SHELL_CreatePropSheetStubWindow().

◆ SHGetPathCchFromIDListW()

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

Definition at line 1445 of file pidl.c.

1449{
1450 HRESULT hr;
1451 LPCITEMIDLIST pidlLast;
1452 LPSHELLFOLDER psfFolder;
1454 STRRET strret;
1455
1456 TRACE_(shell)("(pidl=%p,%p)\n", pidl, pszPath);
1457 pdump(pidl);
1458
1459 *pszPath = UNICODE_NULL;
1460 if (!pidl)
1461 return E_FAIL;
1462
1463 hr = SHBindToParent(pidl, &IID_IShellFolder, (VOID**)&psfFolder, &pidlLast);
1464 if (FAILED(hr))
1465 {
1466 ERR("SHBindToParent failed: %x\n", hr);
1467 return hr;
1468 }
1469
1470 dwAttributes = SFGAO_FILESYSTEM;
1471 hr = IShellFolder_GetAttributesOf(psfFolder, 1, &pidlLast, &dwAttributes);
1472 if (FAILED(hr) || !(dwAttributes & SFGAO_FILESYSTEM))
1473 {
1474 WARN("Wrong dwAttributes or GetAttributesOf failed: %x\n", hr);
1475 IShellFolder_Release(psfFolder);
1476 return E_FAIL;
1477 }
1478
1479 hr = IShellFolder_GetDisplayNameOf(psfFolder, pidlLast, SHGDN_FORPARSING, &strret);
1480 IShellFolder_Release(psfFolder);
1481 if (FAILED(hr))
1482 return hr;
1483
1484 hr = StrRetToBufW(&strret, pidlLast, pszPath, cchPathMax);
1485
1486 TRACE_(shell)("-- %s, 0x%08x\n",debugstr_w(pszPath), hr);
1487 return hr;
1488}
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1530

Referenced by SHGetPathFromIDListW().

◆ SHGetPathFromIDListA()

BOOL WINAPI SHGetPathFromIDListA ( LPCITEMIDLIST  pidl,
LPSTR  pszPath 
)

Definition at line 1428 of file pidl.c.

1429{
1430 WCHAR wszPath[MAX_PATH];
1431 BOOL bSuccess;
1432
1433 bSuccess = SHGetPathFromIDListW(pidl, wszPath);
1434 WideCharToMultiByte(CP_ACP, 0, wszPath, -1, pszPath, MAX_PATH, NULL, NULL);
1435
1436 return bSuccess;
1437}

Referenced by RenderFILENAMEA(), SHAddToRecentDocs(), test_click_make_new_folder_button(), and test_get_set().

◆ SHGetPathFromIDListW()

BOOL WINAPI SHGetPathFromIDListW ( LPCITEMIDLIST  pidl,
LPWSTR  pszPath 
)

Definition at line 1490 of file pidl.c.

1491{
1492 return SUCCEEDED(SHGetPathCchFromIDListW(pidl, pszPath, MAX_PATH));
1493}
HRESULT WINAPI SHGetPathCchFromIDListW(_In_ LPCITEMIDLIST pidl, _Out_writes_(cchPathMax) LPWSTR pszPath, _In_ SIZE_T cchPathMax)
Definition: pidl.c:1445

Referenced by BtrfsSend::AddClone(), BrFolder_NewFolder(), BrowseCallbackProc(), BtrfsSend::BrowseParent(), ChooseFolder(), CHSourceDlgProc(), CreateDirectoryWatcherFromRegEntry(), CNewMenu::CreateNewFolder(), CNewMenu::CreateNewItem(), CCopyMoveToMenu::DoAction(), CDefaultContextMenu::DoCreateNewFolder(), DoInitAliasPIDLs(), CCopyMoveToMenu::DoRealFileOp(), DoTestEntry(), DoUpdateAutoCompleteWithCWD(), CMyDocsDropHandler::Drop(), CDeskLinkDropHandler::Drop(), CAddressEditBox::ExecuteCommandLine(), CACListISF::Expand(), FileExtractDialogWndProc(), CEnumIDList::Fill(), CSearchBar::GetAddressEditBoxLocations(), CFSFolder::GetCustomViewInfo(), CCabFolder::GetDisplayNameOf(), GetFsPathFromIDList(), GetIconOverlay(), CShellLink::GetPath(), CFontExt::Initialize(), CZipFolder::Initialize(), CCabFolder::Initialize(), CFSFolder::Initialize(), BtrfsContextMenu::Initialize(), COpenWithMenu::Initialize(), CFSFolder::InitializeEx(), InstallFontFiles(), CStartMenuBtnCtxMenu::InvokeCommand(), CDefaultContextMenu::InvokePidl(), IsPidlPrograms(), LoadRdpSettingsFromFile(), CZipExtract::CExtractSettingsPage::OnBrowse(), CDefView::OnNotify(), RenderFILENAMEW(), RenderHDROP(), CShellLink::Resolve(), SaveRdpSettingsToFile(), CShellLink::SetTargetFromPIDLOrPath(), SHAddToRecentDocs(), 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 861 of file pidl.c.

862{
863 IDataObject* pDataObj;
864 HRESULT hr;
865
866 hr = IShellFolder_GetUIObjectOf(lpsf, 0, 1, &pidlSimple,
867 &IID_IDataObject, 0, (LPVOID*)&pDataObj);
868 if (SUCCEEDED(hr))
869 {
870 STGMEDIUM medium;
871 FORMATETC fmt;
872
874 fmt.ptd = NULL;
875 fmt.dwAspect = DVASPECT_CONTENT;
876 fmt.lindex = -1;
877 fmt.tymed = TYMED_HGLOBAL;
878
879 hr = IDataObject_GetData(pDataObj, &fmt, &medium);
880
881 IDataObject_Release(pDataObj);
882
883 if (SUCCEEDED(hr))
884 {
885 /*assert(pida->cidl==1);*/
886 LPIDA pida = GlobalLock(medium.u.hGlobal);
887
888 LPCITEMIDLIST pidl_folder = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]);
889 LPCITEMIDLIST pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[1]);
890
891 *pidlReal = ILCombine(pidl_folder, pidl_child);
892
893 if (!*pidlReal)
895
896 GlobalUnlock(medium.u.hGlobal);
897 GlobalFree(medium.u.hGlobal);
898 }
899 }
900
901 return hr;
902}
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:514
Definition: shlobj.h:580
UINT aoffset[1]
Definition: shlobj.h:581
Definition: dsound.c:943
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)

◆ SHILCreateFromPathA()

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

Definition at line 392 of file pidl.c.

393{
394 WCHAR lpszDisplayName[MAX_PATH];
395
396 TRACE_(shell)("%s %p 0x%08x\n", path, ppidl, attributes ? *attributes : 0);
397
398 if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName, MAX_PATH))
399 lpszDisplayName[MAX_PATH-1] = 0;
400
401 return SHILCreateFromPathW(lpszDisplayName, ppidl, attributes);
402}

Referenced by ILCreateFromPathA(), and SHILCreateFromPathAW().

◆ SHILCreateFromPathAW()

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

Definition at line 420 of file pidl.c.

421{
422 if ( SHELL_OsIsUnicode())
423 return SHILCreateFromPathW (path, ppidl, attributes);
424 return SHILCreateFromPathA (path, ppidl, attributes);
425}

◆ SHILCreateFromPathW()

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

Definition at line 404 of file pidl.c.

405{
406 LPSHELLFOLDER sf;
407 DWORD pchEaten;
409
410 TRACE_(shell)("%s %p 0x%08x\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
411
412 if (SUCCEEDED (SHGetDesktopFolder(&sf)))
413 {
414 ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path, &pchEaten, ppidl, attributes);
415 IShellFolder_Release(sf);
416 }
417 return ret;
418}

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

◆ SHLogILFromFSIL()

LPITEMIDLIST WINAPI SHLogILFromFSIL ( LPITEMIDLIST  pidl)

Definition at line 912 of file pidl.c.

913{
914 FIXME("(pidl=%p)\n",pidl);
915
916 pdump(pidl);
917
918 return 0;
919}

◆ SHParseDisplayName()

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

Definition at line 1542 of file pidl.c.

1544{
1545 HRESULT hr;
1546 LPWSTR pszNameDup;
1547 IShellFolder *psfDesktop;
1548 IBindCtx *pBindCtx = NULL;
1549
1550 TRACE("(%s, %p, %p, 0x%X, %p)\n", pszName, pbc, ppidl, sfgaoIn, psfgaoOut);
1551
1552 *ppidl = NULL;
1553
1554 if (psfgaoOut)
1555 *psfgaoOut = 0;
1556
1557 pszNameDup = StrDupW(pszName);
1558 if (!pszNameDup)
1559 return E_OUTOFMEMORY;
1560
1561 psfDesktop = NULL;
1562 hr = SHGetDesktopFolder(&psfDesktop);
1563 if (FAILED(hr))
1564 {
1565 LocalFree(pszNameDup);
1566 return hr;
1567 }
1568
1569 if (!pbc)
1570 {
1571 hr = BindCtx_RegisterObjectParam(NULL, STR_PARSE_TRANSLATE_ALIASES, NULL, &pBindCtx);
1572 pbc = pBindCtx;
1573 }
1574
1575 if (SUCCEEDED(hr))
1576 {
1577 ULONG sfgao = sfgaoIn, cchEaten;
1578 HWND hwndUI = BindCtx_GetUIWindow(pbc);
1579 hr = psfDesktop->lpVtbl->ParseDisplayName(psfDesktop,
1580 hwndUI,
1581 pbc,
1582 pszNameDup,
1583 &cchEaten,
1584 ppidl,
1585 (psfgaoOut ? &sfgao : NULL));
1586 if (SUCCEEDED(hr) && psfgaoOut)
1587 *psfgaoOut = (sfgao & sfgaoIn);
1588 }
1589
1590 LocalFree(pszNameDup);
1591
1592 if (psfDesktop)
1593 psfDesktop->lpVtbl->Release(psfDesktop);
1594
1595 if (pBindCtx)
1596 pBindCtx->lpVtbl->Release(pBindCtx);
1597
1598 return hr;
1599}
WCHAR *WINAPI StrDupW(const WCHAR *str)
Definition: string.c:313
HRESULT ParseDisplayName([in] HWND hwndOwner, [in] LPBC pbcReserved, [in, string] LPOLESTR lpszDisplayName, [out] ULONG *pchEaten, [out] PIDLIST_RELATIVE *ppidl, [in, out, unique] ULONG *pdwAttributes)
EXTERN_C HRESULT BindCtx_RegisterObjectParam(_In_ IBindCtx *pBindCtx, _In_ LPOLESTR pszKey, _In_opt_ IUnknown *punk, _Out_ LPBC *ppbc)
Definition: utils.cpp:597
EXTERN_C HWND BindCtx_GetUIWindow(_In_ IBindCtx *pBindCtx)
Definition: utils.cpp:537
uint32_t ULONG
Definition: typedefs.h:59

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

◆ SHSimpleIDListFromPathA()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathA ( LPCSTR  lpszPath)

Definition at line 1217 of file pidl.c.

1218{
1219 LPITEMIDLIST pidl = NULL;
1220 LPWSTR wPath = NULL;
1221 int len;
1222
1223 TRACE("%s\n", debugstr_a(lpszPath));
1224
1225 if (lpszPath)
1226 {
1227 len = MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, NULL, 0);
1228 wPath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1229 MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, wPath, len);
1230 }
1231
1232 _ILParsePathW(wPath, NULL, TRUE, &pidl, NULL);
1233
1234 HeapFree(GetProcessHeap(), 0, wPath);
1235 TRACE("%s %p\n", debugstr_a(lpszPath), pidl);
1236 return pidl;
1237}
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735

Referenced by SHSimpleIDListFromPathAW().

◆ SHSimpleIDListFromPathAW()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW ( LPCVOID  lpszPath)

Definition at line 1251 of file pidl.c.

1252{
1253 if ( SHELL_OsIsUnicode())
1254 return SHSimpleIDListFromPathW (lpszPath);
1255 return SHSimpleIDListFromPathA (lpszPath);
1256}
LPITEMIDLIST WINAPI SHSimpleIDListFromPathA(LPCSTR lpszPath)
Definition: pidl.c:1217
LPITEMIDLIST WINAPI SHSimpleIDListFromPathW(LPCWSTR lpszPath)
Definition: pidl.c:1239

◆ SHSimpleIDListFromPathW()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathW ( LPCWSTR  lpszPath)

Definition at line 1239 of file pidl.c.

1240{
1241 LPITEMIDLIST pidl = NULL;
1242
1243 TRACE("%s\n", debugstr_w(lpszPath));
1244
1245 _ILParsePathW(lpszPath, NULL, TRUE, &pidl, NULL);
1246
1247 TRACE("%s %p\n", debugstr_w(lpszPath), pidl);
1248 return pidl;
1249}

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

◆ WINE_DECLARE_DEBUG_CHANNEL()

WINE_DECLARE_DEBUG_CHANNEL ( shell  )

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( pidl  )