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

Go to the source code of this file.

Macros

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

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (pidl)
 
 WINE_DECLARE_DEBUG_CHANNEL (shell)
 
LPVOID WINAPI Alloc (INT)
 
BOOL WINAPI Free (LPVOID)
 
static LPSTR _ILGetSTextPointer (LPCITEMIDLIST pidl)
 
static LPWSTR _ILGetTextPointerW (LPCITEMIDLIST pidl)
 
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 1761 of file pidl.c.

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

2625{
2626 UINT i;
2627 PITEMID_CHILD *apidldest;
2628
2629 if (!apidlsrc)
2630 return NULL;
2631
2632 apidldest = SHAlloc(cidl * sizeof(PITEMID_CHILD));
2633
2634 for (i = 0; i < cidl; i++)
2635 apidldest[i] = ILClone(apidlsrc[i]);
2636
2637 return apidldest;
2638}
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:237

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

◆ _ILCopyCidaToaPidl()

LPITEMIDLIST * _ILCopyCidaToaPidl ( LPITEMIDLIST pidl,
const CIDA cida 
)

Definition at line 2645 of file pidl.c.

2646{
2647 UINT i;
2649
2650 dst = SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
2651 if (!dst)
2652 return NULL;
2653
2654 if (pidl)
2655 *pidl = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[0]]));
2656
2657 for (i = 0; i < cida->cidl; i++)
2658 dst[i] = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[i + 1]]));
2659
2660 return dst;
2661}
GLenum GLenum dst
Definition: glext.h:6340
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
UINT cidl
Definition: shlobj.h:580
unsigned char BYTE
Definition: xxhash.c:193

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

◆ _ILCreateAdminTools()

LPITEMIDLIST _ILCreateAdminTools ( void  )

Definition at line 1873 of file pidl.c.

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

◆ _ILCreateBitBucket()

LPITEMIDLIST _ILCreateBitBucket ( void  )

Definition at line 1867 of file pidl.c.

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

Referenced by SHGetFolderLocation().

◆ _ILCreateControlPanel()

LPITEMIDLIST _ILCreateControlPanel ( void  )

Definition at line 1816 of file pidl.c.

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

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

◆ _ILCreateDesktop()

LPITEMIDLIST _ILCreateDesktop ( void  )

Definition at line 1787 of file pidl.c.

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

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

◆ _ILCreateDrive()

LPITEMIDLIST _ILCreateDrive ( LPCWSTR  lpszNew)

Definition at line 2000 of file pidl.c.

2001{
2002 LPITEMIDLIST pidlOut;
2003
2004 TRACE("(%s)\n",debugstr_w(lpszNew));
2005
2006 pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct));
2007 if (pidlOut)
2008 {
2009 LPSTR pszDest = _ILGetTextPointer(pidlOut);
2010 if (pszDest)
2011 {
2012 lstrcpyA(pszDest, "x:\\");
2013 pszDest[0] = toupper(lpszNew[0]);
2014 TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
2015 }
2016 }
2017 return pidlOut;
2018}
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:2335
static LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size)
Definition: pidl.c:1761
#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 2020 of file pidl.c.

2021{
2022 LPITEMIDLIST pidlOut;
2023
2024 TRACE("\n");
2025
2026 pidlOut = _ILAlloc(PT_NETWORK, FIELD_OFFSET(PIDLDATA, u.network.szNames[sizeof("Entire Network")]));
2027 if (pidlOut)
2028 {
2030
2031 pData->u.network.dummy = 0;
2032 strcpy(pData->u.network.szNames, "Entire Network");
2033 }
2034 return pidlOut;
2035}
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 1933 of file pidl.c.

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

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

◆ _ILCreateGuid()

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

Definition at line 1879 of file pidl.c.

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

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

◆ _ILCreateGuidFromStrW()

LPITEMIDLIST _ILCreateGuidFromStrW ( LPCWSTR  szGUID)

