ReactOS 0.4.16-dev-533-gc7d1aa3
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) DECLSPEC_HIDDEN
 
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 132 of file pidl.h.

◆ ValueWStruct

Function Documentation

◆ _ILCopyaPidl()

PITEMID_CHILD * _ILCopyaPidl ( PCUITEMID_CHILD_ARRAY  apidlsrc,
UINT  cidl 
)

Definition at line 2620 of file pidl.c.

2621{
2622 UINT i;
2623 PITEMID_CHILD *apidldest;
2624
2625 if (!apidlsrc)
2626 return NULL;
2627
2628 apidldest = SHAlloc(cidl * sizeof(PITEMID_CHILD));
2629
2630 for (i = 0; i < cidl; i++)
2631 apidldest[i] = ILClone(apidlsrc[i]);
2632
2633 return apidldest;
2634}
#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(), and CCPLItemMenu::Initialize().

◆ _ILCopyCidaToaPidl()

LPITEMIDLIST * _ILCopyCidaToaPidl ( LPITEMIDLIST pidl,
const CIDA cida 
)

Definition at line 2641 of file pidl.c.

2642{
2643 UINT i;
2645
2646 dst = SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
2647 if (!dst)
2648 return NULL;
2649
2650 if (pidl)
2651 *pidl = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[0]]));
2652
2653 for (i = 0; i < cida->cidl; i++)
2654 dst[i] = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[i + 1]]));
2655
2656 return dst;
2657}
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:572
unsigned char BYTE
Definition: xxhash.c:193

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

◆ _ILCreateBitBucket()

LPITEMIDLIST _ILCreateBitBucket ( void  )

Definition at line 1828 of file pidl.c.

1829{
1830 TRACE("()\n");
1831 return _ILCreateGuid(PT_GUID, &CLSID_RecycleBin);
1832}
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
Definition: pidl.c:1840
#define PT_GUID
Definition: pidl.h:87
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by SHGetFolderLocation().

◆ _ILCreateControlPanel()

LPITEMIDLIST _ILCreateControlPanel ( void  )

Definition at line 1776 of file pidl.c.

1777{
1778 LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
1779
1780 TRACE("()\n");
1781 if (parent)
1782 {
1783 LPITEMIDLIST cpl = _ILCreateGuid(PT_SHELLEXT, &CLSID_ControlPanel);
1784
1785 if (cpl)
1786 {
1787 ret = ILCombine(parent, cpl);
1788 SHFree(cpl);
1789 }
1790 SHFree(parent);
1791 }
1792 return ret;
1793}
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
r parent
Definition: btrfs.c:3010
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:816
#define PT_SHELLEXT
Definition: pidl.h:91
int ret

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

◆ _ILCreateDesktop()

LPITEMIDLIST _ILCreateDesktop ( void  )

Definition at line 1747 of file pidl.c.

1748{
1750
1751 TRACE("()\n");
1752 ret = SHAlloc(2);
1753 if (ret)
1754 ret->mkid.cb = 0;
1755 return ret;
1756}

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

◆ _ILCreateDrive()

LPITEMIDLIST _ILCreateDrive ( LPCWSTR  lpszNew)

Definition at line 1961 of file pidl.c.

1962{
1963 LPITEMIDLIST pidlOut;
1964
1965 TRACE("(%s)\n",debugstr_w(lpszNew));
1966
1967 pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct));
1968 if (pidlOut)
1969 {
1970 LPSTR pszDest = _ILGetTextPointer(pidlOut);
1971 if (pszDest)
1972 {
1973 lstrcpyA(pszDest, "x:\\");
1974 pszDest[0] = toupper(lpszNew[0]);
1975 TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
1976 }
1977 }
1978 return pidlOut;
1979}
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:2321
static LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size)
Definition: pidl.c:1721
#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 1981 of file pidl.c.

