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

Go to the source code of this file.

Macros

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

Functions

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

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 28 of file pidl.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 29 of file pidl.c.

◆ NONAMELESSSTRUCT

#define NONAMELESSSTRUCT

Definition at line 31 of file pidl.c.

◆ NONAMELESSUNION

#define NONAMELESSUNION

Definition at line 30 of file pidl.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 27 of file pidl.c.

Function Documentation

◆ _ILAlloc()

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

Definition at line 1576 of file pidl.c.

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

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

◆ _ILCopyaPidl()

PITEMID_CHILD* _ILCopyaPidl ( PCUITEMID_CHILD_ARRAY  apidlsrc,
UINT  cidl 
)

Definition at line 2663 of file pidl.c.

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

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

◆ _ILCopyCidaToaPidl()

LPITEMIDLIST* _ILCopyCidaToaPidl ( LPITEMIDLIST pidl,
const CIDA cida 
)

Definition at line 2684 of file pidl.c.

2685 {
2686  UINT i;
2687  LPITEMIDLIST *dst;
2688 
2689  dst = SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
2690  if (!dst)
2691  return NULL;
2692 
2693  if (pidl)
2694  *pidl = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[0]]));
2695 
2696  for (i = 0; i < cida->cidl; i++)
2697  dst[i] = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[i + 1]]));
2698 
2699  return dst;
2700 }
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
UINT cidl
Definition: shlobj.h:499
unsigned char BYTE
Definition: xxhash.c:193
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
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228
GLenum GLenum dst
Definition: glext.h:6340
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304

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

◆ _ILCreateAdminTools()

LPITEMIDLIST _ILCreateAdminTools ( void  )

Definition at line 1681 of file pidl.c.

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

◆ _ILCreateBitBucket()

LPITEMIDLIST _ILCreateBitBucket ( void  )

Definition at line 1675 of file pidl.c.

1676 {
1677  TRACE("()\n");
1678  return _ILCreateGuid(PT_GUID, &CLSID_RecycleBin);
1679 }
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
Definition: pidl.c:1687
#define TRACE(s)
Definition: solgame.cpp:4
#define PT_GUID

Referenced by SHGetFolderLocation().

◆ _ILCreateControlPanel()

LPITEMIDLIST _ILCreateControlPanel ( void  )

Definition at line 1631 of file pidl.c.

1632 {
1633  LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
1634 
1635  TRACE("()\n");
1636  if (parent)
1637  {
1638  LPITEMIDLIST cpl = _ILCreateGuid(PT_SHELLEXT, &CLSID_ControlPanel);
1639 
1640  if (cpl)
1641  {
1642  ret = ILCombine(parent, cpl);
1643  SHFree(cpl);
1644  }
1645  SHFree(parent);
1646  }
1647  return ret;
1648 }
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:699
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
Definition: pidl.c:1687
#define TRACE(s)
Definition: solgame.cpp:4
r parent
Definition: btrfs.c:3010
int ret
#define NULL
Definition: types.h:112
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
#define PT_GUID
#define PT_SHELLEXT

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

◆ _ILCreateDesktop()

LPITEMIDLIST _ILCreateDesktop ( void  )

Definition at line 1602 of file pidl.c.

1603 {
1604  LPITEMIDLIST ret;
1605 
1606  TRACE("()\n");
1607  ret = SHAlloc(2);
1608  if (ret)
1609  ret->mkid.cb = 0;
1610  return ret;
1611 }
#define TRACE(s)
Definition: solgame.cpp:4
int ret
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304

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

◆ _ILCreateDrive()

LPITEMIDLIST _ILCreateDrive ( LPCWSTR  lpszNew)

Definition at line 1808 of file pidl.c.

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

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

◆ _ILCreateEntireNetwork()

LPITEMIDLIST _ILCreateEntireNetwork ( void  )

Definition at line 1830 of file pidl.c.

1831 {
1832  LPITEMIDLIST pidlOut;
1833 
1834  TRACE("\n");
1835 
1836  pidlOut = _ILAlloc(PT_NETWORK, FIELD_OFFSET(PIDLDATA, u.network.szNames[sizeof("Entire Network")]));
1837  if (pidlOut)
1838  {
1839  LPPIDLDATA pData = _ILGetDataPointer(pidlOut);
1840 
1841  pData->u.network.dummy = 0;
1842  strcpy(pData->u.network.szNames, "Entire Network");
1843  }
1844  return pidlOut;
1845 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
static LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size)
Definition: pidl.c:1576
#define PT_NETWORK
Definition: pidl.h:101
#define TRACE(s)
Definition: solgame.cpp:4
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1827
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

◆ _ILCreateFromFindDataW()

LPITEMIDLIST _ILCreateFromFindDataW ( const WIN32_FIND_DATAW wfd)

Definition at line 1741 of file pidl.c.

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

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

◆ _ILCreateFromPathW()

HRESULT _ILCreateFromPathW ( LPCWSTR  szPath,
LPITEMIDLIST ppidl 
)

Definition at line 1789 of file pidl.c.

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

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

◆ _ILCreateGuid()

LPITEMIDLIST _ILCreateGuid ( PIDLTYPE  type,
REFIID  guid 
)

Definition at line 1687 of file pidl.c.

1688 {
1689  LPITEMIDLIST pidlOut;
1690 
1691  if (type == PT_SHELLEXT || type == PT_GUID || type == PT_YAGUID)
1692  {
1693  pidlOut = _ILAlloc(type, sizeof(GUIDStruct));
1694  if (pidlOut)
1695  {
1696  LPPIDLDATA pData = _ILGetDataPointer(pidlOut);
1697 
1698  pData->u.guid.guid = *guid;
1699  TRACE("-- create GUID-pidl %s\n",
1700  debugstr_guid(&(pData->u.guid.guid)));
1701  }
1702  }
1703  else
1704  {
1705  WARN("%d: invalid type for GUID\n", type);
1706  pidlOut = NULL;
1707  }
1708  return pidlOut;
1709 }
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
static LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size)
Definition: pidl.c:1576
#define WARN(fmt,...)
Definition: debug.h:112
const GUID * guid
#define debugstr_guid
Definition: kernel32.h:35
#define PT_YAGUID
#define TRACE(s)
Definition: solgame.cpp:4
#define NULL
Definition: types.h:112
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1827
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
#define PT_GUID
#define PT_SHELLEXT

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

◆ _ILCreateGuidFromStrA()

LPITEMIDLIST _ILCreateGuidFromStrA ( LPCSTR  szGUID)

Definition at line 1712 of file pidl.c.

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

◆ _ILCreateGuidFromStrW()

LPITEMIDLIST _ILCreateGuidFromStrW ( LPCWSTR  szGUID)

Definition at line 1725 of file pidl.c.

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

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

◆ _ILCreateIExplore()

LPITEMIDLIST _ILCreateIExplore ( void  )

Definition at line 1625 of file pidl.c.

1626 {
1627  TRACE("()\n");
1628  return _ILCreateGuid(PT_GUID, &CLSID_Internet);
1629 }
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
Definition: pidl.c:1687
#define TRACE(s)
Definition: solgame.cpp:4
#define PT_GUID

Referenced by SHGetFolderLocation().

◆ _ILCreateMyComputer()

LPITEMIDLIST _ILCreateMyComputer ( void  )

Definition at line 1613 of file pidl.c.

1614 {
1615  TRACE("()\n");
1616  return _ILCreateGuid(PT_GUID, &CLSID_MyComputer);
1617 }
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
Definition: pidl.c:1687
#define TRACE(s)
Definition: solgame.cpp:4
#define PT_GUID

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

◆ _ILCreateMyDocuments()

LPITEMIDLIST _ILCreateMyDocuments ( void  )

Definition at line 1619 of file pidl.c.

1620 {
1621  TRACE("()\n");
1622  return _ILCreateGuid(PT_GUID, &CLSID_MyDocuments);
1623 }
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
Definition: pidl.c:1687
#define TRACE(s)
Definition: solgame.cpp:4
#define PT_GUID

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

◆ _ILCreateNetwork()

LPITEMIDLIST _ILCreateNetwork ( void  )

Definition at line 1669 of file pidl.c.

1670 {
1671  TRACE("()\n");
1672  return _ILCreateGuid(PT_GUID, &CLSID_NetworkPlaces);
1673 }
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
Definition: pidl.c:1687
#define TRACE(s)
Definition: solgame.cpp:4
#define PT_GUID

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

◆ _ILCreatePrinters()

LPITEMIDLIST _ILCreatePrinters ( void  )

Definition at line 1650 of file pidl.c.

1651 {
1652  LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
1653 
1654  TRACE("()\n");
1655  if (parent)
1656  {
1657  LPITEMIDLIST printers = _ILCreateGuid(PT_YAGUID, &CLSID_Printers);
1658 
1659  if (printers)
1660  {
1661  ret = ILCombine(parent, printers);
1662  SHFree(printers);
1663  }
1664  SHFree(parent);
1665  }
1666  return ret;
1667 }
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:699
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
Definition: pidl.c:1687
#define PT_YAGUID
#define TRACE(s)
Definition: solgame.cpp:4
r parent
Definition: btrfs.c:3010
int ret
#define NULL
Definition: types.h:112
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
#define PT_GUID