Definition at line 1916 of file pidl.c.

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

◆ _ILCreateIExplore()

LPITEMIDLIST _ILCreateIExplore ( void  )

Definition at line 1810 of file pidl.c.

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

Referenced by SHGetFolderLocation().

◆ _ILCreateMyComputer()

LPITEMIDLIST _ILCreateMyComputer ( void  )

Definition at line 1798 of file pidl.c.

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

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

◆ _ILCreateMyDocuments()

LPITEMIDLIST _ILCreateMyDocuments ( void  )

Definition at line 1804 of file pidl.c.

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

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

◆ _ILCreateNetwork()

LPITEMIDLIST _ILCreateNetwork ( void  )

Definition at line 1861 of file pidl.c.

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

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

◆ _ILCreatePrinters()

LPITEMIDLIST _ILCreatePrinters ( void  )

Definition at line 1834 of file pidl.c.

1835{
1836#ifdef __REACTOS__
1837 // Note: Wine returns the PIDL as it was in Windows 95, NT5 moved it into CSIDL_CONTROLS
1838 extern HRESULT SHGetFolderLocationHelper(HWND hwnd, int nFolder, REFCLSID clsid, LPITEMIDLIST *ppidl);
1839 LPITEMIDLIST pidl;
1840 SHGetFolderLocationHelper(NULL, CSIDL_CONTROLS, &CLSID_Printers, &pidl);
1841 return pidl;
1842#else
1843 LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
1844
1845 TRACE("()\n");
1846 if (parent)
1847 {
1848 LPITEMIDLIST printers = _ILCreateGuid(PT_YAGUID, &CLSID_Printers);
1849
1850 if (printers)
1851 {
1852 ret = ILCombine(parent, printers);
1853 SHFree(printers);
1854 }
1855 SHFree(parent);
1856 }
1857 return ret;
1858#endif
1859}
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()

void _ILFreeaPidl ( LPITEMIDLIST apidl,
UINT  cidl 
)

◆ _ILGetDataPointer()

◆ _ILGetDrive()

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

Definition at line 2045 of file pidl.c.

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

Referenced by _ILGetDriveType(), and DrivesContextMenuCallback().

◆ _ILGetExtension()

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

Definition at line 2531 of file pidl.c.

2532{
2533 WCHAR szTemp[MAX_PATH];
2534 LPCWSTR pPoint;
2535 LPCITEMIDLIST pidlTemp = pidl;
2536
2537 TRACE("pidl=%p\n",pidl);
2538
2539 if (!pidl)
2540 return FALSE;
2541
2542 pidlTemp = ILFindLastID(pidl);
2543
2544 if (!_ILIsValue(pidlTemp))
2545 return FALSE;
2546 if (!_ILSimpleGetTextW(pidlTemp, szTemp, _countof(szTemp)))
2547 return FALSE;
2548
2549 pPoint = PathFindExtensionW(szTemp);
2550
2551 if (!*pPoint)
2552 return FALSE;
2553
2554 pPoint++;
2555 lstrcpynW(pOut, pPoint, uOutSize);
2556 TRACE("%s\n", debugstr_w(pOut));
2557
2558 return TRUE;
2559}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define lstrcpynW
Definition: compat.h:738
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:198
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:2144
#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 2578 of file pidl.c.

2579{
2580 DWORD wAttrib = 0;
2581 if (_ILGetFSType(pidl))
2582 wAttrib = _ILGetDataPointer(pidl)->u.file.uFileAttribs;
2583
2584 if (uOutSize >= 6)
2585 {
2586 UINT i = 0;
2587 if(wAttrib & FILE_ATTRIBUTE_READONLY)
2588 pOut[i++] = L'R';
2589 if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
2590 pOut[i++] = L'H';
2591 if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
2592 pOut[i++] = L'S';
2593 if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
2594 pOut[i++] = L'A';
2595 if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
2596 pOut[i++] = L'C';
2597 pOut[i] = UNICODE_NULL;
2598 }
2599 return wAttrib;
2600}
#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::@596 u

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