1982{
1983 LPITEMIDLIST pidlOut;
1984
1985 TRACE("\n");
1986
1987 pidlOut = _ILAlloc(PT_NETWORK, FIELD_OFFSET(PIDLDATA, u.network.szNames[sizeof("Entire Network")]));
1988 if (pidlOut)
1989 {
1991
1992 pData->u.network.dummy = 0;
1993 strcpy(pData->u.network.szNames, "Entire Network");
1994 }
1995 return pidlOut;
1996}
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:2254
#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 1894 of file pidl.c.

1895{
1896 char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
1897 DWORD len, len1, wlen, alen;
1898 LPITEMIDLIST pidl;
1899 PIDLTYPE type;
1900
1901 if (!wfd)
1902 return NULL;
1903
1904 TRACE("(%s, %s)\n",debugstr_w(wfd->cAlternateFileName), debugstr_w(wfd->cFileName));
1905
1906 /* prepare buffer with both names */
1907 len = WideCharToMultiByte(CP_ACP,0,wfd->cFileName,-1,buff,MAX_PATH,NULL,NULL);
1908 len1 = WideCharToMultiByte(CP_ACP,0,wfd->cAlternateFileName,-1, buff+len, sizeof(buff)-len, NULL, NULL);
1909 alen = len + len1;
1910
1911 type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
1912
1913 wlen = lstrlenW(wfd->cFileName) + 1;
1914 pidl = _ILAlloc(type, FIELD_OFFSET(FileStruct, szNames[alen + (alen & 1)]) +
1915 FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD));
1916 if (pidl)
1917 {
1919 FileStruct *fs = &pData->u.file;
1920 FileStructW *fsw;
1921 WORD *pOffsetW;
1922
1923 FileTimeToDosDateTime( &wfd->ftLastWriteTime, &fs->uFileDate, &fs->uFileTime);
1924 fs->dwFileSize = wfd->nFileSizeLow;
1925 fs->uFileAttribs = wfd->dwFileAttributes;
1926 memcpy(fs->szNames, buff, alen);
1927
1928 fsw = (FileStructW*)(pData->u.file.szNames + alen + (alen & 0x1));
1929 fsw->cbLen = FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD);
1930 FileTimeToDosDateTime( &wfd->ftCreationTime, &fsw->uCreationDate, &fsw->uCreationTime);
1931 FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime);
1932 memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR));
1933
1934 pOffsetW = (WORD*)((LPBYTE)pidl + pidl->mkid.cb - sizeof(WORD));
1935 *pOffsetW = (LPBYTE)fsw - (LPBYTE)pidl;
1936 TRACE("-- Set Value: %s\n",debugstr_w(fsw->wszName));
1937 }
1938 return pidl;
1939
1940}
#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:132
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 1942 of file pidl.c.

1943{
1944 HANDLE hFile;
1945 WIN32_FIND_DATAW stffile;
1946
1947 if (!ppidl)
1948 return E_INVALIDARG;
1949
1950 hFile = FindFirstFileW(szPath, &stffile);
1953
1955
1956 *ppidl = _ILCreateFromFindDataW(&stffile);
1957
1958 return *ppidl ? S_OK : E_OUTOFMEMORY;
1959}
#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:1894
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92

◆ _ILCreateGuid()

LPITEMIDLIST _ILCreateGuid ( PIDLTYPE  type,
REFIID  guid 
)

Definition at line 1840 of file pidl.c.

1841{
1842 LPITEMIDLIST pidlOut;
1843
1844 if (type == PT_SHELLEXT || type == PT_GUID || type == PT_YAGUID)
1845 {
1846 pidlOut = _ILAlloc(type, sizeof(GUIDStruct));
1847 if (pidlOut)
1848 {
1850
1851 pData->u.guid.guid = *guid;
1852 TRACE("-- create GUID-pidl %s\n",
1853 debugstr_guid(&(pData->u.guid.guid)));
1854 }
1855 }
1856 else
1857 {
1858 WARN("%d: invalid type for GUID\n", type);
1859 pidlOut = NULL;
1860 }
1861 return pidlOut;
1862}
#define WARN(fmt,...)
Definition: precomp.h:61
#define debugstr_guid
Definition: kernel32.h:35
const GUID * guid
#define PT_YAGUID
Definition: pidl.h:103

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