Referenced by SHGetFolderLocation().

◆ _ILFreeaPidl()

void _ILFreeaPidl ( LPITEMIDLIST apidl,
UINT  cidl 
)

Definition at line 2646 of file pidl.c.

2647 {
2648  UINT i;
2649 
2650  if (apidl)
2651  {
2652  for (i = 0; i < cidl; i++)
2653  SHFree(apidl[i]);
2654  SHFree(apidl);
2655  }
2656 }
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
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326

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

◆ _ILGetDataPointer()

◆ _ILGetDrive()

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

Definition at line 1855 of file pidl.c.

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

Referenced by DrivesContextMenuCallback().

◆ _ILGetExtension()

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

Definition at line 2487 of file pidl.c.

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

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

◆ _ILGetFileAttributes()

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

Definition at line 2606 of file pidl.c.

2607 {
2609  WORD wAttrib = 0;
2610  int i;
2611 
2612  if (!pData)
2613  return 0;
2614 
2615  switch(pData->type)
2616  {
2617  case PT_FOLDER:
2618  case PT_VALUE:
2619  wAttrib = pData->u.file.uFileAttribs;
2620  break;
2621  }
2622 
2623  if(uOutSize >= 6)
2624  {
2625  i=0;
2626  if(wAttrib & FILE_ATTRIBUTE_READONLY)
2627  pOut[i++] = 'R';
2628  if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
2629  pOut[i++] = 'H';
2630  if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
2631  pOut[i++] = 'S';
2632  if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
2633  pOut[i++] = 'A';
2634  if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
2635  pOut[i++] = 'C';
2636  pOut[i] = 0x00;
2637  }
2638  return wAttrib;
2639 }
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned short WORD
Definition: ntddk_ex.h:93
#define FILE_ATTRIBUTE_COMPRESSED
Definition: nt_native.h:711
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
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
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define PT_VALUE
Definition: pidl.h:95
#define PT_FOLDER
Definition: pidl.h:94
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1827

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

◆ _ILGetFileDate()

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

Definition at line 2422 of file pidl.c.

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

Referenced by CFSFolder::GetDetailsOf().

◆ _ILGetFileDateTime()

BOOL _ILGetFileDateTime ( LPCITEMIDLIST  pidl,
FILETIME pFt 
)

Definition at line 2403 of file pidl.c.

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

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

◆ _ILGetFileSize()

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

Definition at line 2466 of file pidl.c.

2467 {
2469  DWORD dwSize;
2470 
2471  if (!pdata)
2472  return 0;
2473 
2474  switch (pdata->type)
2475  {
2476  case PT_VALUE:
2477  dwSize = pdata->u.file.dwFileSize;
2478  if (pOut)
2479  StrFormatKBSizeA(dwSize, pOut, uOutSize);
2480  return dwSize;
2481  }
2482  if (pOut)
2483  *pOut = 0x00;
2484  return 0;
2485 }
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
LPSTR WINAPI StrFormatKBSizeA(LONGLONG llBytes, LPSTR lpszDest, UINT cchMax)
Definition: string.c:1727
static PROTOCOLDATA * pdata
Definition: protocol.c:158
unsigned long DWORD
Definition: ntddk_ex.h:95
#define PT_VALUE
Definition: pidl.h:95
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56

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

◆ _ILGetFileStructW()

FileStructW* _ILGetFileStructW ( LPCITEMIDLIST  pidl)

Definition at line 2361 of file pidl.c.

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

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

◆ _ILGetFileType()

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

Definition at line 2533 of file pidl.c.

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

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

◆ _ILGetGUIDPointer()

IID* _ILGetGUIDPointer ( LPCITEMIDLIST  pidl)

Definition at line 2325 of file pidl.c.

2326 {
2328 
2329  TRACE("%p\n", pidl);
2330 
2331  if (!pdata)
2332  return NULL;
2333 
2334  TRACE("pdata->type 0x%04x\n", pdata->type);
2335  switch (pdata->type)
2336  {
2337  case PT_SHELLEXT:
2338  case PT_GUID:
2339  case PT_YAGUID:
2340  return &(pdata->u.guid.guid);
2341 
2342  default:
2343  TRACE("Unknown pidl type 0x%04x\n", pdata->type);
2344  break;
2345  }
2346  return NULL;
2347 }
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
static PROTOCOLDATA * pdata
Definition: protocol.c:158
#define PT_YAGUID
#define TRACE(s)
Definition: solgame.cpp:4
#define NULL
Definition: types.h:112
#define PT_GUID
#define PT_SHELLEXT

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

◆ _ILGetSTextPointer()

static LPSTR _ILGetSTextPointer ( LPCITEMIDLIST  pidl)
static

Definition at line 2297 of file pidl.c.

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

Referenced by SHGetDataFromIDListA(), and SHGetDataFromIDListW().

◆ _ILGetTextPointer()

LPSTR _ILGetTextPointer ( LPCITEMIDLIST  pidl)

Definition at line 2254 of file pidl.c.

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

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

◆ _ILGetTextPointerW()

static LPWSTR _ILGetTextPointerW ( LPCITEMIDLIST  pidl)
static

Definition at line 2198 of file pidl.c.

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

Referenced by _ILSimpleGetText(), and _ILSimpleGetTextW().

◆ _ILHACKCompareSimpleIds()

BOOL _ILHACKCompareSimpleIds ( LPCITEMIDLIST  pidltemp1,
LPCITEMIDLIST  pidltemp2 
)

Definition at line 479 of file pidl.c.

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

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

◆ _ILIsBitBucket()

BOOL _ILIsBitBucket ( LPCITEMIDLIST  pidl)

Definition at line 1942 of file pidl.c.

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

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

◆ _ILIsControlPanel()

BOOL _ILIsControlPanel ( LPCITEMIDLIST  pidl)

Definition at line 1920 of file pidl.c.

1921 {
1922  IID *iid = _ILGetGUIDPointer(pidl);
1923 
1924  TRACE("(%p)\n", pidl);
1925 
1926  if (iid)
1927  return IsEqualIID(iid, &CLSID_ControlPanel);
1928  return FALSE;
1929 }
#define FALSE
Definition: types.h:117
#define TRACE(s)
Definition: solgame.cpp:4
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2325
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

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

◆ _ILIsCPanelStruct()

BOOL _ILIsCPanelStruct ( LPCITEMIDLIST  pidl)

Definition at line 1994 of file pidl.c.

1995 {
1996  LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1997 
1998  TRACE("(%p)\n",pidl);
1999 
2000  return (pidl && lpPData && (lpPData->type == 0));
2001 }
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
#define TRACE(s)
Definition: solgame.cpp:4

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

◆ _ILIsDesktop()

BOOL _ILIsDesktop ( LPCITEMIDLIST  pidl)
inline

Definition at line 1891 of file pidl.c.

1892 {
1893  TRACE("(%p)\n",pidl);
1894 
1895  return !pidl || !pidl->mkid.cb;
1896 }
#define TRACE(s)
Definition: solgame.cpp:4

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

◆ _ILIsDrive()

BOOL _ILIsDrive ( LPCITEMIDLIST  pidl)

Definition at line 1964 of file pidl.c.

1965 {
1966  LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1967 
1968  TRACE("(%p)\n",pidl);
1969 
1970  return (pidl && lpPData && (PT_DRIVE == lpPData->type ||
1971  PT_DRIVE1 == lpPData->type ||
1972  PT_DRIVE2 == lpPData->type ||
1973  PT_DRIVE3 == lpPData->type));
1974 }
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
#define PT_DRIVE3
Definition: pidl.h:90
#define PT_DRIVE2
Definition: pidl.h:89
#define PT_DRIVE
Definition: pidl.h:88
#define TRACE(s)
Definition: solgame.cpp:4
#define PT_DRIVE1
Definition: pidl.h:92

Referenced by _ILGetDrive(), _ILHACKCompareSimpleIds(), CDrivesFolder::CompareIDs(), CFSFolder::GetAttributesOf(), CDrivesFolder::GetAttributesOf(), CDrivesFolder::GetDetailsOf(), CDrivesFolder::GetDisplayNameOf(), CDrivesFolder::GetUIObjectOf(), CDrivesFolder::ParseDisplayName(), CDrivesFolder::SetNameOf(), SH_ShowPropertiesDialog(), SHGetDataFromIDListA(), and SHGetDataFromIDListW().

◆ _ILIsFolder()

BOOL _ILIsFolder ( LPCITEMIDLIST  pidl)

Definition at line 1976 of file pidl.c.

1977 {
1978  LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1979 
1980  TRACE("(%p)\n",pidl);
1981 
1982  return (pidl && lpPData && (PT_FOLDER == lpPData->type || PT_FOLDER1 == lpPData->type));
1983 }
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
#define TRACE(s)
Definition: solgame.cpp:4
#define PT_FOLDER1
Definition: pidl.h:93
#define PT_FOLDER
Definition: pidl.h:94

Referenced by CFSFolder::_GetDropTarget(), _ILGetFileStructW(), _ILHACKCompareSimpleIds(), AddFSClassKeysToArray(), CFSFolder::BindToObject(), CFSExtractIcon_CreateInstance(), CFSFolder::CompareIDs(), CFSFolder::GetAttributesOf(), CDesktopFolder::GetAttributesOf(), CFSFolder::GetDisplayNameOf(), CFSFolder::SetNameOf(), SHELL32_GetFSItemAttributes(), and CDefView::UpdateStatusbar().