◆ _ILGetFileDateTime()

BOOL _ILGetFileDateTime ( LPCITEMIDLIST  pidl,
FILETIME pFt 
)

Definition at line 2485 of file pidl.c.

2486{
2487 if (_ILGetFSType(pidl) > PT_FS) /* Only non-simple FS items have a date */
2488 {
2490 return DosDateTimeToFileTime(pdata->u.file.uFileDate, pdata->u.file.uFileTime, pFt);
2491 }
2492 return FALSE;
2493}
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 2512 of file pidl.c.

2513{
2515 if (!pdata)
2516 return 0;
2517
2518 if (_ILGetFSType(pidl) & PT_FS_FILE_FLAG)
2519 {
2520 /* FIXME: Handle INVALID_FILE_SIZE (get size from disk) */
2521 DWORD dwSize = pdata->u.file.dwFileSize;
2522 if (pOut)
2523 StrFormatKBSizeW(dwSize, pOut, uOutSize);
2524 return dwSize;
2525 }
2526 if (pOut)
2527 *pOut = UNICODE_NULL;
2528 return 0;
2529}
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 2443 of file pidl.c.

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

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

◆ _ILGetGUIDPointer()

IID * _ILGetGUIDPointer ( LPCITEMIDLIST  pidl)

Definition at line 2407 of file pidl.c.

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

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

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

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

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

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

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

◆ _ILIsBitBucket()

BOOL _ILIsBitBucket ( LPCITEMIDLIST  pidl)

Definition at line 2108 of file pidl.c.

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

Referenced by CGuidItemExtractIcon_CreateInstance().

◆ _ILIsCPanelStruct()

BOOL _ILIsCPanelStruct ( LPCITEMIDLIST  pidl)

Definition at line 2150 of file pidl.c.

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

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

◆ _ILIsDesktop()

BOOL _ILIsDesktop ( LPCITEMIDLIST  pidl)
inline

Definition at line 2079 of file pidl.c.

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

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

◆ _ILIsDrive()

◆ _ILIsFolder()

BOOL _ILIsFolder ( LPCITEMIDLIST  pidl)

Definition at line 2137 of file pidl.c.

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

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

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

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

◆ _ILIsMyDocuments()

BOOL _ILIsMyDocuments ( LPCITEMIDLIST  pidl)

Definition at line 2086 of file pidl.c.

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

◆ _ILIsParentEx()

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

Definition at line 638 of file pidl.c.

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

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

Referenced by SHBindToParent().

◆ _ILIsSpecialFolder()

◆ _ILIsUnicode()

BOOL _ILIsUnicode ( LPCITEMIDLIST  pidl)

Definition at line 2072 of file pidl.c.

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

Referenced by pdump_impl().

◆ _ILIsValue()

BOOL _ILIsValue ( LPCITEMIDLIST  pidl)

Definition at line 2144 of file pidl.c.

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

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

1151{
1152 LPSHELLFOLDER pSF = NULL;
1153 LPBC pBC = NULL;
1154 HRESULT ret;
1155
1156 TRACE("%s %p %d (%p)->%p (%p)->0x%x\n", debugstr_w(path), lpFindFile, bBindCtx,
1157 ppidl, ppidl ? *ppidl : NULL,
1158 prgfInOut, prgfInOut ? *prgfInOut : 0);
1159
1160 ret = SHGetDesktopFolder(&pSF);
1161 if (FAILED(ret))
1162 return ret;
1163
1164 if (lpFindFile || bBindCtx)
1165 ret = IFileSystemBindData_Constructor(lpFindFile, &pBC);
1166
1167 if (SUCCEEDED(ret))
1168 {
1169 ret = IShellFolder_ParseDisplayName(pSF, 0, pBC, (LPOLESTR)path, NULL, ppidl, prgfInOut);
1170 }
1171
1172 if (pBC)
1173 {
1174 IBindCtx_Release(pBC);
1175 pBC = NULL;
1176 }
1177
1178 IShellFolder_Release(pSF);
1179
1180 if (FAILED(ret) && ppidl)
1181 *ppidl = NULL;
1182
1183 TRACE("%s %p 0x%x\n", debugstr_w(path), ppidl ? *ppidl : NULL, prgfInOut ? *prgfInOut : 0);
1184
1185 return ret;
1186}
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 2191 of file pidl.c.

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