◆ _ILCreateGuidFromStrA()

LPITEMIDLIST _ILCreateGuidFromStrA ( LPCSTR  szGUID)

Definition at line 1865 of file pidl.c.

1866{
1867 IID iid;
1868
1869 if (FAILED(SHCLSIDFromStringA(szGUID, &iid)))
1870 {
1871 ERR("%s is not a GUID\n", szGUID);
1872 return NULL;
1873 }
1874 return _ILCreateGuid(PT_GUID, &iid);
1875}
#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 1877 of file pidl.c.

1878{
1879 IID iid;
1880
1881#ifndef __REACTOS__
1882 if (FAILED(SHCLSIDFromStringW(szGUID, &iid)))
1883#else
1884 if (!GUIDFromStringW(szGUID, &iid))
1885#endif
1886 {
1887 ERR("%s is not a GUID\n", debugstr_w(szGUID));
1888 return NULL;
1889 }
1890 return _ILCreateGuid(PT_GUID, &iid);
1891}
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 1770 of file pidl.c.

1771{
1772 TRACE("()\n");
1773 return _ILCreateGuid(PT_GUID, &CLSID_Internet);
1774}

Referenced by SHGetFolderLocation().

◆ _ILCreateMyComputer()

LPITEMIDLIST _ILCreateMyComputer ( void  )

Definition at line 1758 of file pidl.c.

1759{
1760 TRACE("()\n");
1761 return _ILCreateGuid(PT_GUID, &CLSID_MyComputer);
1762}

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

◆ _ILCreateMyDocuments()

LPITEMIDLIST _ILCreateMyDocuments ( void  )

Definition at line 1764 of file pidl.c.

1765{
1766 TRACE("()\n");
1767 return _ILCreateGuid(PT_GUID, &CLSID_MyDocuments);
1768}

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

◆ _ILCreateNetHood()

LPITEMIDLIST _ILCreateNetHood ( void  )

◆ _ILCreateNetwork()

LPITEMIDLIST _ILCreateNetwork ( void  )

Definition at line 1822 of file pidl.c.

1823{
1824 TRACE("()\n");
1825 return _ILCreateGuid(PT_GUID, &CLSID_NetworkPlaces);
1826}

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

◆ _ILCreatePrinters()

LPITEMIDLIST _ILCreatePrinters ( void  )

Definition at line 1795 of file pidl.c.

1796{
1797#ifdef __REACTOS__
1798 // Note: Wine returns the PIDL as it was in Windows 95, NT5 moved it into CSIDL_CONTROLS
1799 extern HRESULT SHGetFolderLocationHelper(HWND hwnd, int nFolder, REFCLSID clsid, LPITEMIDLIST *ppidl);
1800 LPITEMIDLIST pidl;
1801 SHGetFolderLocationHelper(NULL, CSIDL_CONTROLS, &CLSID_Printers, &pidl);
1802 return pidl;
1803#else
1804 LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
1805
1806 TRACE("()\n");
1807 if (parent)
1808 {
1809 LPITEMIDLIST printers = _ILCreateGuid(PT_YAGUID, &CLSID_Printers);
1810
1811 if (printers)
1812 {
1813 ret = ILCombine(parent, printers);
1814 SHFree(printers);
1815 }
1816 SHFree(parent);
1817 }
1818 return ret;
1819#endif
1820}
REFCLSID clsid
Definition: msctf.c:82
#define REFCLSID
Definition: guiddef.h:117
#define CSIDL_CONTROLS
Definition: shlobj.h:2176
_In_ int nFolder
Definition: shlobj.h:1519
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by SHGetFolderLocation().

◆ _ILFreeaPidl()