◆ _ILIsMyComputer()

BOOL _ILIsMyComputer ( LPCITEMIDLIST  pidl)

Definition at line 1931 of file pidl.c.

1932 {
1933  REFIID iid = _ILGetGUIDPointer(pidl);
1934 
1935  TRACE("(%p)\n",pidl);
1936 
1937  if (iid)
1938  return IsEqualIID(iid, &CLSID_MyComputer);
1939  return FALSE;
1940 }
#define REFIID
Definition: guiddef.h:118
#define FALSE
Definition: types.h:117
#define TRACE(s)
Definition: solgame.cpp:4
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2325
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

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

◆ _ILIsMyDocuments()

BOOL _ILIsMyDocuments ( LPCITEMIDLIST  pidl)

Definition at line 1898 of file pidl.c.

1899 {
1900  IID *iid = _ILGetGUIDPointer(pidl);
1901 
1902  TRACE("(%p)\n", pidl);
1903 
1904  if (iid)
1905  return IsEqualIID(iid, &CLSID_MyDocuments);
1906  return FALSE;
1907 }
#define FALSE
Definition: types.h:117
#define TRACE(s)
Definition: solgame.cpp:4
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2325
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ _ILIsNetHood()

BOOL _ILIsNetHood ( LPCITEMIDLIST  pidl)

Definition at line 1909 of file pidl.c.

1910 {
1911  IID *iid = _ILGetGUIDPointer(pidl);
1912 
1913  TRACE("(%p)\n", pidl);
1914 
1915  if (iid)
1916  return IsEqualIID(iid, &CLSID_NetworkPlaces);
1917  return FALSE;
1918 }
#define FALSE
Definition: types.h:117
#define TRACE(s)
Definition: solgame.cpp:4
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2325
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

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

◆ _ILIsPidlSimple()

BOOL _ILIsPidlSimple ( LPCITEMIDLIST  pidl)

Definition at line 2006 of file pidl.c.

2007 {
2008  BOOL ret = TRUE;
2009 
2010  if(! _ILIsDesktop(pidl)) /* pidl=NULL or mkid.cb=0 */
2011  {
2012  WORD len = pidl->mkid.cb;
2013  LPCITEMIDLIST pidlnext = (LPCITEMIDLIST) (((const BYTE*)pidl) + len );
2014 
2015  if (pidlnext->mkid.cb)
2016  ret = FALSE;
2017  }
2018 
2019  TRACE("%s\n", ret ? "Yes" : "No");
2020  return ret;
2021 }
#define TRUE
Definition: types.h:120
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TRACE(s)
Definition: solgame.cpp:4
unsigned short WORD
Definition: ntddk_ex.h:93
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: pidl.c:1891
int ret
GLenum GLsizei len
Definition: glext.h:6722
unsigned char BYTE
Definition: xxhash.c:193

Referenced by SHBindToParent().

◆ _ILIsSpecialFolder()

BOOL _ILIsSpecialFolder ( LPCITEMIDLIST  pidl)

Definition at line 1953 of file pidl.c.

1954 {
1955  LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1956 
1957  TRACE("(%p)\n",pidl);
1958 
1959  return (pidl && ( (lpPData && (PT_GUID== lpPData->type || PT_SHELLEXT== lpPData->type || PT_YAGUID == lpPData->type)) ||
1960  (pidl && pidl->mkid.cb == 0x00)
1961  ));
1962 }
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
#define PT_YAGUID
#define TRACE(s)
Definition: solgame.cpp:4
#define PT_GUID
#define PT_SHELLEXT

Referenced by SHGetDataFromIDListA().

◆ _ILIsUnicode()

BOOL _ILIsUnicode ( LPCITEMIDLIST  pidl)

Definition at line 1882 of file pidl.c.

1883 {
1884  LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1885 
1886  TRACE("(%p)\n",pidl);
1887 
1888  return (pidl && lpPData && PT_VALUEW == lpPData->type);
1889 }
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
#define TRACE(s)
Definition: solgame.cpp:4
#define PT_VALUEW
Definition: pidl.h:96

Referenced by pdump_impl().

◆ _ILIsValue()

BOOL _ILIsValue ( LPCITEMIDLIST  pidl)

Definition at line 1985 of file pidl.c.

1986 {
1987  LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
1988 
1989  TRACE("(%p)\n",pidl);
1990 
1991  return (pidl && lpPData && PT_VALUE == lpPData->type);
1992 }
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
#define TRACE(s)
Definition: solgame.cpp:4
#define PT_VALUE
Definition: pidl.h:95

Referenced by _ILGetExtension(), _ILGetFileStructW(), _ILGetFileType(), _ILHACKCompareSimpleIds(), AddFSClassKeysToArray(), ExtensionFromPidl(), CFSFolder::GetAttributesOf(), CDesktopFolder::GetAttributesOf(), CFSFolder::GetUIObjectOf(), COpenWithMenu::Initialize(), and SHELL32_GetFSItemAttributes().

◆ _ILParsePathW()

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

Definition at line 1030 of file pidl.c.

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

Referenced by SHSimpleIDListFromPathA(), and SHSimpleIDListFromPathW().

◆ _ILSimpleGetText()

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

Definition at line 2035 of file pidl.c.

2036 {
2037  DWORD dwReturn=0;
2038  LPSTR szSrc;
2039  LPWSTR szSrcW;
2040  GUID const * riid;
2041  char szTemp[MAX_PATH];
2042 
2043  TRACE("(%p %p %x)\n",pidl,szOut,uOutSize);
2044 
2045  if (!pidl)
2046  return 0;
2047 
2048  if (szOut)
2049  *szOut = 0;
2050 
2051  if (_ILIsDesktop(pidl))
2052  {
2053  /* desktop */
2054  if (HCR_GetClassNameA(&CLSID_ShellDesktop, szTemp, MAX_PATH))
2055  {
2056  if (szOut)
2057  lstrcpynA(szOut, szTemp, uOutSize);
2058 
2059  dwReturn = strlen (szTemp);
2060  }
2061  }
2062  else if (( szSrc = _ILGetTextPointer(pidl) ))
2063  {
2064  /* filesystem */
2065  if (szOut)
2066  lstrcpynA(szOut, szSrc, uOutSize);
2067 
2068  dwReturn = strlen(szSrc);
2069  }
2070  else if (( szSrcW = _ILGetTextPointerW(pidl) ))
2071  {
2072  /* unicode filesystem */
2073  WideCharToMultiByte(CP_ACP,0,szSrcW, -1, szTemp, MAX_PATH, NULL, NULL);
2074 
2075  if (szOut)
2076  lstrcpynA(szOut, szTemp, uOutSize);
2077 
2078  dwReturn = strlen (szTemp);
2079  }
2080  else if (( riid = _ILGetGUIDPointer(pidl) ))
2081  {
2082  /* special folder */
2083  if ( HCR_GetClassNameA(riid, szTemp, MAX_PATH) )
2084  {
2085  if (szOut)
2086  lstrcpynA(szOut, szTemp, uOutSize);
2087 
2088  dwReturn = strlen (szTemp);
2089  }
2090  }
2091  else
2092  {
2093  ERR("-- no text\n");
2094  }
2095 
2096  TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_a(szOut),dwReturn);
2097  return dwReturn;
2098 }
#define WideCharToMultiByte
Definition: compat.h:111
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
REFIID riid
Definition: precomp.h:44
#define CP_ACP
Definition: compat.h:109
static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl)
Definition: pidl.c:2198
char * LPSTR
Definition: xmlstorage.h:182
LPSTR _ILGetTextPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2254
#define TRACE(s)
Definition: solgame.cpp:4
#define debugstr_a
Definition: kernel32.h:31
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2325
#define MAX_PATH
Definition: compat.h:34
BOOL HCR_GetClassNameA(REFIID riid, LPSTR szDest, DWORD len)
Definition: classes.c:417
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: pidl.c:1891
#define ERR(fmt,...)
Definition: debug.h:110
#define NULL
Definition: types.h:112
#define lstrcpynA
Definition: compat.h:751
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by _ILGetDrive(), and _ILGetExtension().

◆ _ILSimpleGetTextW()

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

Definition at line 2107 of file pidl.c.

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

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

◆ Alloc()

LPVOID WINAPI Alloc ( INT  )

Referenced by ILGlobalClone().

◆ Free()

BOOL WINAPI Free ( LPVOID  )

Definition at line 116 of file comctl32undoc.c.

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

Referenced by AddMRUData(), AddMRUStringA(), FindMRUData(), FindMRUStringA(), FreeMRUList(), ILGlobalFree(), Str_SetPtrAtoW(), and Str_SetPtrWtoA().

◆ ILAppendID()

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

Definition at line 885 of file pidl.c.