515{
516 HWND hWnd = NULL;
517
519 if (pBindCtx && SUCCEEDED(pBindCtx->GetObjectParam((LPWSTR)L"UI During Binding", &punk)))
520 IUnknown_GetWindow(punk, &hWnd);
521
522 return hWnd;
523}
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 574 of file utils.cpp.

579{
580 HRESULT hr = S_OK;
582
583 *ppbc = pBindCtx;
584
585 if (pBindCtx)
586 {
587 pBindCtx->AddRef();
588 }
589 else
590 {
591 hr = CreateBindCtx(0, ppbc);
592 if (FAILED(hr))
593 return hr;
594 }
595
596 if (!punk)
597 punk = pUnknown = new CDummyOleWindow();
598
599 hr = (*ppbc)->RegisterObjectParam(pszKey, punk);
600
601 if (pUnknown)
602 pUnknown->Release();
603
604 if (FAILED(hr))
605 {
606 (*ppbc)->Release();
607 *ppbc = NULL;
608 }
609
610 return hr;
611}
_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 1271 of file pidl.c.

1273{
1274 IShellFolder2 *psf2;
1275 HRESULT hr = IShellFolder_QueryInterface(psf, &IID_IShellFolder2, (void**)&psf2);
1276 if (SUCCEEDED(hr))
1277 {
1278 hr = GetShellFolder2ItemDetailsExToBuffer(psf2, pidl, pscid, buf, cb);
1279 IShellFolder2_Release(psf2);
1280 }
1281 return hr;
1282}
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:1257

Referenced by SHGetDataFromIDListW().

◆ GetShellFolder2ItemDetailsExToBuffer()

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

Definition at line 1257 of file pidl.c.

1259{
1260 VARIANT var;
1261 V_VT(&var) = VT_EMPTY;
1262 HRESULT hr = IShellFolder2_GetDetailsEx(psf2, pidl, pscid, &var);
1263 if (SUCCEEDED(hr))
1264 {
1266 VariantClear(&var);
1267 }
1268 return hr;
1269}
@ 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:261
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 1004 of file pidl.c.

1005{
1006 LPITEMIDLIST idlRet;
1008
1009 WARN("(pidl=%p,pidl=%p,%08u)semi-stub\n",pidl,item,bEnd);
1010
1011 pdump (pidl);
1012 pdump (itemid);
1013
1014 if (_ILIsDesktop(pidl))
1015 {
1016 idlRet = ILClone(itemid);
1017 SHFree (pidl);
1018 return idlRet;
1019 }
1020
1021 if (bEnd)
1022 idlRet = ILCombine(pidl, itemid);
1023 else
1024 idlRet = ILCombine(itemid, pidl);
1025
1026 SHFree(pidl);
1027 return idlRet;
1028}
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 237 of file pidl.c.

238{
239 DWORD len;
240 LPITEMIDLIST newpidl;
241
242 if (!pidl)
243 return NULL;
244
245 len = ILGetSize(pidl);
246 newpidl = SHAlloc(len);
247 if (newpidl)
248 memcpy(newpidl,pidl,len);
249
250 TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
251 pdump(pidl);
252
253 return newpidl;
254}
#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 262 of file pidl.c.

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

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

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

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(), 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 1085 of file pidl.c.

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

Referenced by ILCreateFromPathAW(), and init_function_pointers().

◆ ILCreateFromPathAW()

LPITEMIDLIST WINAPI ILCreateFromPathAW ( LPCVOID  path)