void _ILFreeaPidl ( LPITEMIDLIST apidl,
UINT  cidl 
)

Definition at line 2603 of file pidl.c.

2604{
2605 UINT i;
2606
2607 if (apidl)
2608 {
2609 for (i = 0; i < cidl; i++)
2610 SHFree(apidl[i]);
2611 SHFree(apidl);
2612 }
2613}

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

◆ _ILGetDataPointer()

◆ _ILGetDepth()

UINT _ILGetDepth ( LPCITEMIDLIST  pidl)

Referenced by BrFolder_ExpandToPidl(), and ILIsEqual().

◆ _ILGetDrive()

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

Definition at line 2006 of file pidl.c.

2007{
2008 TRACE("(%p,%p,%u)\n",pidl,pOut,uSize);
2009
2010 if(_ILIsMyComputer(pidl))
2011 pidl = ILGetNext(pidl);
2012
2013 if (pidl && _ILIsDrive(pidl))
2014 return _ILSimpleGetTextW(pidl, pOut, uSize);
2015
2016 return 0;
2017}
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
Definition: pidl.c:2080
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:970
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
Definition: pidl.c:2113
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
Definition: pidl.c:2174

Referenced by _ILGetDriveType(), and DrivesContextMenuCallback().

◆ _ILGetExtension()

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

Definition at line 2516 of file pidl.c.

2517{
2518 WCHAR szTemp[MAX_PATH];
2519 LPCWSTR pPoint;
2520 LPCITEMIDLIST pidlTemp = pidl;
2521
2522 TRACE("pidl=%p\n",pidl);
2523
2524 if (!pidl)
2525 return FALSE;
2526
2527 pidlTemp = ILFindLastID(pidl);
2528
2529 if (!_ILIsValue(pidlTemp))
2530 return FALSE;
2531 if (!_ILSimpleGetTextW(pidlTemp, szTemp, _countof(szTemp)))
2532 return FALSE;
2533
2534 pPoint = PathFindExtensionW(szTemp);
2535
2536 if (!*pPoint)
2537 return FALSE;
2538
2539 pPoint++;
2540 lstrcpynW(pOut, pPoint, uOutSize);
2541 TRACE("%s\n", debugstr_w(pOut));
2542
2543 return TRUE;
2544}
#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:2127
#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 2563 of file pidl.c.

2564{
2566 WORD wAttrib = 0;
2567 int i;
2568
2569 if (!pData)
2570 return 0;
2571
2572 switch(pData->type)
2573 {
2574 case PT_FOLDER:
2575 case PT_VALUE:
2576 wAttrib = pData->u.file.uFileAttribs;
2577 break;
2578 }
2579
2580 if(uOutSize >= 6)
2581 {
2582 i=0;
2583 if(wAttrib & FILE_ATTRIBUTE_READONLY)
2584 pOut[i++] = L'R';
2585 if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
2586 pOut[i++] = L'H';
2587 if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
2588 pOut[i++] = L'S';
2589 if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
2590 pOut[i++] = L'A';
2591 if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
2592 pOut[i++] = L'C';
2593 pOut[i] = UNICODE_NULL;
2594 }
2595 return wAttrib;
2596}
#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

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

◆ _ILGetFileDateTime()

BOOL _ILGetFileDateTime ( LPCITEMIDLIST  pidl,
FILETIME ft 
)

Definition at line 2470 of file pidl.c.

2471{
2472 if (_ILGetFSType(pidl) > PT_FS) /* Only non-simple FS items have a date */
2473 {
2475 return DosDateTimeToFileTime(pdata->u.file.uFileDate, pdata->u.file.uFileTime, pFt);
2476 }
2477 return FALSE;
2478}
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
Definition: time.c:75
static PROTOCOLDATA * pdata
Definition: protocol.c:158
static BYTE _ILGetFSType(LPCITEMIDLIST pidl)
Definition: pidl.h:125

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

◆ _ILGetFileSize()

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

Definition at line 2497 of file pidl.c.

