ReactOS 0.4.16-dev-1165-g40721f4
pidl.h File Reference
#include "pshpack1.h"
#include "poppack.h"
Include dependency graph for pidl.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  tagPIDLCPanelStruct
 
struct  tagGUIDStruct
 
struct  tagDriveStruct
 
struct  tagFileStruct
 
struct  tagFileStructW
 
struct  tagValueW
 
struct  tagPIDLDATA
 

Macros

#define PT_CPLAPPLET   0x00
 
#define PT_GUID   0x1F
 
#define PT_DRIVE   0x23
 
#define PT_DRIVE2   0x25
 
#define PT_DRIVE3   0x29
 
#define PT_SHELLEXT   0x2E
 
#define PT_DRIVE1   0x2F
 
#define PT_FOLDER1   0x30
 
#define PT_FOLDER   0x31
 
#define PT_VALUE   0x32
 
#define PT_VALUEW   0x34
 
#define PT_FOLDERW   0x35
 
#define PT_WORKGRP   0x41
 
#define PT_COMP   0x42
 
#define PT_NETPROVIDER   0x46
 
#define PT_NETWORK   0x47
 
#define PT_IESPECIAL1   0x61
 
#define PT_YAGUID   0x70 /* yet another guid.. */
 
#define PT_IESPECIAL2   0xb1
 
#define PT_SHARE   0xc3
 

Typedefs

typedef BYTE PIDLTYPE
 
typedef struct tagPIDLCPanelStruct PIDLCPanelStruct
 
typedef struct tagGUIDStruct GUIDStruct
 
typedef struct tagDriveStruct DriveStruct
 
typedef struct tagFileStruct FileStruct
 
typedef struct tagFileStructW FileStructW
 
typedef struct tagValueW ValueWStruct
 
typedef struct tagPIDLDATA PIDLDATA
 
typedef struct tagPIDLDATALPPIDLDATA
 

Functions

static BYTE _ILGetType (LPCITEMIDLIST pidl)
 
static BYTE _ILGetFSType (LPCITEMIDLIST pidl)
 
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN
 
DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN
 
BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN
 
DWORD _ILGetFileAttributes (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN
 
BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft) DECLSPEC_HIDDEN
 
DWORD _ILGetDrive (LPCITEMIDLIST, LPWSTR, UINT) DECLSPEC_HIDDEN
 