Definition at line 1115 of file pidl.c.

1116{
1117 if ( SHELL_OsIsUnicode())
1118 return ILCreateFromPathW (path);
1119 return ILCreateFromPathA (path);
1120}
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
Definition: pidl.c:1101
LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR path)
Definition: pidl.c:1085
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:155

◆ ILCreateFromPathW()

◆ ILFindChild()

PUIDLIST_RELATIVE WINAPI ILFindChild ( PIDLIST_ABSOLUTE  pidl1,
PCIDLIST_ABSOLUTE  pidl2 
)

Definition at line 750 of file pidl.c.

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

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

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(), 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(), 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(), 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 183 of file pidl.c.

184{
185 TRACE_(shell)("%p %p\n", pidl, path);
186
187 if (SHELL_OsIsUnicode())
190}
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
Definition: pidl.c:100
static BOOL ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
Definition: pidl.c:83
#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 171 of file pidl.c.

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

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

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

Referenced by ILGetDisplayName(), and ILGetDisplayNameEx().

◆ ILGetDisplayNameExW()

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

Definition at line 100 of file pidl.c.

101{
102 LPSHELLFOLDER psfParent, lsf = psf;
104 LPCITEMIDLIST pidllast;
105 STRRET strret;
106 DWORD flag;
107
108 TRACE("%p %p %p %x\n", psf, pidl, path, type);
109
110 if (!pidl || !path)
111 return FALSE;
112
113 if (!lsf)
114 {
115 ret = SHGetDesktopFolder(&lsf);
116 if (FAILED(ret))
117 return FALSE;
118 }
119
120 switch (type)
121 {
122 case ILGDN_FORPARSING:
123 flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
124 break;
125 case ILGDN_NORMAL:
126 flag = SHGDN_NORMAL;
127 break;
128 case ILGDN_INFOLDER:
129 flag = SHGDN_INFOLDER;
130 break;
131 default:
132 FIXME("Unknown type parameter = %x\n", type);
133 flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
134 break;
135 }
136
137 if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
138 {
139 ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag, &strret);
140 if (SUCCEEDED(ret))
141 {
142 if(!StrRetToStrNW(path, MAX_PATH, &strret, pidl))
143 ret = E_FAIL;
144 }
145 }
146 else
147 {
148 ret = SHBindToParent(pidl, &IID_IShellFolder, (LPVOID*)&psfParent, &pidllast);
149 if (SUCCEEDED(ret))
150 {
151 ret = IShellFolder_GetDisplayNameOf(psfParent, pidllast, flag, &strret);
152 if (SUCCEEDED(ret))
153 {
154 if(!StrRetToStrNW(path, MAX_PATH, &strret, pidllast))
155 ret = E_FAIL;
156 }
157 IShellFolder_Release(psfParent);
158 }
159 }
160
161 TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
162
163 if (!psf)
164 IShellFolder_Release(lsf);
165 return SUCCEEDED(ret);
166}
#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:1497
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 934 of file pidl.c.

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

◆ ILGlobalClone()

LPITEMIDLIST WINAPI ILGlobalClone ( LPCITEMIDLIST  pidl)

Definition at line 471 of file pidl.c.

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

◆ ILGlobalFree()

void WINAPI ILGlobalFree ( LPITEMIDLIST  pidl)

Definition at line 1064 of file pidl.c.

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

◆ ILIsEqual()

BOOL WINAPI ILIsEqual ( LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)

Definition at line 582 of file pidl.c.

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

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

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

Referenced by CShellLink::Load().

◆ ILRemoveLastID()

◆ ILSaveToStream()

HRESULT WINAPI ILSaveToStream ( IStream pStream,
LPCITEMIDLIST  pPidl 
)

Definition at line 353 of file pidl.c.

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

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

◆ SHBindToParent()

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

Definition at line 1497 of file pidl.c.

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

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_execute(), 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 445 of file pidl.c.