2498{
2500 if (!pdata)
2501 return 0;
2502
2503 if (_ILGetFSType(pidl) & PT_FS_FILE_FLAG)
2504 {
2505 /* FIXME: Handle INVALID_FILE_SIZE (get size from disk) */
2506 DWORD dwSize = pdata->u.file.dwFileSize;
2507 if (pOut)
2508 StrFormatKBSizeW(dwSize, pOut, uOutSize);
2509 return dwSize;
2510 }
2511 if (pOut)
2512 *pOut = UNICODE_NULL;
2513 return 0;
2514}
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::GetDetailsOf(), SHGetDataFromIDListA(), SHGetDataFromIDListW(), and CDefView::UpdateStatusbar().

◆ _ILGetFileStructW()

FileStructW * _ILGetFileStructW ( LPCITEMIDLIST  pidl)

Definition at line 2428 of file pidl.c.

2428 {
2429 FileStructW *pFileStructW;
2430 WORD cbOffset;
2431
2432 if (!_ILIsFolderOrFile(pidl))
2433 return NULL;
2434
2435 cbOffset = *(const WORD *)((const BYTE *)pidl + pidl->mkid.cb - sizeof(WORD));
2436 pFileStructW = (FileStructW*)((LPBYTE)pidl + cbOffset);
2437
2438 /* Currently I don't see a fool prove way to figure out if a pidl is for sure of WinXP
2439 * style with a FileStructW member. If we switch all our shellfolder-implementations to
2440 * the new format, this won't be a problem. For now, we do as many sanity checks as possible. */
2441 if ((cbOffset & 0x1) || /* FileStructW member is word aligned in the pidl */
2442 /* FileStructW is positioned after FileStruct */
2443 cbOffset < sizeof(pidl->mkid.cb) + sizeof(PIDLTYPE) + sizeof(FileStruct) ||
2444 /* There has to be enough space at cbOffset in the pidl to hold FileStructW and cbOffset */
2445 cbOffset > pidl->mkid.cb - sizeof(cbOffset) - sizeof(FileStructW) ||
2446 pidl->mkid.cb != cbOffset + pFileStructW->cbLen)
2447 {
2448 WARN("Invalid pidl format (cbOffset = %d)!\n", cbOffset);
2449 return NULL;
2450 }
2451
2452 return pFileStructW;
2453}
struct tagFileStruct FileStruct

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

◆ _ILGetFSType()

static BYTE _ILGetFSType ( LPCITEMIDLIST  pidl)
inlinestatic

Definition at line 125 of file pidl.h.

126{
127 const BYTE type = _ILGetType(pidl);
128 return (type & PT_FOLDERTYPEMASK) == PT_FS ? type : 0;
129}
static BYTE _ILGetType(LPCITEMIDLIST pidl)
Definition: pidl.h:120

Referenced by _ILGetFileDateTime(), _ILGetFileSize(), _ILGetTextPointerW(), _ILIsFolder(), _ILIsUnicode(), _ILIsValue(), CRecycleBin::CompareIDs(), CreateItem(), GetItemFileName(), GetItemFileSize(), and IsFolder().

◆ _ILGetGUIDPointer()

IID * _ILGetGUIDPointer ( LPCITEMIDLIST  pidl)

Definition at line 2392 of file pidl.c.

2393{
2395
2396 TRACE("%p\n", pidl);
2397
2398 if (!pdata)
2399 return NULL;
2400
2401 TRACE("pdata->type 0x%04x\n", pdata->type);
2402 switch (pdata->type)
2403 {
2404 case PT_SHELLEXT:
2405 case PT_GUID:
2406 case PT_YAGUID:
2407 return &(pdata->u.guid.guid);
2408
2409 default:
2410 TRACE("Unknown pidl type 0x%04x\n", pdata->type);
2411 break;
2412 }
2413 return NULL;
2414}

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

◆ _ILGetTextPointer()

LPSTR _ILGetTextPointer ( LPCITEMIDLIST  pidl)

