[SHELL32]

* Another partial sync of pidl.c and pidl.h with Wine 1.7.27.
CORE-8540

svn path=/branches/shell-experiments/; revision=65235
This commit is contained in:
Amine Khaldi 2014-11-03 20:15:17 +00:00
parent 8c29f2837c
commit d7ca29bc06
2 changed files with 139 additions and 111 deletions

View file

@ -37,6 +37,7 @@
#include <shlwapi.h>
#include <shlguid_undoc.h>
#include <wine/debug.h>
#include <wine/unicode.h>
#include "pidl.h"
#include "shell32_main.h"
@ -69,7 +70,7 @@ static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl);
* RETURNS
* True if the display name could be retrieved successfully, False otherwise
*/
static BOOL ILGetDisplayNameExA(IShellFolder * psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
static BOOL ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
{
BOOL ret = FALSE;
WCHAR wPath[MAX_PATH];
@ -86,7 +87,7 @@ static BOOL ILGetDisplayNameExA(IShellFolder * psf, LPCITEMIDLIST pidl, LPSTR pa
return ret;
}
BOOL WINAPI ILGetDisplayNameExW(IShellFolder * psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
{
LPSHELLFOLDER psfParent, lsf = psf;
HRESULT ret = NO_ERROR;
@ -94,7 +95,7 @@ BOOL WINAPI ILGetDisplayNameExW(IShellFolder * psf, LPCITEMIDLIST pidl, LPWSTR p
STRRET strret;
DWORD flag;
TRACE("%p %p %p %d\n", psf, pidl, path, type);
TRACE("%p %p %p %x\n", psf, pidl, path, type);
if (!pidl || !path)
return FALSE;
@ -156,13 +157,13 @@ BOOL WINAPI ILGetDisplayNameExW(IShellFolder * psf, LPCITEMIDLIST pidl, LPWSTR p
/*************************************************************************
* ILGetDisplayNameEx [SHELL32.186]
*/
BOOL WINAPI ILGetDisplayNameEx(IShellFolder * psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type)
BOOL WINAPI ILGetDisplayNameEx(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type)
{
TRACE_(shell)("%p %p %p %d\n", psf, pidl, path, type);
if (SHELL_OsIsUnicode())
return ILGetDisplayNameExW(psf, pidl, (LPWSTR)path, type);
return ILGetDisplayNameExA(psf, pidl, (LPSTR)path, type);
return ILGetDisplayNameExW(psf, pidl, path, type);
return ILGetDisplayNameExA(psf, pidl, path, type);
}
/*************************************************************************
@ -173,8 +174,8 @@ BOOL WINAPI ILGetDisplayName(LPCITEMIDLIST pidl, LPVOID path)
TRACE_(shell)("%p %p\n", pidl, path);
if (SHELL_OsIsUnicode())
return ILGetDisplayNameExW(NULL, pidl, (LPWSTR)path, ILGDN_FORPARSING);
return ILGetDisplayNameExA(NULL, pidl, (LPSTR)path, ILGDN_FORPARSING);
return ILGetDisplayNameExW(NULL, pidl, path, ILGDN_FORPARSING);
return ILGetDisplayNameExA(NULL, pidl, path, ILGDN_FORPARSING);
}
/*************************************************************************
@ -211,9 +212,9 @@ BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
TRACE_(shell)("pidl=%p\n",pidl);
if (!pidl || !pidl->mkid.cb)
return 0;
return FALSE;
ILFindLastID(pidl)->mkid.cb = 0;
return 1;
return TRUE;
}
/*************************************************************************
@ -231,7 +232,7 @@ LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl)
return NULL;
len = ILGetSize(pidl);
newpidl = (LPITEMIDLIST)SHAlloc(len);
newpidl = SHAlloc(len);
if (newpidl)
memcpy(newpidl,pidl,len);
@ -258,7 +259,7 @@ LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
if (pidl)
{
len = pidl->mkid.cb;
pidlNew = (LPITEMIDLIST)SHAlloc(len + 2);
pidlNew = SHAlloc(len+2);
if (pidlNew)
{
memcpy(pidlNew,pidl,len+2); /* 2 -> mind a desktop pidl */
@ -395,15 +396,18 @@ HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST * ppidl, DWORD * a
TRACE_(shell)("%s %p 0x%08x\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
if (SUCCEEDED (SHGetDesktopFolder(&sf)))
{
ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path, &pchEaten, ppidl, attributes);
IShellFolder_Release(sf);
}
return ret;
}
EXTERN_C HRESULT WINAPI SHILCreateFromPathAW (LPCVOID path, LPITEMIDLIST * ppidl, DWORD * attributes)
HRESULT WINAPI SHILCreateFromPathAW (LPCVOID path, LPITEMIDLIST * ppidl, DWORD * attributes)
{
if ( SHELL_OsIsUnicode())
return SHILCreateFromPathW ((LPCWSTR)path, ppidl, attributes);
return SHILCreateFromPathA ((LPCSTR)path, ppidl, attributes);
return SHILCreateFromPathW (path, ppidl, attributes);
return SHILCreateFromPathA (path, ppidl, attributes);
}
/*************************************************************************
@ -460,7 +464,7 @@ LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl)
return NULL;
len = ILGetSize(pidl);
newpidl = (LPITEMIDLIST)Alloc(len);
newpidl = Alloc(len);
if (newpidl)
memcpy(newpidl,pidl,len);
@ -502,7 +506,7 @@ BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
_ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
_ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
if (strcmp( szData1, szData2 ))
if (strcasecmp( szData1, szData2 ))
return FALSE;
pidltemp1 = ILGetNext(pidltemp1);
@ -554,7 +558,7 @@ BOOL WINAPI ILIsParent(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild, BOOL b
_ILSimpleGetText(pParent, szData1, MAX_PATH);
_ILSimpleGetText(pChild, szData2, MAX_PATH);
if (strcmp( szData1, szData2 ))
if (strcasecmp( szData1, szData2 ))
return FALSE;
pParent = ILGetNext(pParent);
@ -621,7 +625,7 @@ LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
_ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
_ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
if (strcmp(szData1, szData2))
if (strcasecmp(szData1,szData2))
break;
pidltemp1 = ILGetNext(pidltemp1);
@ -681,7 +685,7 @@ LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
len1 = ILGetSize(pidl1)-2;
len2 = ILGetSize(pidl2);
pidlNew = (LPITEMIDLIST)SHAlloc(len1 + len2);
pidlNew = SHAlloc(len1+len2);
if (pidlNew)
{
@ -698,7 +702,7 @@ LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
*
* NOTES
*/
HRESULT WINAPI SHGetRealIDL(IShellFolder * lpsf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST *pidlReal)
HRESULT WINAPI SHGetRealIDL(LPSHELLFOLDER lpsf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST *pidlReal)
{
IDataObject* pDataObj;
HRESULT hr;
@ -710,7 +714,7 @@ HRESULT WINAPI SHGetRealIDL(IShellFolder * lpsf, LPCITEMIDLIST pidlSimple, LPITE
STGMEDIUM medium;
FORMATETC fmt;
fmt.cfFormat = RegisterClipboardFormatW(CFSTR_SHELLIDLIST);
fmt.cfFormat = RegisterClipboardFormatW(CFSTR_SHELLIDLISTW);
fmt.ptd = NULL;
fmt.dwAspect = DVASPECT_CONTENT;
fmt.lindex = -1;
@ -718,10 +722,12 @@ HRESULT WINAPI SHGetRealIDL(IShellFolder * lpsf, LPCITEMIDLIST pidlSimple, LPITE
hr = IDataObject_GetData(pDataObj, &fmt, &medium);
IDataObject_Release(pDataObj);
if (SUCCEEDED(hr))
{
/*assert(pida->cidl==1);*/
LPIDA pida = (LPIDA)GlobalLock(medium.u.hGlobal);
LPIDA pida = GlobalLock(medium.u.hGlobal);
LPCITEMIDLIST pidl_folder = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]);
LPCITEMIDLIST pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[1]);
@ -746,7 +752,7 @@ HRESULT WINAPI SHGetRealIDL(IShellFolder * lpsf, LPCITEMIDLIST pidlSimple, LPITE
* pild = CSIDL_DESKTOP ret = 0
* pild = CSIDL_DRIVES ret = 0
*/
EXTERN_C LPITEMIDLIST WINAPI SHLogILFromFSIL(LPITEMIDLIST pidl)
LPITEMIDLIST WINAPI SHLogILFromFSIL(LPITEMIDLIST pidl)
{
FIXME("(pidl=%p)\n",pidl);
@ -839,7 +845,7 @@ LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
* NOTES
* Destroys the passed in idlist! (???)
*/
EXTERN_C LPITEMIDLIST WINAPI ILAppend(LPITEMIDLIST pidl, LPCITEMIDLIST item, BOOL bEnd)
LPITEMIDLIST WINAPI ILAppend(LPITEMIDLIST pidl, LPCITEMIDLIST item, BOOL bEnd)
{
LPITEMIDLIST idlRet;
@ -949,11 +955,11 @@ LPITEMIDLIST WINAPI ILCreateFromPathW (LPCWSTR path)
/*************************************************************************
* ILCreateFromPath [SHELL32.157]
*/
EXTERN_C LPITEMIDLIST WINAPI ILCreateFromPathAW (LPCVOID path)
LPITEMIDLIST WINAPI ILCreateFromPathAW (LPCVOID path)
{
if ( SHELL_OsIsUnicode())
return ILCreateFromPathW ((LPCWSTR)path);
return ILCreateFromPathA ((LPCSTR)path);
return ILCreateFromPathW (path);
return ILCreateFromPathA (path);
}
/*************************************************************************
@ -1006,6 +1012,14 @@ static HRESULT _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile,
ret = IShellFolder_ParseDisplayName(pSF, 0, pBC, (LPOLESTR)path, NULL, ppidl, prgfInOut);
}
if (pBC)
{
IBindCtx_Release(pBC);
pBC = NULL;
}
IShellFolder_Release(pSF);
if (FAILED(ret) && ppidl)
*ppidl = NULL;
@ -1045,7 +1059,7 @@ LPITEMIDLIST WINAPI SHSimpleIDListFromPathA(LPCSTR lpszPath)
if (lpszPath)
{
len = MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, NULL, 0);
wPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
wPath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, wPath, len);
}
@ -1067,11 +1081,11 @@ LPITEMIDLIST WINAPI SHSimpleIDListFromPathW(LPCWSTR lpszPath)
return pidl;
}
EXTERN_C LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW(LPCVOID lpszPath)
LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW(LPCVOID lpszPath)
{
if ( SHELL_OsIsUnicode())
return SHSimpleIDListFromPathW ((LPCWSTR)lpszPath);
return SHSimpleIDListFromPathA ((LPCSTR)lpszPath);
return SHSimpleIDListFromPathW (lpszPath);
return SHSimpleIDListFromPathA (lpszPath);
}
/*************************************************************************
@ -1139,7 +1153,7 @@ HRESULT WINAPI SHGetDataFromIDListA(IShellFolder * psf, LPCITEMIDLIST pidl,
* SHGetDataFromIDListW [SHELL32.248]
*
*/
HRESULT WINAPI SHGetDataFromIDListW(IShellFolder * psf, LPCITEMIDLIST pidl,
HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
int nFormat, LPVOID dest, int len)
{
LPSTR filename, shortname;
@ -1252,10 +1266,12 @@ BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
if (FAILED(hr) || !(dwAttributes & SFGAO_FILESYSTEM))
{
WARN("Wrong dwAttributes or GetAttributesOf failed: %x\n", hr);
IShellFolder_Release(psfFolder);
return FALSE;
}
hr = IShellFolder_GetDisplayNameOf(psfFolder, pidlLast, SHGDN_FORPARSING, &strret);
IShellFolder_Release(psfFolder);
if (FAILED(hr)) return FALSE;
hr = StrRetToBufW(&strret, pidlLast, pszPath, MAX_PATH);
@ -1299,6 +1315,8 @@ HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCI
SHFree (pidlParent);
}
IShellFolder_Release(psfDesktop);
if (SUCCEEDED(hr) && ppidlLast)
*ppidlLast = ILFindLastID(pidl);
@ -1325,7 +1343,7 @@ static LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size)
{
LPITEMIDLIST pidlOut = NULL;
pidlOut = (LPITEMIDLIST)SHAlloc(size + 5);
pidlOut = SHAlloc(size + 5);
if(pidlOut)
{
LPPIDLDATA pData;
@ -1352,7 +1370,7 @@ LPITEMIDLIST _ILCreateDesktop(void)
LPITEMIDLIST ret;
TRACE("()\n");
ret = (LPITEMIDLIST)SHAlloc(2);
ret = SHAlloc(2);
if (ret)
ret->mkid.cb = 0;
return ret;
@ -1472,7 +1490,7 @@ LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID)
{
IID iid;
if (FAILED(CLSIDFromString((LPOLESTR)szGUID, &iid)))
if (FAILED(SHCLSIDFromStringW(szGUID, &iid)))
{
ERR("%s is not a GUID\n", debugstr_w(szGUID));
return NULL;
@ -1483,7 +1501,7 @@ LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID)
LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
{
char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
DWORD len, len1, wlen, alen, cbData;
DWORD len, len1, wlen, alen;
LPITEMIDLIST pidl;
PIDLTYPE type;
@ -1499,11 +1517,9 @@ LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
wlen = wcslen(wfd->cFileName) + 1;
cbData = sizeof(FileStruct) - 1 + (alen + (alen & 1)); // Note: szNames field is initially 1 byte long
cbData += sizeof(FileStructW) - 1 + wlen * sizeof(WCHAR); // Note: wszName field is initially 1 byte long
cbData += sizeof(WORD); // offset to FileStructW
pidl = _ILAlloc(type, cbData);
wlen = lstrlenW(wfd->cFileName) + 1;
pidl = _ILAlloc(type, FIELD_OFFSET(FileStruct, szNames[alen + (alen & 1)]) +
FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD));
if (pidl)
{
LPPIDLDATA pData = _ILGetDataPointer(pidl);
@ -1517,7 +1533,7 @@ LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
memcpy(fs->szNames, buff, alen);
fsw = (FileStructW*)(pData->u.file.szNames + alen + (alen & 0x1));
fsw->cbLen = sizeof(FileStructW) - 1 + wlen * sizeof(WCHAR) + sizeof(WORD);
fsw->cbLen = FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD);
FileTimeToDosDateTime( &wfd->ftCreationTime, &fsw->uCreationDate, &fsw->uCreationTime);
FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime);
memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR));
@ -1564,7 +1580,7 @@ LPITEMIDLIST _ILCreateDrive(LPCWSTR lpszNew)
if (pszDest)
{
strcpy(pszDest, "x:\\");
pszDest[0] = towupper(lpszNew[0]);
pszDest[0]=toupperW(lpszNew[0]);
TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
}
}
@ -1668,7 +1684,7 @@ LPITEMIDLIST _ILCreateFont(void)
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
{
IID *iid = _ILGetGUIDPointer(pidl);
REFIID iid = _ILGetGUIDPointer(pidl);
TRACE("(%p)\n",pidl);
@ -1874,7 +1890,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
if (pFileStructW) {
lstrcpynW(szOut, pFileStructW->wszName, uOutSize);
dwReturn = wcslen(pFileStructW->wszName);
dwReturn = lstrlenW(pFileStructW->wszName);
} else {
GUID const * riid;
WCHAR szTemp[MAX_PATH];
@ -1896,7 +1912,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
if (szOut)
lstrcpynW(szOut, szTemp, uOutSize);
dwReturn = wcslen (szTemp);
dwReturn = lstrlenW (szTemp);
}
}
else if (( szSrcW = _ILGetTextPointerW(pidl) ))
@ -1905,7 +1921,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
if (szOut)
lstrcpynW(szOut, szSrcW, uOutSize);
dwReturn = wcslen(szSrcW);
dwReturn = lstrlenW(szSrcW);
}
else if (( szSrc = _ILGetTextPointer(pidl) ))
{
@ -1915,7 +1931,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
if (szOut)
lstrcpynW(szOut, szTemp, uOutSize);
dwReturn = wcslen (szTemp);
dwReturn = lstrlenW (szTemp);
}
else if (( riid = _ILGetGUIDPointer(pidl) ))
{
@ -1925,7 +1941,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
if (szOut)
lstrcpynW(szOut, szTemp, uOutSize);
dwReturn = wcslen (szTemp);
dwReturn = lstrlenW (szTemp);
}
}
else
@ -2129,14 +2145,14 @@ FileStructW* _ILGetFileStructW(LPCITEMIDLIST pidl) {
/* Currently I don't see a fool prove way to figure out if a pidl is for sure of WinXP
* style with a FileStructW member. If we switch all our shellfolder-implementations to
* the new format, this won't be a problem. For now, we do as many sanity checks as possible. */
if (cbOffset & 0x1 || /* FileStructW member is word aligned in the pidl */
if ((cbOffset & 0x1) || /* FileStructW member is word aligned in the pidl */
/* FileStructW is positioned after FileStruct */
cbOffset < sizeof(pidl->mkid.cb) + sizeof(PIDLTYPE) + sizeof(FileStruct) ||
/* There has to be enough space at cbOffset in the pidl to hold FileStructW and cbOffset */
cbOffset > pidl->mkid.cb - sizeof(cbOffset) - sizeof(FileStructW) ||
pidl->mkid.cb != cbOffset + pFileStructW->cbLen)
{
ERR("Invalid pidl format (cbOffset = %d)!\n", cbOffset);
WARN("Invalid pidl format (cbOffset = %d)!\n", cbOffset);
return NULL;
}
@ -2407,10 +2423,11 @@ LPITEMIDLIST* _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl)
UINT i;
LPITEMIDLIST *apidldest;
apidldest = (LPITEMIDLIST *)SHAlloc(cidl * sizeof(LPITEMIDLIST));
if (!apidlsrc)
return NULL;
apidldest = SHAlloc(cidl * sizeof(LPITEMIDLIST));
for (i = 0; i < cidl; i++)
apidldest[i] = ILClone(apidlsrc[i]);
@ -2427,7 +2444,7 @@ LPITEMIDLIST* _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida)
UINT i;
LPITEMIDLIST *dst;
dst = (LPITEMIDLIST *)SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
dst = SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
if (!dst)
return NULL;

View file

@ -94,13 +94,13 @@ extern "C" {
#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_CPEXT 0x71
#define PT_IESPECIAL2 0xb1
#define PT_SHARE 0xc3
@ -116,6 +116,8 @@ typedef struct tagPIDLCPanelStruct
CHAR szName[1]; /*10*/ /* terminated by 0x00, followed by display name and comment string */
} PIDLCPanelStruct;
#ifdef __REACTOS__
typedef struct tagPIDLFontStruct
{
BYTE dummy;
@ -141,6 +143,8 @@ typedef struct tagPIDLRecycleStruct
WCHAR szName[1];
} PIDLRecycleStruct;
#endif /* !__REACTOS__ */
typedef struct tagGUIDStruct
{
BYTE dummy; /* offset 01 is unknown */
@ -202,9 +206,11 @@ typedef struct tagPIDLDATA
} htmlhelp;
struct tagPIDLCPanelStruct cpanel;
struct tagValueW valueW;
struct tagPIDLFontStruct cfont;
struct tagPIDLPrinterStruct cprinter;
struct tagPIDLRecycleStruct crecycle;
#ifdef __REACTOS__
struct tagPIDLFontStruct cfont;
struct tagPIDLPrinterStruct cprinter;
struct tagPIDLRecycleStruct crecycle;
#endif
}u;
} PIDLDATA, *LPPIDLDATA;
#include "poppack.h"
@ -212,42 +218,44 @@ typedef struct tagPIDLDATA
/*
* getting special values from simple pidls
*/
DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize);
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);
DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
void _ILGetFileType (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
DWORD _ILGetFileAttributes (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft);
DWORD _ILGetDrive (LPCITEMIDLIST, LPSTR, UINT);
BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft) DECLSPEC_HIDDEN;
DWORD _ILGetDrive (LPCITEMIDLIST, LPSTR, UINT) DECLSPEC_HIDDEN;
/*
* testing simple pidls
*/
BOOL _ILIsUnicode (LPCITEMIDLIST pidl);
BOOL _ILIsDesktop (LPCITEMIDLIST pidl);
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl);
BOOL _ILIsPrinter (LPCITEMIDLIST pidl);
BOOL _ILIsMyDocuments (LPCITEMIDLIST pidl);
BOOL _ILIsControlPanel (LPCITEMIDLIST pidl);
BOOL _ILIsBitBucket (LPCITEMIDLIST pidl);
BOOL _ILIsAdminTools (LPCITEMIDLIST pidl);
BOOL _ILIsNetHood (LPCITEMIDLIST pidl);
BOOL _ILIsDrive (LPCITEMIDLIST pidl);
BOOL _ILIsFolder (LPCITEMIDLIST pidl);
BOOL _ILIsValue (LPCITEMIDLIST pidl);
BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl);
BOOL _ILIsPidlSimple (LPCITEMIDLIST pidl);
BOOL _ILIsCPanelStruct (LPCITEMIDLIST pidl);
static __inline
BOOL _ILIsUnicode (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
BOOL _ILIsDesktop (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
#ifdef __REACTOS__
BOOL _ILIsPrinter (LPCITEMIDLIST pidl);
BOOL _ILIsMyDocuments (LPCITEMIDLIST pidl);
BOOL _ILIsControlPanel (LPCITEMIDLIST pidl);
BOOL _ILIsBitBucket (LPCITEMIDLIST pidl);
BOOL _ILIsAdminTools (LPCITEMIDLIST pidl);
BOOL _ILIsNetHood (LPCITEMIDLIST pidl);
#endif
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 inline
BOOL _ILIsEqualSimple (LPCITEMIDLIST pidlA, LPCITEMIDLIST pidlB)
{
return (pidlA->mkid.cb > 0 && !memcmp(pidlA, pidlB, pidlA->mkid.cb)) ||
(!pidlA->mkid.cb && !pidlB->mkid.cb);
}
static __inline
static inline
BOOL _ILIsEmpty (LPCITEMIDLIST pidl) { return _ILIsDesktop(pidl); }
/*
@ -257,52 +265,55 @@ BOOL _ILIsEmpty (LPCITEMIDLIST pidl) { return _ILIsDesktop(pidl)
/* Creates a PIDL with guid format and type type, which must be one of PT_GUID,
* PT_SHELLEXT, or PT_YAGUID.
*/
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid);
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid) DECLSPEC_HIDDEN;
/* Like _ILCreateGuid, but using the string szGUID. */
LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID);
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID);
LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID) DECLSPEC_HIDDEN;
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID) DECLSPEC_HIDDEN;
/* Commonly used PIDLs representing file system objects. */
LPITEMIDLIST _ILCreateDesktop (void);
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *stffile);
HRESULT _ILCreateFromPathW (LPCWSTR szPath, LPITEMIDLIST* ppidl);
LPITEMIDLIST _ILCreateDesktop (void) DECLSPEC_HIDDEN;
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *stffile) DECLSPEC_HIDDEN;
HRESULT _ILCreateFromPathW (LPCWSTR szPath, LPITEMIDLIST* ppidl) DECLSPEC_HIDDEN;
/* Other helpers */
LPITEMIDLIST _ILCreateMyComputer (void);
LPITEMIDLIST _ILCreateMyDocuments (void);
LPITEMIDLIST _ILCreateIExplore (void);
LPITEMIDLIST _ILCreateControlPanel (void);
LPITEMIDLIST _ILCreatePrinters (void);
LPITEMIDLIST _ILCreateNetwork (void);
LPITEMIDLIST _ILCreateNetHood (void);
LPITEMIDLIST _ILCreateAdminTools (void);
LPITEMIDLIST _ILCreateFont (void);
LPITEMIDLIST _ILCreateBitBucket (void);
LPITEMIDLIST _ILCreateDrive (LPCWSTR);
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;
#ifdef __REACTOS__
LPITEMIDLIST _ILCreateAdminTools (void);
LPITEMIDLIST _ILCreateFont (void);
#endif
LPITEMIDLIST _ILCreateBitBucket (void) DECLSPEC_HIDDEN;
LPITEMIDLIST _ILCreateDrive (LPCWSTR) DECLSPEC_HIDDEN;
LPITEMIDLIST _ILCreateEntireNetwork (void) DECLSPEC_HIDDEN;
/*
* helper functions (getting struct-pointer)
*/
LPPIDLDATA _ILGetDataPointer (LPCITEMIDLIST);
LPSTR _ILGetTextPointer (LPCITEMIDLIST);
IID *_ILGetGUIDPointer (LPCITEMIDLIST pidl);
FileStructW *_ILGetFileStructW (LPCITEMIDLIST pidl);
LPPIDLDATA _ILGetDataPointer (LPCITEMIDLIST) DECLSPEC_HIDDEN;
LPSTR _ILGetTextPointer (LPCITEMIDLIST) DECLSPEC_HIDDEN;
IID *_ILGetGUIDPointer (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
FileStructW *_ILGetFileStructW (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
/*
* debug helper
*/
void pdump (LPCITEMIDLIST pidl);
BOOL pcheck (LPCITEMIDLIST pidl);
void pdump (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
BOOL pcheck (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
/*
* aPidl helper
*/
void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl);
LPITEMIDLIST * _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl);
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida);
void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl) DECLSPEC_HIDDEN;
LPITEMIDLIST * _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl) DECLSPEC_HIDDEN;
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida) DECLSPEC_HIDDEN;
BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type);
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type) DECLSPEC_HIDDEN;
#ifdef __cplusplus
} /* extern "C" */