446{
447 LPITEMIDLIST ppidl;
448 TRACE_(shell)("(hwnd=%p,csidl=0x%x,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
449
450 if (fCreate)
452
453 SHGetSpecialFolderLocation(hwndOwner, nFolder, &ppidl);
454 return ppidl;
455}
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 1188 of file pidl.c.

1189{
1191 LPITEMIDLIST pidl = NULL;
1192 _ILParsePathW(pszPath, &data, TRUE, &pidl, NULL);
1193 return pidl;
1194}
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:1149
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 1291 of file pidl.c.

1293{
1294 LPSTR filename, shortname;
1296
1297 TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
1298
1299 pdump(pidl);
1300 if (!psf || !dest)
1301 return E_INVALIDARG;
1302
1303 switch (nFormat)
1304 {
1305 case SHGDFIL_FINDDATA:
1306 pfd = dest;
1307
1308 if (_ILIsDrive(pidl) || _ILIsSpecialFolder(pidl))
1309 return E_INVALIDARG;
1310
1311 if (len < sizeof(WIN32_FIND_DATAA))
1312 return E_INVALIDARG;
1313
1314 ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
1315 _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
1316 pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
1317 pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
1318
1320 shortname = _ILGetSTextPointer(pidl);
1321
1322 if (filename)
1323 lstrcpynA(pfd->cFileName, filename, sizeof(pfd->cFileName));
1324 else
1325 pfd->cFileName[0] = '\0';
1326
1327 if (shortname)
1328 lstrcpynA(pfd->cAlternateFileName, shortname, sizeof(pfd->cAlternateFileName));
1329 else
1330 pfd->cAlternateFileName[0] = '\0';
1331 return S_OK;
1332
1334 return SHGetDataFromIDListW(psf, pidl, nFormat, dest, len);
1335
1337 FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
1338 break;
1339
1340 default:
1341 ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
1342 }
1343
1344 return E_INVALIDARG;
1345}
#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:2376
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2578
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2119
BOOL _ILGetFileDateTime(LPCITEMIDLIST pidl, FILETIME *pFt)
Definition: pidl.c:2485
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2512
HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID dest, int len)
Definition: pidl.c:1351
#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 1351 of file pidl.c.

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

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

1666{
1667 return E_NOTIMPL; // FIXME
1668}
#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 1603 of file pidl.c.

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

1448{
1449 HRESULT hr;
1450 LPCITEMIDLIST pidlLast;
1451 LPSHELLFOLDER psfFolder;
1453 STRRET strret;
1454
1455 TRACE_(shell)("(pidl=%p,%p)\n", pidl, pszPath);
1456 pdump(pidl);
1457
1458 *pszPath = UNICODE_NULL;
1459 if (!pidl)
1460 return E_FAIL;
1461
1462 hr = SHBindToParent(pidl, &IID_IShellFolder, (VOID**)&psfFolder, &pidlLast);
1463 if (FAILED(hr))
1464 {
1465 ERR("SHBindToParent failed: %x\n", hr);
1466 return hr;
1467 }
1468
1469 dwAttributes = SFGAO_FILESYSTEM;
1470 hr = IShellFolder_GetAttributesOf(psfFolder, 1, &pidlLast, &dwAttributes);
1471 if (FAILED(hr) || !(dwAttributes & SFGAO_FILESYSTEM))
1472 {
1473 WARN("Wrong dwAttributes or GetAttributesOf failed: %x\n", hr);
1474 IShellFolder_Release(psfFolder);
1475 return E_FAIL;
1476 }
1477
1478 hr = IShellFolder_GetDisplayNameOf(psfFolder, pidlLast, SHGDN_FORPARSING, &strret);
1479 IShellFolder_Release(psfFolder);
1480 if (FAILED(hr))
1481 return hr;
1482
1483 hr = StrRetToBufW(&strret, pidlLast, pszPath, cchPathMax);
1484
1485 TRACE_(shell)("-- %s, 0x%08x\n",debugstr_w(pszPath), hr);
1486 return hr;
1487}
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 1427 of file pidl.c.

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

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

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

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

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

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