Definition at line 2321 of file pidl.c.

2322{
2323 /* TRACE(pidl,"(pidl%p)\n", pidl);*/
2324
2326
2327 if (!pdata)
2328 return NULL;
2329
2330 switch (pdata->type)
2331 {
2332 case PT_GUID:
2333 case PT_SHELLEXT:
2334 case PT_YAGUID:
2335 return NULL;
2336
2337 case PT_DRIVE:
2338 case PT_DRIVE1:
2339 case PT_DRIVE2:
2340 case PT_DRIVE3:
2341 return pdata->u.drive.szDriveName;
2342
2343 case PT_FOLDER:
2344 case PT_FOLDER1:
2345 case PT_VALUE:
2346 case PT_IESPECIAL1:
2347 case PT_IESPECIAL2:
2348 return pdata->u.file.szNames;
2349
2350 case PT_WORKGRP:
2351 case PT_COMP:
2352 case PT_NETWORK:
2353 case PT_NETPROVIDER:
2354 case PT_SHARE:
2355 return pdata->u.network.szNames;
2356 }
2357 return NULL;
2358}
#define PT_DRIVE1
Definition: pidl.h:92
#define PT_WORKGRP
Definition: pidl.h:98
#define PT_FOLDER1
Definition: pidl.h:93
#define PT_DRIVE3
Definition: pidl.h:90
#define PT_IESPECIAL1
Definition: pidl.h:102
#define PT_DRIVE2
Definition: pidl.h:89
#define PT_SHARE
Definition: pidl.h:105
#define PT_COMP
Definition: pidl.h:99
#define PT_NETPROVIDER
Definition: pidl.h:100
#define PT_IESPECIAL2
Definition: pidl.h:104

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

◆ _ILGetType()

static BYTE _ILGetType ( LPCITEMIDLIST  pidl)
inlinestatic

Definition at line 120 of file pidl.h.

121{
122 return pidl && pidl->mkid.cb >= 3 ? pidl->mkid.abID[0] : 0;
123}

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

◆ _ILIsCPanelStruct()

BOOL _ILIsCPanelStruct ( LPCITEMIDLIST  pidl)

Definition at line 2133 of file pidl.c.

2134{
2135 LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
2136
2137 TRACE("(%p)\n",pidl);
2138
2139 return (pidl && lpPData && (lpPData->type == 0));
2140}
PIDLTYPE type
Definition: pidl.h:206

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

◆ _ILIsDesktop()

◆ _ILIsDrive()

◆ _ILIsEmpty()

static BOOL _ILIsEmpty ( LPCITEMIDLIST  pidl)
inlinestatic

Definition at line 260 of file pidl.h.