886 {
887  LPITEMIDLIST idlRet;
888  LPCITEMIDLIST itemid = (LPCITEMIDLIST)item;
889 
890  WARN("(pidl=%p,pidl=%p,%08u)semi-stub\n",pidl,item,bEnd);
891 
892  pdump (pidl);
893  pdump (itemid);
894 
895  if (_ILIsDesktop(pidl))
896  {
897  idlRet = ILClone(itemid);
898  SHFree (pidl);
899  return idlRet;
900  }
901 
902  if (bEnd)
903  idlRet = ILCombine(pidl, itemid);
904  else
905  idlRet = ILCombine(itemid, pidl);
906 
907  SHFree(pidl);
908  return idlRet;
909 }
#define WARN(fmt,...)
Definition: debug.h:112
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:699
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: pidl.c:1891
static ATOM item
Definition: dde.c:856
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

Referenced by init_function_pointers().

◆ ILClone()

LPITEMIDLIST WINAPI ILClone ( LPCITEMIDLIST  pidl)

Definition at line 228 of file pidl.c.

229 {
230  DWORD len;
231  LPITEMIDLIST newpidl;
232 
233  if (!pidl)
234  return NULL;
235 
236  len = ILGetSize(pidl);
237  newpidl = SHAlloc(len);
238  if (newpidl)
239  memcpy(newpidl,pidl,len);
240 
241  TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
242  pdump(pidl);
243 
244  return newpidl;
245 }
#define TRACE(s)
Definition: solgame.cpp:4
unsigned long DWORD
Definition: ntddk_ex.h:95
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
UINT WINAPI ILGetSize(LPCITEMIDLIST pidl)
Definition: pidl.c:815
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
#define NULL
Definition: types.h:112
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304

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

◆ ILCloneFirst()

LPITEMIDLIST WINAPI ILCloneFirst ( LPCITEMIDLIST  pidl)

Definition at line 253 of file pidl.c.

254 {
255  DWORD len;
256  LPITEMIDLIST pidlNew = NULL;
257 
258  TRACE("pidl=%p\n", pidl);
259  pdump(pidl);
260 
261  if (pidl)
262  {
263  len = pidl->mkid.cb;
264  pidlNew = SHAlloc(len+2);
265  if (pidlNew)
266  {
267  memcpy(pidlNew,pidl,len+2); /* 2 -> mind a desktop pidl */
268 
269  if (len)
270  ILGetNext(pidlNew)->mkid.cb = 0x00;
271  }
272  }
273  TRACE("-- newpidl=%p\n",pidlNew);
274 
275  return pidlNew;
276 }
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:851
#define TRACE(s)
Definition: solgame.cpp:4
unsigned long DWORD
Definition: ntddk_ex.h:95
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
#define NULL
Definition: types.h:112
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304

Referenced by CCommonFolder< CRegistryFolder, RegPidlEntry, CRegistryFolderExtractIcon >::BindToObject(), CCommonFolder< CRegistryFolder, RegPidlEntry, CRegistryFolderExtractIcon >::CompareIDs(), CCommonFolder< CRegistryFolder, RegPidlEntry, CRegistryFolderExtractIcon >::GetDisplayNameOf(), init_function_pointers(), SHELL32_BindToSF(), SHELL32_CompareChildren(), and SHELL32_GetDisplayNameOfChild().

◆ ILCombine()

LPITEMIDLIST WINAPI ILCombine ( LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)

Definition at line 699 of file pidl.c.

700 {
701  DWORD len1,len2;
702  LPITEMIDLIST pidlNew;
703 
704  TRACE("pidl=%p pidl=%p\n",pidl1,pidl2);
705 
706  if (!pidl1 && !pidl2) return NULL;
707 
708  pdump (pidl1);
709  pdump (pidl2);
710 
711  if (!pidl1)
712  {
713  pidlNew = ILClone(pidl2);
714  return pidlNew;
715  }
716 
717  if (!pidl2)
718  {
719  pidlNew = ILClone(pidl1);
720  return pidlNew;
721  }
722 
723  len1 = ILGetSize(pidl1)-2;
724  len2 = ILGetSize(pidl2);
725  pidlNew = SHAlloc(len1+len2);
726 
727  if (pidlNew)
728  {
729  memcpy(pidlNew,pidl1,len1);
730  memcpy(((BYTE *)pidlNew)+len1,pidl2,len2);
731  }
732 
733  /* TRACE(pidl,"--new pidl=%p\n",pidlNew);*/
734  return pidlNew;
735 }
#define TRACE(s)
Definition: solgame.cpp:4
unsigned long DWORD
Definition: ntddk_ex.h:95
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
unsigned char BYTE
Definition: xxhash.c:193
UINT WINAPI ILGetSize(LPCITEMIDLIST pidl)
Definition: pidl.c:815
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
#define NULL
Definition: types.h:112
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304

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

◆ ILCreateFromPathA()

LPITEMIDLIST WINAPI ILCreateFromPathA ( LPCSTR  path)

Definition at line 966 of file pidl.c.

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

Referenced by ILCreateFromPathAW(), and init_function_pointers().

◆ ILCreateFromPathAW()

LPITEMIDLIST WINAPI ILCreateFromPathAW ( LPCVOID  path)

Definition at line 996 of file pidl.c.

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

◆ ILCreateFromPathW()

LPITEMIDLIST WINAPI ILCreateFromPathW ( LPCWSTR  path)

Definition at line 982 of file pidl.c.

983 {
984  LPITEMIDLIST pidlnew = NULL;
985 
986  TRACE_(shell)("%s\n", debugstr_w(path));
987 
988  if (SUCCEEDED(SHILCreateFromPathW(path, &pidlnew, NULL)))
989  return pidlnew;
990  return NULL;
991 }
if SUCCEEDED(hr)
#define debugstr_w
Definition: kernel32.h:32
#define TRACE_(x)
Definition: compat.h:76
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define NULL
Definition: types.h:112
HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
Definition: pidl.c:392
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

Referenced by CFSDropTarget::_DoDrop(), CBandSiteMenu::_GetQLaunchPidl(), _ILCreate(), BrsFolder_OnCommand(), DDE_OnViewFolder(), DDW_OnExploreFolder(), DoGetAliasPIDLs(), CFindFolder::GetUIObjectOf(), GetUIObjectOfPath(), ILCreateFromPathAW(), init_function_pointers(), CFindFolderContextMenu::InvokeCommand(), CACListISF::SetDirectory(), SHCreateFromDesktop(), shellex_get_dataobj(), SHExplorerParseCmdLine(), SHGetFolderLocation(), SHSimpleIDListFromPathA(), SHSimpleIDListFromPathW(), and test_AttributesRegistration().

◆ ILFindChild()

PUIDLIST_RELATIVE WINAPI ILFindChild ( PIDLIST_ABSOLUTE  pidl1,
PCIDLIST_ABSOLUTE  pidl2 
)

Definition at line 641 of file pidl.c.