Referenced by ILCreateFromPathA(), and SHILCreateFromPathAW().

◆ SHILCreateFromPathAW()

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

Definition at line 419 of file pidl.c.

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

◆ SHILCreateFromPathW()

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

Definition at line 403 of file pidl.c.

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

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

◆ SHLogILFromFSIL()

LPITEMIDLIST WINAPI SHLogILFromFSIL ( LPITEMIDLIST  pidl)

Definition at line 911 of file pidl.c.

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

◆ SHParseDisplayName()

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

Definition at line 1541 of file pidl.c.

1543{
1544 HRESULT hr;
1545 LPWSTR pszNameDup;
1546 IShellFolder *psfDesktop;
1547 IBindCtx *pBindCtx = NULL;
1548
1549 TRACE("(%s, %p, %p, 0x%X, %p)\n", pszName, pbc, ppidl, sfgaoIn, psfgaoOut);
1550
1551 *ppidl = NULL;
1552
1553 if (psfgaoOut)
1554 *psfgaoOut = 0;
1555
1556 pszNameDup = StrDupW(pszName);
1557 if (!pszNameDup)
1558 return E_OUTOFMEMORY;
1559
1560 psfDesktop = NULL;
1561 hr = SHGetDesktopFolder(&psfDesktop);
1562 if (FAILED(hr))
1563 {
1564 LocalFree(pszNameDup);
1565 return hr;
1566 }
1567
1568 if (!pbc)
1569 {
1570 hr = BindCtx_RegisterObjectParam(NULL, STR_PARSE_TRANSLATE_ALIASES, NULL, &pBindCtx);
1571 pbc = pBindCtx;
1572 }
1573
1574 if (SUCCEEDED(hr))
1575 {
1576 ULONG sfgao = sfgaoIn, cchEaten;
1577 HWND hwndUI = BindCtx_GetUIWindow(pbc);
1578 hr = psfDesktop->lpVtbl->ParseDisplayName(psfDesktop,
1579 hwndUI,
1580 pbc,
1581 pszNameDup,
1582 &cchEaten,
1583 ppidl,
1584 (psfgaoOut ? &sfgao : NULL));
1585 if (SUCCEEDED(hr) && psfgaoOut)
1586 *psfgaoOut = (sfgao & sfgaoIn);
1587 }
1588
1589 LocalFree(pszNameDup);
1590
1591 if (psfDesktop)
1592 psfDesktop->lpVtbl->Release(psfDesktop);
1593
1594 if (pBindCtx)
1595 pBindCtx->lpVtbl->Release(pBindCtx);
1596
1597 return hr;
1598}
LPWSTR WINAPI StrDupW(LPCWSTR lpszStr)
Definition: string.c:1093
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:574
EXTERN_C HWND BindCtx_GetUIWindow(_In_ IBindCtx *pBindCtx)
Definition: utils.cpp:514
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 1216 of file pidl.c.

1217{
1218 LPITEMIDLIST pidl = NULL;
1219 LPWSTR wPath = NULL;
1220 int len;
1221
1222 TRACE("%s\n", debugstr_a(lpszPath));
1223
1224 if (lpszPath)
1225 {
1226 len = MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, NULL, 0);
1227 wPath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1228 MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, wPath, len);
1229 }
1230
1231 _ILParsePathW(wPath, NULL, TRUE, &pidl, NULL);
1232
1233 HeapFree(GetProcessHeap(), 0, wPath);
1234 TRACE("%s %p\n", debugstr_a(lpszPath), pidl);
1235 return pidl;
1236}
#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 1250 of file pidl.c.

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

◆ SHSimpleIDListFromPathW()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathW ( LPCWSTR  lpszPath)

Definition at line 1238 of file pidl.c.

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

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  )