260{ 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 2120 of file pidl.c.

2121{
2122 /* A folder or a simple PT_FS with a child */
2123 const BYTE type = _ILGetFSType(pidl);
2124 return (type & PT_FS_FOLDER_FLAG) != 0 || (type == PT_FS && ILGetNext(pidl));
2125}

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

◆ _ILIsMyComputer()

BOOL _ILIsMyComputer ( LPCITEMIDLIST  pidl)

Definition at line 2080 of file pidl.c.

2081{
2082 REFIID iid = _ILGetGUIDPointer(pidl);
2083
2084 TRACE("(%p)\n",pidl);
2085
2086 if (iid)
2087 return IsEqualIID(iid, &CLSID_MyComputer);
2088 return FALSE;
2089}
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2392
#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 912 of file shellbrowser.cpp.

913{
914 LPCITEMIDLIST pidlnext;
915 WORD length;
916 BOOL ret;
917
918 ret = TRUE;
919 if (! _ILIsDesktop(pidl))
920 {
921 length = pidl->mkid.cb;
922 pidlnext =
923 reinterpret_cast<LPCITEMIDLIST>(
924 reinterpret_cast<const BYTE *>(pidl) + length);
925 if (pidlnext->mkid.cb != 0)
926 ret = FALSE;
927 }
928 return ret;
929}
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 2033 of file pidl.c.

2034{
2035 TRACE("(%p)\n",pidl);
2036
2037 return (_ILGetFSType(pidl) & PT_FS_UNICODE_FLAG) != 0;
2038}

Referenced by pdump_impl().

◆ _ILIsValue()

BOOL _ILIsValue ( LPCITEMIDLIST  pidl)

Definition at line 2127 of file pidl.c.

2128{
2129 const BYTE type = _ILGetFSType(pidl);
2130 return type && !(type & PT_FS_FOLDER_FLAG);
2131}

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

◆ _ILSimpleGetTextW()

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

Definition at line 2174 of file pidl.c.

2175{
2176 DWORD dwReturn;
2177 FileStructW *pFileStructW = _ILGetFileStructW(pidl);
2178
2179 TRACE("(%p %p %x)\n",pidl,szOut,uOutSize);
2180
2181 if (pFileStructW) {
2182 lstrcpynW(szOut, pFileStructW->wszName, uOutSize);
2183 dwReturn = lstrlenW(pFileStructW->wszName);
2184 } else {
2185 GUID const * riid;
2186 WCHAR szTemp[MAX_PATH];
2187 LPSTR szSrc;
2188 LPWSTR szSrcW;
2189 dwReturn=0;
2190
2191 if (!pidl)
2192 return 0;
2193
2194 if (szOut)
2195 *szOut = 0;
2196
2197 if (_ILIsDesktop(pidl))
2198 {
2199 /* desktop */
2200 if (HCR_GetClassNameW(&CLSID_ShellDesktop, szTemp, _countof(szTemp)))
2201 {
2202 if (szOut)
2203 lstrcpynW(szOut, szTemp, uOutSize);
2204
2205 dwReturn = lstrlenW (szTemp);
2206 }
2207 }
2208 else if (( szSrcW = _ILGetTextPointerW(pidl) ))
2209 {
2210 /* unicode filesystem */
2211 if (szOut)
2212 lstrcpynW(szOut, szSrcW, uOutSize);
2213
2214 dwReturn = lstrlenW(szSrcW);
2215 }
2216 else if (( szSrc = _ILGetTextPointer(pidl) ))
2217 {
2218 /* filesystem */
2219 MultiByteToWideChar(CP_ACP, 0, szSrc, -1, szTemp, _countof(szTemp));
2220
2221 if (szOut)
2222 lstrcpynW(szOut, szTemp, uOutSize);
2223
2224 dwReturn = lstrlenW (szTemp);
2225 }
2226 else if (( riid = _ILGetGUIDPointer(pidl) ))
2227 {
2228 /* special folder */
2229 if ( HCR_GetClassNameW(riid, szTemp, _countof(szTemp)))
2230 {
2231 if (szOut)
2232 lstrcpynW(szOut, szTemp, uOutSize);
2233
2234 dwReturn = lstrlenW (szTemp);
2235 }
2236 }
2237 else
2238 {
2239 ERR("-- no text\n");
2240 }
2241 }
2242
2243 TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_w(szOut),dwReturn);
2244 return dwReturn;
2245}
#define MultiByteToWideChar
Definition: compat.h:110
REFIID riid
Definition: atlbase.h:39
static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl)
Definition: pidl.c:2265
FileStructW * _ILGetFileStructW(LPCITEMIDLIST pidl)
Definition: pidl.c:2428
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: pidl.c:2040
BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len)
Definition: classes.c:422
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by CDesktopFolder::_GetSFFromPidl(), _ILGetDrive(), _ILGetExtension(), AddFSClassKeysToArray(), CDrivesFolder::GetDisplayNameOf(), CFSFolder::GetDisplayNameOf(), GetItemDriveNumber(), GetItemFileName(), RenderHDROP(), CDrivesFolder::SetNameOf(), 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:1462
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_VALUEW
Definition: pidl.h:96
#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().