642 {
643  LPCITEMIDLIST pidltemp1 = pidl1;
644  LPCITEMIDLIST pidltemp2 = pidl2;
646 
647  TRACE("pidl1=%p pidl2=%p\n",pidl1, pidl2);
648 
649  /* explorer reads from registry directly (StreamMRU),
650  so we can only check here */
651  if ((!pcheck (pidl1)) || (!pcheck (pidl2)))
652  return FALSE;
653 
654  pdump (pidl1);
655  pdump (pidl2);
656 
657  if (_ILIsDesktop(pidl1))
658  {
659  ret = pidl2;
660  }
661  else
662  {
663  while (pidltemp1->mkid.cb && pidltemp2->mkid.cb)
664  {
665  if (!_ILHACKCompareSimpleIds(pidltemp1, pidltemp2))
666  return FALSE;
667 
668  pidltemp1 = ILGetNext(pidltemp1);
669  pidltemp2 = ILGetNext(pidltemp2);
670  ret = pidltemp2;
671  }
672 
673  if (pidltemp1->mkid.cb)
674  ret = NULL; /* elements of pidl1 left*/
675  }
676  TRACE_(shell)("--- %p\n", ret);
677  return (PUIDLIST_RELATIVE)ret; /* pidl 1 is shorter */
678 }
BOOL _ILHACKCompareSimpleIds(LPCITEMIDLIST pidltemp1, LPCITEMIDLIST pidltemp2)
Definition: pidl.c:479
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:851
ITEMIDLIST_RELATIVE UNALIGNED * PUIDLIST_RELATIVE
Definition: shtypes.idl:55
#define FALSE
Definition: types.h:117
#define TRACE_(x)
Definition: compat.h:76
#define TRACE(s)
Definition: solgame.cpp:4
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: pidl.c:1891
int ret
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
#define NULL
Definition: types.h:112
BOOL pcheck(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:349

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

◆ ILFindLastID()

LPITEMIDLIST WINAPI ILFindLastID ( LPCITEMIDLIST  pidl)

◆ ILFree()

void WINAPI ILFree ( LPITEMIDLIST  pidl)

Definition at line 925 of file pidl.c.

926 {
927  TRACE("(pidl=%p)\n",pidl);
928  SHFree(pidl);
929 }
#define TRACE(s)
Definition: solgame.cpp:4
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326

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

◆ ILGetDisplayName()

BOOL WINAPI ILGetDisplayName ( LPCITEMIDLIST  pidl,
LPVOID  path 
)

Definition at line 174 of file pidl.c.

175 {
176  TRACE_(shell)("%p %p\n", pidl, path);
177 
178  if (SHELL_OsIsUnicode())
181 }
GLsizei const GLchar ** path
Definition: glext.h:7234
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
#define ILGDN_FORPARSING
Definition: undocshell.h:68
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
Definition: pidl.c:91
#define TRACE_(x)
Definition: compat.h:76
static BOOL ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
Definition: pidl.c:74
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define NULL
Definition: types.h:112

Referenced by SHOpenFolderWindow().

◆ ILGetDisplayNameEx()

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

Definition at line 162 of file pidl.c.

163 {
164  TRACE_(shell)("%p %p %p %d\n", psf, pidl, path, type);
165 
166  if (SHELL_OsIsUnicode())
167  return ILGetDisplayNameExW(psf, pidl, path, type);
168  return ILGetDisplayNameExA(psf, pidl, path, type);
169 }
GLsizei const GLchar ** path
Definition: glext.h:7234
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
Definition: pidl.c:91
#define TRACE_(x)
Definition: compat.h:76
static BOOL ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
Definition: pidl.c:74
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545

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

◆ ILGetDisplayNameExA()

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

Definition at line 74 of file pidl.c.

75 {
76  BOOL ret = FALSE;
77  WCHAR wPath[MAX_PATH];
78 
79  TRACE("%p %p %p %d\n", psf, pidl, path, type);
80 
81  if (!pidl || !path)
82  return FALSE;
83 
84  ret = ILGetDisplayNameExW(psf, pidl, wPath, type);
85  WideCharToMultiByte(CP_ACP, 0, wPath, -1, path, MAX_PATH, NULL, NULL);
86  TRACE("%p %p %s\n", psf, pidl, debugstr_a(path));
87 
88  return ret;
89 }
#define WideCharToMultiByte
Definition: compat.h:111
#define CP_ACP
Definition: compat.h:109
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
Definition: pidl.c:91
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
#define MAX_PATH
Definition: compat.h:34
int ret
#define NULL
Definition: types.h:112
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545

Referenced by ILGetDisplayName(), and ILGetDisplayNameEx().

◆ ILGetDisplayNameExW()

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

Definition at line 91 of file pidl.c.

92 {
93  LPSHELLFOLDER psfParent, lsf = psf;
95  LPCITEMIDLIST pidllast;
96  STRRET strret;
97  DWORD flag;
98 
99  TRACE("%p %p %p %x\n", psf, pidl, path, type);
100 
101  if (!pidl || !path)
102  return FALSE;
103 
104  if (!lsf)
105  {
106  ret = SHGetDesktopFolder(&lsf);
107  if (FAILED(ret))
108  return FALSE;
109  }
110 
111  switch (type)
112  {
113  case ILGDN_FORPARSING:
114  flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
115  break;
116  case ILGDN_NORMAL:
117  flag = SHGDN_NORMAL;
118  break;
119  case ILGDN_INFOLDER:
120  flag = SHGDN_INFOLDER;
121  break;
122  default:
123  FIXME("Unknown type parameter = %x\n", type);
124  flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
125  break;
126  }
127 
128  if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
129  {
130  ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag, &strret);
131  if (SUCCEEDED(ret))
132  {
133  if(!StrRetToStrNW(path, MAX_PATH, &strret, pidl))
134  ret = E_FAIL;
135  }
136  }
137  else
138  {
139  ret = SHBindToParent(pidl, &IID_IShellFolder, (LPVOID*)&psfParent, &pidllast);
140  if (SUCCEEDED(ret))
141  {
142  ret = IShellFolder_GetDisplayNameOf(psfParent, pidllast, flag, &strret);
143  if (SUCCEEDED(ret))
144  {
145  if(!StrRetToStrNW(path, MAX_PATH, &strret, pidllast))
146  ret = E_FAIL;
147  }
148  IShellFolder_Release(psfParent);
149  }
150  }
151 
152  TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
153 
154  if (!psf)
155  IShellFolder_Release(lsf);
156  return SUCCEEDED(ret);
157 }
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define NO_ERROR
Definition: dderror.h:5
#define E_FAIL
Definition: ddrawi.h:102
#define ILGDN_FORPARSING
Definition: undocshell.h:68
#define FALSE
Definition: types.h:117
if SUCCEEDED(hr)
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
#define ILGDN_NORMAL
Definition: undocshell.h:69
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
LONG HRESULT
Definition: typedefs.h:79
#define MAX_PATH
Definition: compat.h:34
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
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
#define ILGDN_INFOLDER
Definition: undocshell.h:70
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1337
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
Definition: shellstring.c:85

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

◆ ILGetNext()

LPITEMIDLIST WINAPI ILGetNext ( LPCITEMIDLIST  pidl)

Definition at line 851 of file pidl.c.

852 {
853  WORD len;
854 
855  TRACE("%p\n", pidl);
856 
857  if (pidl)
858  {
859  len = pidl->mkid.cb;
860  if (len)
861  {
862  pidl = (LPCITEMIDLIST) (((const BYTE*)pidl)+len);
863  TRACE("-- %p\n", pidl);
864  return (LPITEMIDLIST)pidl;
865  }
866  }
867  return NULL;
868 }
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define TRACE(s)
Definition: solgame.cpp:4
unsigned short WORD
Definition: ntddk_ex.h:93
GLenum GLsizei len
Definition: glext.h:6722
unsigned char BYTE
Definition: xxhash.c:193
#define NULL
Definition: types.h:112
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

Referenced by _ILAlloc(), _ILGetDrive(), CCommonFolder< CRegistryFolder, RegPidlEntry, CRegistryFolderExtractIcon >::BindToObject(), CZipFolder::BindToObject(), BrsFolder_OnSetExpanded(), CCommonFolder< CRegistryFolder, RegPidlEntry, CRegistryFolderExtractIcon >::CompareIDs(), CZipFolder::CompareIDs(), ExplorerMessageLoop(), FILEDLG95_LOOKIN_AddItem(), CFontExt::GetDetailsOf(), CZipFolder::GetDetailsOf(), CFontExt::GetDisplayNameOf(), CAdminToolsFolder::GetDisplayNameOf(), CFontsFolder::GetDisplayNameOf(), CMyDocsFolder::GetDisplayNameOf(), CZipFolder::GetDisplayNameOf(), CCommonFolder< CRegistryFolder, RegPidlEntry, CRegistryFolderExtractIcon >::GetDisplayNameOf(), ILCloneFirst(), ILFindChild(), ILFindLastID(), ILIsEqual(), ILIsParent(), init_function_pointers(), CAddressEditBox::PopulateComboBox(), SHELL32_BindToSF(), SHELL32_CompareChildren(), SHELL32_GetDisplayNameOfChild(), and SHOpenFolderAndSelectItems().

◆ ILGetSize()

UINT WINAPI ILGetSize ( LPCITEMIDLIST  pidl)

Definition at line 815 of file pidl.c.

816 {
817  LPCSHITEMID si;
818  UINT len=0;
819 
820  if (pidl)
821  {
822  si = &(pidl->mkid);
823 
824  while (si->cb)
825  {
826  len += si->cb;
827  si = (LPCSHITEMID)(((const BYTE*)si)+si->cb);
828  }
829  len += 2;
830  }
831  TRACE("pidl=%p size=%u\n",pidl, len);
832  return len;
833 }
const SHITEMID * LPCSHITEMID
Definition: shtypes.idl:30
WORD cb
Definition: shtypes.idl:27
#define TRACE(s)
Definition: solgame.cpp:4
GLenum GLsizei len
Definition: glext.h:6722
unsigned char BYTE
Definition: xxhash.c:193
unsigned int UINT
Definition: ndis.h:50

Referenced by ILClone(), ILCombine(), ILGlobalClone(), and ILSaveToStream().

◆ ILGlobalClone()

LPITEMIDLIST WINAPI ILGlobalClone ( LPCITEMIDLIST  pidl)

Definition at line 460 of file pidl.c.

461 {
462  DWORD len;
463  LPITEMIDLIST newpidl;
464 
465  if (!pidl)
466  return NULL;
467 
468  len = ILGetSize(pidl);
469  newpidl = Alloc(len);
470  if (newpidl)
471  memcpy(newpidl,pidl,len);
472 
473  TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
474  pdump(pidl);
475 
476  return newpidl;
477 }
LPVOID WINAPI Alloc(INT)
#define TRACE(s)
Definition: solgame.cpp:4
unsigned long DWORD
Definition: ntddk_ex.h:95
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
UINT WINAPI ILGetSize(LPCITEMIDLIST pidl)
Definition: pidl.c:815
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
#define NULL
Definition: types.h:112
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

◆ ILGlobalFree()

void WINAPI ILGlobalFree ( LPITEMIDLIST  pidl)

Definition at line 945 of file pidl.c.

946 {
947  TRACE("%p\n", pidl);
948 
949  Free(pidl);
950 }
BOOL WINAPI Free(LPVOID)
#define TRACE(s)
Definition: solgame.cpp:4

◆ ILIsEqual()

BOOL WINAPI ILIsEqual ( LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)

Definition at line 535 of file pidl.c.