BOOL _ILIsUnicode (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
BOOL _ILIsDesktop (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
BOOL _ILIsDrive (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
BOOL _ILIsFolder (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
BOOL _ILIsValue (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
BOOL _ILIsPidlSimple (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
BOOL _ILIsCPanelStruct (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
static BOOL _ILIsEmpty (LPCITEMIDLIST pidl)
 
UINT _ILGetDepth (LPCITEMIDLIST pidl)
 
LPITEMIDLIST _ILCreateGuid (PIDLTYPE type, REFIID guid, BYTE SortOrder)
 
LPITEMIDLIST _ILCreateGuidFromStrA (LPCSTR szGUID) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreateGuidFromStrW (LPCWSTR szGUID) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreateDesktop (void) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreateFromFindDataW (const WIN32_FIND_DATAW *stffile) DECLSPEC_HIDDEN
 
HRESULT _ILCreateFromPathW (LPCWSTR szPath, LPITEMIDLIST *ppidl) DECLSPEC_HIDDEN
 
LPITEMIDLIST SHELL32_CreateSimpleIDListFromPath (LPCWSTR pszPath, DWORD dwAttributes)
 
LPITEMIDLIST _ILCreateMyComputer (void) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreateMyDocuments (void) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreateIExplore (void) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreateControlPanel (void) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreatePrinters (void) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreateNetwork (void) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreateNetHood (void) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreateBitBucket (void) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreateDrive (LPCWSTR) DECLSPEC_HIDDEN
 
LPITEMIDLIST _ILCreateEntireNetwork (void) DECLSPEC_HIDDEN
 
LPPIDLDATA _ILGetDataPointer (LPCITEMIDLIST) DECLSPEC_HIDDEN
 
LPSTR _ILGetTextPointer (LPCITEMIDLIST) DECLSPEC_HIDDEN
 
IID_ILGetGUIDPointer (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
FileStructW_ILGetFileStructW (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
void pdump (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
BOOL pcheck (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
 
void _ILFreeaPidl (LPITEMIDLIST *apidl, UINT cidl) DECLSPEC_HIDDEN
 
PITEMID_CHILD_ILCopyaPidl (PCUITEMID_CHILD_ARRAY apidlsrc, UINT cidl) DECLSPEC_HIDDEN
 
LPITEMIDLIST_ILCopyCidaToaPidl (LPITEMIDLIST *pidl, const CIDA *cida) DECLSPEC_HIDDEN
 
BOOL ILGetDisplayNameExW (LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type) DECLSPEC_HIDDEN
 

Macro Definition Documentation

◆ PT_COMP

#define PT_COMP   0x42

Definition at line 99 of file pidl.h.

◆ PT_CPLAPPLET

#define PT_CPLAPPLET   0x00

Definition at line 86 of file pidl.h.

◆ PT_DRIVE

#define PT_DRIVE   0x23

Definition at line 88 of file pidl.h.

◆ PT_DRIVE1

#define PT_DRIVE1   0x2F

Definition at line 92 of file pidl.h.

◆ PT_DRIVE2

#define PT_DRIVE2   0x25

Definition at line 89 of file pidl.h.

◆ PT_DRIVE3

#define PT_DRIVE3   0x29

Definition at line 90 of file pidl.h.

◆ PT_FOLDER

#define PT_FOLDER   0x31

Definition at line 94 of file pidl.h.

◆ PT_FOLDER1

#define PT_FOLDER1   0x30

Definition at line 93 of file pidl.h.

◆ PT_FOLDERW

#define PT_FOLDERW   0x35

Definition at line 97 of file pidl.h.

◆ PT_GUID

#define PT_GUID   0x1F

Definition at line 87 of file pidl.h.

◆ PT_IESPECIAL1

#define PT_IESPECIAL1   0x61

Definition at line 102 of file pidl.h.

◆ PT_IESPECIAL2

#define PT_IESPECIAL2   0xb1

Definition at line 104 of file pidl.h.

◆ PT_NETPROVIDER

#define PT_NETPROVIDER   0x46

Definition at line 100 of file pidl.h.

◆ PT_NETWORK

#define PT_NETWORK   0x47

Definition at line 101 of file pidl.h.

◆ PT_SHARE

#define PT_SHARE   0xc3

Definition at line 105 of file pidl.h.

◆ PT_SHELLEXT

#define PT_SHELLEXT   0x2E

Definition at line 91 of file pidl.h.

◆ PT_VALUE

#define PT_VALUE   0x32

Definition at line 95 of file pidl.h.

◆ PT_VALUEW

#define PT_VALUEW   0x34

Definition at line 96 of file pidl.h.

◆ PT_WORKGRP

#define PT_WORKGRP   0x41

Definition at line 98 of file pidl.h.

◆ PT_YAGUID

#define PT_YAGUID   0x70 /* yet another guid.. */

Definition at line 103 of file pidl.h.

Typedef Documentation

◆ DriveStruct

◆ FileStruct

◆ FileStructW

◆ GUIDStruct

◆ LPPIDLDATA

◆ PIDLCPanelStruct

◆ PIDLDATA

◆ PIDLTYPE

typedef BYTE PIDLTYPE

Definition at line 156 of file pidl.h.

◆ ValueWStruct

Function Documentation

◆ _ILCopyaPidl()

PITEMID_CHILD * _ILCopyaPidl ( PCUITEMID_CHILD_ARRAY  apidlsrc,
UINT  cidl 
)

Definition at line 2624 of file pidl.c.

2625{
2626 UINT i;
2627 PITEMID_CHILD *apidldest;
2628
2629 if (!apidlsrc)
2630 return NULL;
2631
2632 apidldest = SHAlloc(cidl * sizeof(PITEMID_CHILD));
2633
2634 for (i = 0; i < cidl; i++)
2635 apidldest[i] = ILClone(apidlsrc[i]);
2636
2637 return apidldest;
2638}
#define NULL
Definition: types.h:112
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: ndis.h:50
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237

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

◆ _ILCopyCidaToaPidl()

LPITEMIDLIST * _ILCopyCidaToaPidl ( LPITEMIDLIST pidl,
const CIDA cida 
)

Definition at line 2645 of file pidl.c.

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

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

◆ _ILCreateBitBucket()

LPITEMIDLIST _ILCreateBitBucket ( void  )

Definition at line 1867 of file pidl.c.

1868{
1869 TRACE("()\n");
1870 return _ILCreateGuid(PT_DESKTOP_REGITEM, &CLSID_RecycleBin, REGITEMORDER_RECYCLEBIN);
1871}
#define PT_DESKTOP_REGITEM
Definition: lnktool.cpp:38
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid, BYTE SortOrder)
Definition: pidl.c:1879
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by SHGetFolderLocation().

◆ _ILCreateControlPanel()

LPITEMIDLIST _ILCreateControlPanel ( void  )

Definition at line 1816 of file pidl.c.

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

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

◆ _ILCreateDesktop()

LPITEMIDLIST _ILCreateDesktop ( void  )

Definition at line 1787 of file pidl.c.

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

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

◆ _ILCreateDrive()

LPITEMIDLIST _ILCreateDrive ( LPCWSTR  lpszNew)

Definition at line 2000 of file pidl.c.

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

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

◆ _ILCreateEntireNetwork()

LPITEMIDLIST _ILCreateEntireNetwork ( void  )

Definition at line 2020 of file pidl.c.

2021{
2022 LPITEMIDLIST pidlOut;
2023
2024 TRACE("\n");
2025
2026 pidlOut = _ILAlloc(PT_NETWORK, FIELD_OFFSET(PIDLDATA, u.network.szNames[sizeof("Entire Network")]));
2027 if (pidlOut)
2028 {
2030
2031 pData->u.network.dummy = 0;
2032 strcpy(pData->u.network.szNames, "Entire Network");
2033 }
2034 return pidlOut;
2035}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2271
#define PT_NETWORK
Definition: pidl.h:101
strcpy
Definition: string.h:131
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255

◆ _ILCreateFromFindDataW()

LPITEMIDLIST _ILCreateFromFindDataW ( const WIN32_FIND_DATAW stffile)

Definition at line 1933 of file pidl.c.

1934{
1935 char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
1936 DWORD len, len1, wlen, alen;
1937 LPITEMIDLIST pidl;
1938 PIDLTYPE type;
1939
1940 if (!wfd)
1941 return NULL;
1942
1943 TRACE("(%s, %s)\n",debugstr_w(wfd->cAlternateFileName), debugstr_w(wfd->cFileName));
1944
1945 /* prepare buffer with both names */
1946 len = WideCharToMultiByte(CP_ACP,0,wfd->cFileName,-1,buff,MAX_PATH,NULL,NULL);
1947 len1 = WideCharToMultiByte(CP_ACP,0,wfd->cAlternateFileName,-1, buff+len, sizeof(buff)-len, NULL, NULL);
1948 alen = len + len1;
1949
1950 type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
1951
1952 wlen = lstrlenW(wfd->cFileName) + 1;
1953 pidl = _ILAlloc(type, FIELD_OFFSET(FileStruct, szNames[alen + (alen & 1)]) +
1954 FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD));
1955 if (pidl)
1956 {
1958 FileStruct *fs = &pData->u.file;
1959 FileStructW *fsw;
1960 WORD *pOffsetW;
1961
1962 FileTimeToDosDateTime( &wfd->ftLastWriteTime, &fs->uFileDate, &fs->uFileTime);
1963 fs->dwFileSize = wfd->nFileSizeLow;
1964 fs->uFileAttribs = wfd->dwFileAttributes;
1965 memcpy(fs->szNames, buff, alen);
1966
1967 fsw = (FileStructW*)(pData->u.file.szNames + alen + (alen & 0x1));
1968 fsw->cbLen = FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD);
1969 FileTimeToDosDateTime( &wfd->ftCreationTime, &fsw->uCreationDate, &fsw->uCreationTime);
1970 FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime);
1971 memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR));
1972
1973 pOffsetW = (WORD*)((LPBYTE)pidl + pidl->mkid.cb - sizeof(WORD));
1974 *pOffsetW = (LPBYTE)fsw - (LPBYTE)pidl;
1975 TRACE("-- Set Value: %s\n",debugstr_w(fsw->wszName));
1976 }
1977 return pidl;
1978
1979}
#define CP_ACP
Definition: compat.h:109
#define MAX_PATH
Definition: compat.h:34
#define WideCharToMultiByte
Definition: compat.h:111
#define lstrlenW
Definition: compat.h:750
BOOL WINAPI FileTimeToDosDateTime(IN CONST FILETIME *lpFileTime, OUT LPWORD lpFatDate, OUT LPWORD lpFatTime)
Definition: time.c:37
static unsigned char buff[32768]
Definition: fatten.c:17
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLenum GLsizei len
Definition: glext.h:6722
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define PT_FOLDER
Definition: pidl.h:94
#define PT_VALUE
Definition: pidl.h:95
BYTE PIDLTYPE
Definition: pidl.h:156
WCHAR wszName[1]
Definition: shlfolder.c:1555
Definition: ffs.h:70
unsigned char * LPBYTE
Definition: typedefs.h:53
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CFileSysEnum::_AddFindResult(), CFSFolder::_CreateIDListFromName(), _ILCreateFromPathW(), and CFSFolder::_ParseSimple().

◆ _ILCreateFromPathW()

HRESULT _ILCreateFromPathW ( LPCWSTR  szPath,
LPITEMIDLIST ppidl 
)

Definition at line 1981 of file pidl.c.

1982{
1983 HANDLE hFile;
1984 WIN32_FIND_DATAW stffile;
1985
1986 if (!ppidl)
1987 return E_INVALIDARG;
1988
1989 hFile = FindFirstFileW(szPath, &stffile);
1992
1994
1995 *ppidl = _ILCreateFromFindDataW(&stffile);
1996
1997 return *ppidl ? S_OK : E_OUTOFMEMORY;
1998}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
#define S_OK
Definition: intsafe.h:52
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
LPCWSTR szPath
Definition: env.c:37
_In_ HANDLE hFile
Definition: mswsock.h:90
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *wfd)
Definition: pidl.c:1933
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92

◆ _ILCreateGuid()

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

Definition at line 1879 of file pidl.c.

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

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

◆ _ILCreateGuidFromStrA()

LPITEMIDLIST _ILCreateGuidFromStrA ( LPCSTR  szGUID)

Definition at line 1904 of file pidl.c.

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

◆ _ILCreateGuidFromStrW()

LPITEMIDLIST _ILCreateGuidFromStrW ( LPCWSTR  szGUID)

Definition at line 1916 of file pidl.c.

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

◆ _ILCreateIExplore()

LPITEMIDLIST _ILCreateIExplore ( void  )

Definition at line 1810 of file pidl.c.

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

Referenced by SHGetFolderLocation().

◆ _ILCreateMyComputer()

LPITEMIDLIST _ILCreateMyComputer ( void  )

Definition at line 1798 of file pidl.c.

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

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

◆ _ILCreateMyDocuments()

LPITEMIDLIST _ILCreateMyDocuments ( void  )

Definition at line 1804 of file pidl.c.

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

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

◆ _ILCreateNetHood()

LPITEMIDLIST _ILCreateNetHood ( void  )

◆ _ILCreateNetwork()

LPITEMIDLIST _ILCreateNetwork ( void  )

Definition at line 1861 of file pidl.c.

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

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

◆ _ILCreatePrinters()

LPITEMIDLIST _ILCreatePrinters ( void  )

Definition at line 1834 of file pidl.c.

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

Referenced by SHGetFolderLocation().

◆ _ILFreeaPidl()

void _ILFreeaPidl ( LPITEMIDLIST apidl,
UINT  cidl 
)

◆ _ILGetDataPointer()

◆ _ILGetDepth()

UINT _ILGetDepth ( LPCITEMIDLIST  pidl)

Referenced by BrFolder_ExpandToPidl(), and ILIsEqual().

◆ _ILGetDrive()

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

Definition at line 2045 of file pidl.c.

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

Referenced by _ILGetDriveType(), and DrivesContextMenuCallback().

◆ _ILGetExtension()

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

Definition at line 2531 of file pidl.c.

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

Referenced by SHELL32_GetFSItemAttributes(), and SHELL_IsShortcut().

◆ _ILGetFileAttributes()

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

Definition at line 2578 of file pidl.c.

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

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

◆ _ILGetFileDateTime()

BOOL _ILGetFileDateTime ( LPCITEMIDLIST  pidl,
FILETIME ft 
)

Definition at line 2485 of file pidl.c.

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

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

◆ _ILGetFileSize()

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

Definition at line 2512 of file pidl.c.

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

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

◆ _ILGetFileStructW()

FileStructW * _ILGetFileStructW ( LPCITEMIDLIST  pidl)

Definition at line 2443 of file pidl.c.

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

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

◆ _ILGetFSType()

static BYTE _ILGetFSType ( LPCITEMIDLIST  pidl)
inlinestatic

◆ _ILGetGUIDPointer()

IID * _ILGetGUIDPointer ( LPCITEMIDLIST  pidl)

Definition at line 2407 of file pidl.c.

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

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

◆ _ILGetTextPointer()

LPSTR _ILGetTextPointer ( LPCITEMIDLIST  pidl)

Definition at line 2335 of file pidl.c.

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

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

◆ _ILGetType()

static BYTE _ILGetType ( LPCITEMIDLIST  pidl)
inlinestatic

Definition at line 144 of file pidl.h.

145{
146 return pidl && pidl->mkid.cb >= 3 ? pidl->mkid.abID[0] : 0;
147}

Referenced by _ILGetFSType(), _ILIsDrive(), IsRegItem(), ItemIsFolder(), and ValidateItem().

◆ _ILIsCPanelStruct()

BOOL _ILIsCPanelStruct ( LPCITEMIDLIST  pidl)

Definition at line 2150 of file pidl.c.

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

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

◆ _ILIsDesktop()

◆ _ILIsDrive()

◆ _ILIsEmpty()

static BOOL _ILIsEmpty ( LPCITEMIDLIST  pidl)
inlinestatic

Definition at line 282 of file pidl.h.

282{ return _ILIsDesktop(pidl); }
BOOL _ILIsDesktop(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: CBandSite.h:24

Referenced by _ILGetDataPointer(), BrFolder_ExpandToPidl(), BrFolder_Treeview_Expand(), ILRemoveLastID(), and IsSelf().

◆ _ILIsFolder()

BOOL _ILIsFolder ( LPCITEMIDLIST  pidl)

Definition at line 2137 of file pidl.c.

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

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

◆ _ILIsMyComputer()

BOOL _ILIsMyComputer ( LPCITEMIDLIST  pidl)

Definition at line 2097 of file pidl.c.

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

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

◆ _ILIsPidlSimple()

BOOL _ILIsPidlSimple ( LPCITEMIDLIST  pidl)

Definition at line 933 of file shellbrowser.cpp.

934{
935 LPCITEMIDLIST pidlnext;
936 WORD length;
937 BOOL ret;
938
939 ret = TRUE;
940 if (! _ILIsDesktop(pidl))
941 {
942 length = pidl->mkid.cb;
943 pidlnext =
944 reinterpret_cast<LPCITEMIDLIST>(
945 reinterpret_cast<const BYTE *>(pidl) + length);
946 if (pidlnext->mkid.cb != 0)
947 ret = FALSE;
948 }
949 return ret;
950}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
unsigned int BOOL
Definition: ntddk_ex.h:94
GLuint GLsizei GLsizei * length
Definition: glext.h:6040

Referenced by CFSFolder::CompareIDs(), CreateItem(), CDesktopFolder::GetDisplayNameOf(), CDrivesFolder::GetDisplayNameOf(), CFSFolder::GetDisplayNameOf(), HCR_GetFolderAttributes(), SHBindToFolderIDListParent(), SHBindToParent(), and SHELL32_BindToSF().

◆ _ILIsSpecialFolder()

◆ _ILIsUnicode()

BOOL _ILIsUnicode ( LPCITEMIDLIST  pidl)

Definition at line 2072 of file pidl.c.

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

Referenced by pdump_impl().

◆ _ILIsValue()

BOOL _ILIsValue ( LPCITEMIDLIST  pidl)

Definition at line 2144 of file pidl.c.

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

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

◆ _ILSimpleGetTextW()

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

Definition at line 2191 of file pidl.c.

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

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

◆ ILGetDisplayNameExW()

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

Definition at line 100 of file pidl.c.

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

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

◆ pcheck()

BOOL pcheck ( LPCITEMIDLIST  pidl)

Definition at line 360 of file debughlp.cpp.

361{
362 DWORD type;
363 LPCITEMIDLIST pidltemp = pidl;
364
365 while( pidltemp && pidltemp->mkid.cb )
366 {
367 LPPIDLDATA pidlData = _dbg_ILGetDataPointer(pidltemp);
368
369 if (pidlData)
370 {
371 type = pidlData->type;
372 switch( type )
373 {
374 case PT_CPLAPPLET:
375 case PT_GUID:
376 case PT_SHELLEXT:
377 case PT_DRIVE:
378 case PT_DRIVE1:
379 case PT_DRIVE2:
380 case PT_DRIVE3:
381 case PT_FOLDER:
382 case PT_VALUE:
383 case PT_VALUEW:
384 case PT_FOLDER1:
385 case PT_WORKGRP:
386 case PT_COMP:
387 case PT_NETPROVIDER:
388 case PT_NETWORK:
389 case PT_IESPECIAL1:
390 case PT_YAGUID:
391 case PT_IESPECIAL2:
392 case PT_SHARE:
393 break;
394 default:
395 ERR("unknown IDLIST %p [%p] size=%u type=%x\n",
396 pidl, pidltemp, pidltemp->mkid.cb,type );
397 dump_pidl_hex( pidltemp );
398 return FALSE;
399 }
400 pidltemp = _dbg_ILGetNext(pidltemp);
401 }
402 else
403 {
404 return FALSE;
405 }
406 }
407 return TRUE;
408}
static LPPIDLDATA _dbg_ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:59
static LPITEMIDLIST _dbg_ILGetNext(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:37
static void dump_pidl_hex(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:336
#define PT_DRIVE1
Definition: pidl.h:92
#define PT_FOLDER1
Definition: pidl.h:93
#define PT_DRIVE3
Definition: pidl.h:90
#define PT_VALUEW
Definition: pidl.h:96
#define PT_DRIVE2
Definition: pidl.h:89
#define PT_CPLAPPLET
Definition: pidl.h:86

Referenced by _ILCreateCPanelApplet(), ILFindChild(), ILIsEqual(), ILLoadFromStream(), and pdump_impl().

◆ pdump()

◆ SHELL32_CreateSimpleIDListFromPath()

LPITEMIDLIST SHELL32_CreateSimpleIDListFromPath ( LPCWSTR  pszPath,
DWORD  dwAttributes 
)

Definition at line 1188 of file pidl.c.

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

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