536 {
537  LPCITEMIDLIST pidltemp1 = pidl1;
538  LPCITEMIDLIST pidltemp2 = pidl2;
539 
540  TRACE("pidl1=%p pidl2=%p\n",pidl1, pidl2);
541 
542  /*
543  * Explorer reads from registry directly (StreamMRU),
544  * so we can only check here
545  */
546  if (!pcheck(pidl1) || !pcheck (pidl2))
547  return FALSE;
548 
549  pdump (pidl1);
550  pdump (pidl2);
551 
552  if (!pidl1 || !pidl2)
553  return FALSE;
554 
555  while (pidltemp1->mkid.cb && pidltemp2->mkid.cb)
556  {
557  if (!_ILHACKCompareSimpleIds(pidltemp1, pidltemp2))
558  return FALSE;
559 
560  pidltemp1 = ILGetNext(pidltemp1);
561  pidltemp2 = ILGetNext(pidltemp2);
562  }
563 
564  if (!pidltemp1->mkid.cb && !pidltemp2->mkid.cb)
565  return TRUE;
566 
567  return FALSE;
568 }
BOOL _ILHACKCompareSimpleIds(LPCITEMIDLIST pidltemp1, LPCITEMIDLIST pidltemp2)
Definition: pidl.c:479
#define TRUE
Definition: types.h:120
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:851
#define FALSE
Definition: types.h:117
#define TRACE(s)
Definition: solgame.cpp:4
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
BOOL pcheck(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:349

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

◆ ILIsParent()

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

Definition at line 592 of file pidl.c.

593 {
594  LPCITEMIDLIST pParent = pidlParent;
595  LPCITEMIDLIST pChild = pidlChild;
596 
597  TRACE("%p %p %x\n", pidlParent, pidlChild, bImmediate);
598 
599  if (!pParent || !pChild)
600  return FALSE;
601 
602  while (pParent->mkid.cb && pChild->mkid.cb)
603  {
604  if (!_ILHACKCompareSimpleIds(pParent, pChild))
605  return FALSE;
606 
608  pChild = ILGetNext(pChild);
609  }
610 
611  /* child has shorter name than parent */
612  if (pParent->mkid.cb)
613  return FALSE;
614 
615  /* not immediate descent */
616  if ((!pChild->mkid.cb || ILGetNext(pChild)->mkid.cb) && bImmediate)
617  return FALSE;
618 
619  return TRUE;
620 }
BOOL _ILHACKCompareSimpleIds(LPCITEMIDLIST pidltemp1, LPCITEMIDLIST pidltemp2)
Definition: pidl.c:479
#define TRUE
Definition: types.h:120
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:851
#define FALSE
Definition: types.h:117
#define TRACE(s)
Definition: solgame.cpp:4
FxObject * pParent
Definition: fxdpcapi.cpp:86

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

◆ ILLoadFromStream()

HRESULT WINAPI ILLoadFromStream ( IStream pStream,
LPITEMIDLIST ppPidl 
)

Definition at line 284 of file pidl.c.

285 {
286  WORD wLen = 0;
287  DWORD dwBytesRead;
288  HRESULT ret = E_FAIL;
289 
290 
291  TRACE_(shell)("%p %p\n", pStream , ppPidl);
292 
293  SHFree(*ppPidl);
294  *ppPidl = NULL;
295 
296  IStream_AddRef (pStream);
297 
298  if (SUCCEEDED(IStream_Read(pStream, &wLen, 2, &dwBytesRead)))
299  {
300  TRACE("PIDL length is %d\n", wLen);
301  if (wLen != 0)
302  {
303  *ppPidl = SHAlloc (wLen);
304  if (SUCCEEDED(IStream_Read(pStream, *ppPidl , wLen, &dwBytesRead)))
305  {
306  TRACE("Stream read OK\n");
307  ret = S_OK;
308  }
309  else
310  {
311  WARN("reading pidl failed\n");
312  SHFree(*ppPidl);
313  *ppPidl = NULL;
314  }
315  }
316  else
317  {
318  *ppPidl = NULL;
319  ret = S_OK;
320  }
321  }
322 
323  /* we are not yet fully compatible */
324  if (*ppPidl && !pcheck(*ppPidl))
325  {
326  WARN("Check failed\n");
327  SHFree(*ppPidl);
328  *ppPidl = NULL;
329  }
330 
331  IStream_Release (pStream);
332  TRACE("done\n");
333  return ret;
334 }
#define WARN(fmt,...)
Definition: debug.h:112
#define E_FAIL
Definition: ddrawi.h:102
if SUCCEEDED(hr)
#define TRACE_(x)
Definition: compat.h:76
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
#define S_OK
Definition: intsafe.h:52
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define NULL
Definition: types.h:112
BOOL pcheck(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:349
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304

Referenced by CShellLink::Load().

◆ ILRemoveLastID()

BOOL WINAPI ILRemoveLastID ( LPITEMIDLIST  pidl)

Definition at line 212 of file pidl.c.

213 {
214  TRACE_(shell)("pidl=%p\n",pidl);
215 
216  if (_ILIsEmpty(pidl))
217  return FALSE;
218  ILFindLastID(pidl)->mkid.cb = 0;
219  return TRUE;
220 }
static BOOL _ILIsEmpty(LPCITEMIDLIST pidl)
Definition: pidl.h:257
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:189
#define TRACE_(x)
Definition: compat.h:76
void shell(int argc, const char *argv[])
Definition: cmds.c:1231

Referenced by CFSFolder::CallBack(), ExplorerMessageLoop(), CShellItem::get_parent_pidl(), GetParentPidl(), CCommonFolder< CRegistryFolder, RegPidlEntry, CRegistryFolderExtractIcon >::GetUIObjectOf(), ILIsParentOrSpecialParent(), init_function_pointers(), InitializeTreeView(), CShellBrowser::NavigateToParent(), CAddressEditBox::PopulateComboBox(), CStartMenuBtnCtxMenu::QueryContextMenu(), SHBindToFolderIDListParent(), SHBindToParent(), and test_AttributesRegistration().

◆ ILSaveToStream()

HRESULT WINAPI ILSaveToStream ( IStream pStream,
LPCITEMIDLIST  pPidl 
)

Definition at line 342 of file pidl.c.

343 {
344  WORD wLen = 0;
345  HRESULT ret = E_FAIL;
346 
347  TRACE_(shell)("%p %p\n", pStream, pPidl);
348 
349  IStream_AddRef (pStream);
350 
351  wLen = ILGetSize(pPidl);
352 
353  if (SUCCEEDED(IStream_Write(pStream, &wLen, 2, NULL)))
354  {
355  if (SUCCEEDED(IStream_Write(pStream, pPidl, wLen, NULL)))
356  ret = S_OK;
357  }
358  IStream_Release (pStream);
359 
360  return ret;
361 }
#define E_FAIL
Definition: ddrawi.h:102
if SUCCEEDED(hr)
#define TRACE_(x)
Definition: compat.h:76
LONG HRESULT
Definition: typedefs.h:79
unsigned short WORD
Definition: ntddk_ex.h:93
int ret
#define S_OK
Definition: intsafe.h:52
UINT WINAPI ILGetSize(LPCITEMIDLIST pidl)
Definition: pidl.c:815
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define NULL
Definition: types.h:112

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

◆ SHBindToParent()

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

Definition at line 1337 of file pidl.c.

1338 {
1339  IShellFolder * psfDesktop;
1340  HRESULT hr=E_FAIL;
1341 
1342  TRACE_(shell)("pidl=%p\n", pidl);
1343  pdump(pidl);
1344 
1345  if (!pidl || !ppv)
1346  return E_INVALIDARG;
1347 
1348  *ppv = NULL;
1349  if (ppidlLast)
1350  *ppidlLast = NULL;
1351 
1352  hr = SHGetDesktopFolder(&psfDesktop);
1353  if (FAILED(hr))
1354  return hr;
1355 
1356  if (_ILIsPidlSimple(pidl))
1357  {
1358  /* we are on desktop level */
1359  hr = IShellFolder_QueryInterface(psfDesktop, riid, ppv);
1360  }
1361  else
1362  {
1363  LPITEMIDLIST pidlParent = ILClone(pidl);
1364  ILRemoveLastID(pidlParent);
1365  hr = IShellFolder_BindToObject(psfDesktop, pidlParent, NULL, riid, ppv);
1366  SHFree (pidlParent);
1367  }
1368 
1369  IShellFolder_Release(psfDesktop);
1370 
1371  if (SUCCEEDED(hr) && ppidlLast)
1372  *ppidlLast = ILFindLastID(pidl);
1373 
1374  TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08x\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
1375  return hr;
1376 }
HRESULT hr
Definition: shlfolder.c:183
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:212
#define E_FAIL
Definition: ddrawi.h:102
BOOL _ILIsPidlSimple(LPCITEMIDLIST pidl)
Definition: pidl.c:2006
if SUCCEEDED(hr)
#define E_INVALIDARG
Definition: ddrawi.h:101
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:189
#define TRACE_(x)
Definition: compat.h:76
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
LONG HRESULT
Definition: typedefs.h:79
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
#define NULL
Definition: types.h:112
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

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

◆ SHCloneSpecialIDList()

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

Definition at line 434 of file pidl.c.

435 {
436  LPITEMIDLIST ppidl;
437  TRACE_(shell)("(hwnd=%p,csidl=0x%x,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
438 
439  if (fCreate)
441 
442  SHGetSpecialFolderLocation(hwndOwner, nFolder, &ppidl);
443  return ppidl;
444 }
_In_ int nFolder
Definition: shlobj.h:1444
#define TRACE_(x)
Definition: compat.h:76
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3194
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define CSIDL_FLAG_CREATE
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

Referenced by CStartMenuBtnCtxMenu::QueryContextMenu().

◆ SHGetDataFromIDListA()

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

Definition at line 1150 of file pidl.c.

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

◆ SHGetDataFromIDListW()

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

Definition at line 1208 of file pidl.c.

1210 {
1211  LPSTR filename, shortname;
1213 
1214  TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
1215 
1216  pdump(pidl);
1217 
1218  if (!psf || !dest)
1219  return E_INVALIDARG;
1220 
1221  switch (nFormat)
1222  {
1223  case SHGDFIL_FINDDATA:
1224  pfd = dest;
1225 
1226  if (_ILIsDrive(pidl))
1227  return E_INVALIDARG;
1228 
1229  if (len < sizeof(WIN32_FIND_DATAW))
1230  return E_INVALIDARG;
1231 
1232  ZeroMemory(pfd, sizeof (WIN32_FIND_DATAW));
1233  _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
1234  pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
1235  pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
1236 
1237  filename = _ILGetTextPointer(pidl);
1238  shortname = _ILGetSTextPointer(pidl);
1239 
1240  if (!filename)
1241  pfd->cFileName[0] = '\0';
1242  else if (!MultiByteToWideChar(CP_ACP, 0, filename, -1, pfd->cFileName, MAX_PATH))
1243  pfd->cFileName[MAX_PATH-1] = 0;
1244 
1245  if (!shortname)
1246  pfd->cAlternateFileName[0] = '\0';
1247  else if (!MultiByteToWideChar(CP_ACP, 0, shortname, -1, pfd->cAlternateFileName, 14))
1248  pfd->cAlternateFileName[13] = 0;
1249  return S_OK;
1250 
1251  case SHGDFIL_NETRESOURCE:
1252  case SHGDFIL_DESCRIPTIONID:
1253  FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
1254  break;
1255 
1256  default:
1257  ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
1258  }
1259 
1260  return E_INVALIDARG;
1261 }
#define SHGDFIL_NETRESOURCE
Definition: shlobj.h:1378
#define SHGDFIL_DESCRIPTIONID
Definition: shlobj.h:1379
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2606
#define CP_ACP
Definition: compat.h:109
#define ERR_(ch,...)
Definition: debug.h:156
#define ZeroMemory
Definition: winbase.h:1670
char * LPSTR
Definition: xmlstorage.h:182
const char * filename
Definition: ioapi.h:137
#define FIXME_(x)
Definition: compat.h:77
#define E_INVALIDARG
Definition: ddrawi.h:101
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
Definition: pidl.c:2466
BOOL _ILGetFileDateTime(LPCITEMIDLIST pidl, FILETIME *pFt)
Definition: pidl.c:2403
LPSTR _ILGetTextPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2254
#define TRACE_(x)
Definition: compat.h:76
#define MAX_PATH
Definition: compat.h:34
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
Definition: pidl.c:1964
#define SHGDFIL_FINDDATA
Definition: shlobj.h:1377
static PIXELFORMATDESCRIPTOR pfd
Definition: ssstars.c:67
GLenum GLsizei len
Definition: glext.h:6722
static LPSTR _ILGetSTextPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2297
#define S_OK
Definition: intsafe.h:52
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
#define NULL
Definition: types.h:112
#define MultiByteToWideChar
Definition: compat.h:110
static char * dest
Definition: rtl.c:135

Referenced by fill_w32fdata_shell().

◆ SHGetIDListFromObject()

HRESULT WINAPI SHGetIDListFromObject ( IUnknown punk,
PIDLIST_ABSOLUTE ppidl 
)

Definition at line 1486 of file pidl.c.

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

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

◆ SHGetNameFromIDList()

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

Definition at line 1423 of file pidl.c.

1424 {
1425  IShellFolder *psfparent;
1426  LPCITEMIDLIST child_pidl;
1427  STRRET disp_name;
1428  HRESULT ret;
1429 
1430  TRACE("%p 0x%08x %p\n", pidl, sigdnName, ppszName);
1431 
1432  *ppszName = NULL;
1433  ret = SHBindToParent(pidl, &IID_IShellFolder, (void**)&psfparent, &child_pidl);
1434  if(SUCCEEDED(ret))
1435  {
1436  switch(sigdnName)
1437  {
1438  /* sigdnName & 0xffff */
1439  case SIGDN_NORMALDISPLAY: /* SHGDN_NORMAL */
1440  case SIGDN_PARENTRELATIVEPARSING: /* SHGDN_INFOLDER | SHGDN_FORPARSING */
1441  case SIGDN_PARENTRELATIVEEDITING: /* SHGDN_INFOLDER | SHGDN_FOREDITING */
1442  case SIGDN_DESKTOPABSOLUTEPARSING: /* SHGDN_FORPARSING */
1443  case SIGDN_DESKTOPABSOLUTEEDITING: /* SHGDN_FOREDITING | SHGDN_FORADDRESSBAR*/
1444  case SIGDN_PARENTRELATIVEFORADDRESSBAR: /* SIGDN_INFOLDER | SHGDN_FORADDRESSBAR */
1445  case SIGDN_PARENTRELATIVE: /* SIGDN_INFOLDER */
1446 
1447  disp_name.uType = STRRET_WSTR;
1448  ret = IShellFolder_GetDisplayNameOf(psfparent, child_pidl,
1449  sigdnName & 0xffff,
1450  &disp_name);
1451  if(SUCCEEDED(ret))
1452  ret = StrRetToStrW(&disp_name, pidl, ppszName);
1453 
1454  break;
1455 
1456  case SIGDN_FILESYSPATH:
1457  *ppszName = CoTaskMemAlloc(sizeof(WCHAR)*MAX_PATH);
1458  if(SHGetPathFromIDListW(pidl, *ppszName))
1459  {
1460  TRACE("Got string %s\n", debugstr_w(*ppszName));
1461  ret = S_OK;
1462  }
1463  else
1464  {
1466  ret = E_INVALIDARG;
1467  }
1468  break;
1469 
1470  case SIGDN_URL:
1471  default:
1472  FIXME("Unsupported SIGDN %x\n", sigdnName);
1473  ret = E_FAIL;
1474  }
1475 
1476  IShellFolder_Release(psfparent);
1477  }
1478  return ret;
1479 }
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1294
#define E_FAIL
Definition: ddrawi.h:102
if SUCCEEDED(hr)
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_INVALIDARG
Definition: ddrawi.h:101
SIGDN sigdnName
Definition: shobjidl.idl:595
SIGDN PWSTR * ppszName
Definition: shobjidl.idl:595
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
#define MAX_PATH
Definition: compat.h:34
int ret
#define S_OK
Definition: intsafe.h:52
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1337
#define NULL
Definition: types.h:112
UINT uType
Definition: shtypes.idl:93
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
HRESULT WINAPI StrRetToStrW(LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *ppszName)
Definition: string.c:1623

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

◆ SHGetPathFromIDListA()

BOOL WINAPI SHGetPathFromIDListA ( LPCITEMIDLIST  pidl,
LPSTR  pszPath 
)

Definition at line 1278 of file pidl.c.

1279 {
1280  WCHAR wszPath[MAX_PATH];
1281  BOOL bSuccess;
1282 
1283  bSuccess = SHGetPathFromIDListW(pidl, wszPath);
1284  WideCharToMultiByte(CP_ACP, 0, wszPath, -1, pszPath, MAX_PATH, NULL, NULL);
1285 
1286  return bSuccess;
1287 }
#define WideCharToMultiByte
Definition: compat.h:111
#define CP_ACP
Definition: compat.h:109
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1294
static BOOLEAN bSuccess
Definition: drive.cpp:433
unsigned int BOOL
Definition: ntddk_ex.h:94
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
#define NULL
Definition: types.h:112

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

◆ SHGetPathFromIDListW()

BOOL WINAPI SHGetPathFromIDListW ( LPCITEMIDLIST  pidl,
LPWSTR  pszPath 
)

Definition at line 1294 of file pidl.c.

1295 {
1296  HRESULT hr;
1297  LPCITEMIDLIST pidlLast;
1298  LPSHELLFOLDER psfFolder;
1300  STRRET strret;
1301 
1302  TRACE_(shell)("(pidl=%p,%p)\n", pidl, pszPath);
1303  pdump(pidl);
1304 
1305  *pszPath = '\0';
1306  if (!pidl)
1307  return FALSE;
1308 
1309  hr = SHBindToParent(pidl, &IID_IShellFolder, (VOID**)&psfFolder, &pidlLast);
1310  if (FAILED(hr))
1311  {
1312  ERR("SHBindToParent failed: %x\n", hr);
1313  return FALSE;
1314  }
1315 
1316  dwAttributes = SFGAO_FILESYSTEM;
1317  hr = IShellFolder_GetAttributesOf(psfFolder, 1, &pidlLast, &dwAttributes);
1318  if (FAILED(hr) || !(dwAttributes & SFGAO_FILESYSTEM)) {
1319  WARN("Wrong dwAttributes or GetAttributesOf failed: %x\n", hr);
1320  IShellFolder_Release(psfFolder);
1321  return FALSE;
1322  }
1323 
1324  hr = IShellFolder_GetDisplayNameOf(psfFolder, pidlLast, SHGDN_FORPARSING, &strret);
1325  IShellFolder_Release(psfFolder);
1326  if (FAILED(hr)) return FALSE;
1327 
1328  hr = StrRetToBufW(&strret, pidlLast, pszPath, MAX_PATH);
1329 
1330  TRACE_(shell)("-- %s, 0x%08x\n",debugstr_w(pszPath), hr);
1331  return SUCCEEDED(hr);
1332 }
HRESULT hr
Definition: shlfolder.c:183
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1522
#define WARN(fmt,...)
Definition: debug.h:112
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
DWORD dwAttributes
Definition: vdmdbg.h:34
#define FALSE
Definition: types.h:117
if SUCCEEDED(hr)
#define debugstr_w
Definition: kernel32.h:32
#define TRACE_(x)
Definition: compat.h:76
LONG HRESULT
Definition: typedefs.h:79
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
#define ERR(fmt,...)
Definition: debug.h:110
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1337
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311

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

◆ SHGetRealIDL()

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

Definition at line 742 of file pidl.c.

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

◆ SHILCreateFromPathA()

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

Definition at line 380 of file pidl.c.

381 {
382  WCHAR lpszDisplayName[MAX_PATH];
383 
384  TRACE_(shell)("%s %p 0x%08x\n", path, ppidl, attributes ? *attributes : 0);
385 
386  if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName, MAX_PATH))
387  lpszDisplayName[MAX_PATH-1] = 0;
388 
389  return SHILCreateFromPathW(lpszDisplayName, ppidl, attributes);
390 }
GLsizei const GLchar ** path
Definition: glext.h:7234
#define CP_ACP
Definition: compat.h:109
#define TRACE_(x)
Definition: compat.h:76
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define MultiByteToWideChar
Definition: compat.h:110
HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
Definition: pidl.c:392

Referenced by ILCreateFromPathA(), and SHILCreateFromPathAW().

◆ SHILCreateFromPathAW()

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

Definition at line 408 of file pidl.c.

409 {
410  if ( SHELL_OsIsUnicode())
411  return SHILCreateFromPathW (path, ppidl, attributes);
412  return SHILCreateFromPathA (path, ppidl, attributes);
413 }
HRESULT WINAPI SHILCreateFromPathA(LPCSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
Definition: pidl.c:380
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
Definition: pidl.c:392

◆ SHILCreateFromPathW()

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

Definition at line 392 of file pidl.c.

393 {
394  LPSHELLFOLDER sf;
395  DWORD pchEaten;
396  HRESULT ret = E_FAIL;
397 
398  TRACE_(shell)("%s %p 0x%08x\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
399 
400  if (SUCCEEDED (SHGetDesktopFolder(&sf)))
401  {
402  ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path, &pchEaten, ppidl, attributes);
403  IShellFolder_Release(sf);
404  }
405  return ret;
406 }
#define E_FAIL
Definition: ddrawi.h:102
if SUCCEEDED(hr)
#define debugstr_w
Definition: kernel32.h:32
#define TRACE_(x)
Definition: compat.h:76
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define NULL
Definition: types.h:112
WCHAR * LPWSTR
Definition: xmlstorage.h:184

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

◆ SHLogILFromFSIL()

LPITEMIDLIST WINAPI SHLogILFromFSIL ( LPITEMIDLIST  pidl)

Definition at line 792 of file pidl.c.

793 {
794  FIXME("(pidl=%p)\n",pidl);
795 
796  pdump(pidl);
797 
798  return 0;
799 }
#define FIXME(fmt,...)
Definition: debug.h:111
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311

◆ SHParseDisplayName()

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

Definition at line 1381 of file pidl.c.

1383 {
1384  IShellFolder *psfDesktop;
1385  HRESULT hr=E_FAIL;
1386  ULONG dwAttr=sfgaoIn;
1387 
1388  if(!ppidl)
1389  return E_INVALIDARG;
1390 
1391  if (!pszName)
1392  {
1393  *ppidl = NULL;
1394  return E_INVALIDARG;
1395  }
1396 
1397  hr = SHGetDesktopFolder(&psfDesktop);
1398  if (FAILED(hr))
1399  {
1400  *ppidl = NULL;
1401  return hr;
1402  }
1403 
1404  hr = IShellFolder_ParseDisplayName(psfDesktop, (HWND)NULL, pbc, (LPOLESTR)pszName, (ULONG *)NULL, ppidl, &dwAttr);
1405 
1406  IShellFolder_Release(psfDesktop);
1407 
1408  if (SUCCEEDED(hr))
1409  {
1410  if (psfgaoOut) *psfgaoOut = dwAttr;
1411  }
1412  else
1413  {
1414  *ppidl = NULL;
1415  }
1416 
1417  return hr;
1418 }
HRESULT hr
Definition: shlfolder.c:183
static LPOLESTR
Definition: stg_prop.c:27
#define E_FAIL
Definition: ddrawi.h:102
if SUCCEEDED(hr)
#define E_INVALIDARG
Definition: ddrawi.h:101
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
LONG HRESULT
Definition: typedefs.h:79
#define NULL
Definition: types.h:112
unsigned int ULONG
Definition: retypes.h:1

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

◆ SHSimpleIDListFromPathA()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathA ( LPCSTR  lpszPath)

Definition at line 1089 of file pidl.c.

1090 {
1091  LPITEMIDLIST pidl = NULL;
1092  LPWSTR wPath = NULL;
1093  int len;
1094 
1095  TRACE("%s\n", debugstr_a(lpszPath));
1096 
1097  if (lpszPath)
1098  {
1099  len = MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, NULL, 0);
1100  wPath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1101  MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, wPath, len);
1102  }
1103 #ifdef __REACTOS__
1104  // FIXME: Needs folder attribute
1105  if (PathFileExistsW(wPath))
1106  {
1107  pidl = ILCreateFromPathW(wPath);
1108  HeapFree(GetProcessHeap(), 0, wPath);
1109  return pidl;
1110  }
1111 #endif
1112 
1113  _ILParsePathW(wPath, NULL, TRUE, &pidl, NULL);
1114 
1115  HeapFree(GetProcessHeap(), 0, wPath);
1116  TRACE("%s %p\n", debugstr_a(lpszPath), pidl);
1117  return pidl;
1118 }
#define TRUE
Definition: types.h:120
#define CP_ACP
Definition: compat.h:109
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1776
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:736
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
static HRESULT _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile, BOOL bBindCtx, LPITEMIDLIST *ppidl, LPDWORD prgfInOut)
Definition: pidl.c:1030
GLenum GLsizei len
Definition: glext.h:6722
#define NULL
Definition: types.h:112
#define MultiByteToWideChar
Definition: compat.h:110
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
Definition: pidl.c:982
WCHAR * LPWSTR
Definition: xmlstorage.h:184
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
#define HeapFree(x, y, z)
Definition: compat.h:735

Referenced by SHSimpleIDListFromPathAW().

◆ SHSimpleIDListFromPathAW()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW ( LPCVOID  lpszPath)

Definition at line 1136 of file pidl.c.

1137 {
1138  if ( SHELL_OsIsUnicode())
1139  return SHSimpleIDListFromPathW (lpszPath);
1140  return SHSimpleIDListFromPathA (lpszPath);
1141 }
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
LPITEMIDLIST WINAPI SHSimpleIDListFromPathW(LPCWSTR lpszPath)
Definition: pidl.c:1120
LPITEMIDLIST WINAPI SHSimpleIDListFromPathA(LPCSTR lpszPath)
Definition: pidl.c:1089

◆ SHSimpleIDListFromPathW()

LPITEMIDLIST WINAPI SHSimpleIDListFromPathW ( LPCWSTR  lpszPath)

Definition at line 1120 of file pidl.c.

1121 {
1122  LPITEMIDLIST pidl = NULL;
1123 
1124  TRACE("%s\n", debugstr_w(lpszPath));
1125 #ifdef __REACTOS__
1126  // FIXME: Needs folder attribute
1127  if (PathFileExistsW(lpszPath))
1128  return ILCreateFromPathW(lpszPath);
1129 #endif
1130 
1131  _ILParsePathW(lpszPath, NULL, TRUE, &pidl, NULL);
1132  TRACE("%s %p\n", debugstr_w(lpszPath), pidl);
1133  return pidl;
1134 }
#define TRUE
Definition: types.h:120
#define debugstr_w
Definition: kernel32.h:32
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1776
#define TRACE(s)
Definition: solgame.cpp:4
static HRESULT _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile, BOOL bBindCtx, LPITEMIDLIST *ppidl, LPDWORD prgfInOut)
Definition: pidl.c:1030
#define NULL
Definition: types.h:112
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
Definition: pidl.c:982
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

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

◆ WINE_DECLARE_DEBUG_CHANNEL()

WINE_DECLARE_DEBUG_CHANNEL ( shell  )

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( pidl  )