mirror of
https://github.com/reactos/reactos.git
synced 2025-06-12 02:38:29 +00:00
[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:
parent
8c29f2837c
commit
d7ca29bc06
2 changed files with 139 additions and 111 deletions
|
@ -37,6 +37,7 @@
|
||||||
#include <shlwapi.h>
|
#include <shlwapi.h>
|
||||||
#include <shlguid_undoc.h>
|
#include <shlguid_undoc.h>
|
||||||
#include <wine/debug.h>
|
#include <wine/debug.h>
|
||||||
|
#include <wine/unicode.h>
|
||||||
|
|
||||||
#include "pidl.h"
|
#include "pidl.h"
|
||||||
#include "shell32_main.h"
|
#include "shell32_main.h"
|
||||||
|
@ -69,7 +70,7 @@ static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl);
|
||||||
* RETURNS
|
* RETURNS
|
||||||
* True if the display name could be retrieved successfully, False otherwise
|
* 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;
|
BOOL ret = FALSE;
|
||||||
WCHAR wPath[MAX_PATH];
|
WCHAR wPath[MAX_PATH];
|
||||||
|
@ -86,7 +87,7 @@ static BOOL ILGetDisplayNameExA(IShellFolder * psf, LPCITEMIDLIST pidl, LPSTR pa
|
||||||
return ret;
|
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;
|
LPSHELLFOLDER psfParent, lsf = psf;
|
||||||
HRESULT ret = NO_ERROR;
|
HRESULT ret = NO_ERROR;
|
||||||
|
@ -94,7 +95,7 @@ BOOL WINAPI ILGetDisplayNameExW(IShellFolder * psf, LPCITEMIDLIST pidl, LPWSTR p
|
||||||
STRRET strret;
|
STRRET strret;
|
||||||
DWORD flag;
|
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)
|
if (!pidl || !path)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -156,13 +157,13 @@ BOOL WINAPI ILGetDisplayNameExW(IShellFolder * psf, LPCITEMIDLIST pidl, LPWSTR p
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* ILGetDisplayNameEx [SHELL32.186]
|
* 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);
|
TRACE_(shell)("%p %p %p %d\n", psf, pidl, path, type);
|
||||||
|
|
||||||
if (SHELL_OsIsUnicode())
|
if (SHELL_OsIsUnicode())
|
||||||
return ILGetDisplayNameExW(psf, pidl, (LPWSTR)path, type);
|
return ILGetDisplayNameExW(psf, pidl, path, type);
|
||||||
return ILGetDisplayNameExA(psf, pidl, (LPSTR)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);
|
TRACE_(shell)("%p %p\n", pidl, path);
|
||||||
|
|
||||||
if (SHELL_OsIsUnicode())
|
if (SHELL_OsIsUnicode())
|
||||||
return ILGetDisplayNameExW(NULL, pidl, (LPWSTR)path, ILGDN_FORPARSING);
|
return ILGetDisplayNameExW(NULL, pidl, path, ILGDN_FORPARSING);
|
||||||
return ILGetDisplayNameExA(NULL, pidl, (LPSTR)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);
|
TRACE_(shell)("pidl=%p\n",pidl);
|
||||||
|
|
||||||
if (!pidl || !pidl->mkid.cb)
|
if (!pidl || !pidl->mkid.cb)
|
||||||
return 0;
|
return FALSE;
|
||||||
ILFindLastID(pidl)->mkid.cb = 0;
|
ILFindLastID(pidl)->mkid.cb = 0;
|
||||||
return 1;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
@ -231,7 +232,7 @@ LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
len = ILGetSize(pidl);
|
len = ILGetSize(pidl);
|
||||||
newpidl = (LPITEMIDLIST)SHAlloc(len);
|
newpidl = SHAlloc(len);
|
||||||
if (newpidl)
|
if (newpidl)
|
||||||
memcpy(newpidl,pidl,len);
|
memcpy(newpidl,pidl,len);
|
||||||
|
|
||||||
|
@ -258,7 +259,7 @@ LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
|
||||||
if (pidl)
|
if (pidl)
|
||||||
{
|
{
|
||||||
len = pidl->mkid.cb;
|
len = pidl->mkid.cb;
|
||||||
pidlNew = (LPITEMIDLIST)SHAlloc(len + 2);
|
pidlNew = SHAlloc(len+2);
|
||||||
if (pidlNew)
|
if (pidlNew)
|
||||||
{
|
{
|
||||||
memcpy(pidlNew,pidl,len+2); /* 2 -> mind a desktop pidl */
|
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);
|
TRACE_(shell)("%s %p 0x%08x\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
|
||||||
|
|
||||||
if (SUCCEEDED (SHGetDesktopFolder(&sf)))
|
if (SUCCEEDED (SHGetDesktopFolder(&sf)))
|
||||||
|
{
|
||||||
ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path, &pchEaten, ppidl, attributes);
|
ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path, &pchEaten, ppidl, attributes);
|
||||||
|
IShellFolder_Release(sf);
|
||||||
|
}
|
||||||
return ret;
|
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())
|
if ( SHELL_OsIsUnicode())
|
||||||
return SHILCreateFromPathW ((LPCWSTR)path, ppidl, attributes);
|
return SHILCreateFromPathW (path, ppidl, attributes);
|
||||||
return SHILCreateFromPathA ((LPCSTR)path, ppidl, attributes);
|
return SHILCreateFromPathA (path, ppidl, attributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
@ -460,7 +464,7 @@ LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
len = ILGetSize(pidl);
|
len = ILGetSize(pidl);
|
||||||
newpidl = (LPITEMIDLIST)Alloc(len);
|
newpidl = Alloc(len);
|
||||||
if (newpidl)
|
if (newpidl)
|
||||||
memcpy(newpidl,pidl,len);
|
memcpy(newpidl,pidl,len);
|
||||||
|
|
||||||
|
@ -502,7 +506,7 @@ BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
||||||
_ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
|
_ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
|
||||||
_ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
|
_ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
|
||||||
|
|
||||||
if (strcmp( szData1, szData2 ))
|
if (strcasecmp( szData1, szData2 ))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
pidltemp1 = ILGetNext(pidltemp1);
|
pidltemp1 = ILGetNext(pidltemp1);
|
||||||
|
@ -554,7 +558,7 @@ BOOL WINAPI ILIsParent(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild, BOOL b
|
||||||
_ILSimpleGetText(pParent, szData1, MAX_PATH);
|
_ILSimpleGetText(pParent, szData1, MAX_PATH);
|
||||||
_ILSimpleGetText(pChild, szData2, MAX_PATH);
|
_ILSimpleGetText(pChild, szData2, MAX_PATH);
|
||||||
|
|
||||||
if (strcmp( szData1, szData2 ))
|
if (strcasecmp( szData1, szData2 ))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
pParent = ILGetNext(pParent);
|
pParent = ILGetNext(pParent);
|
||||||
|
@ -621,7 +625,7 @@ LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
||||||
_ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
|
_ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
|
||||||
_ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
|
_ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
|
||||||
|
|
||||||
if (strcmp(szData1, szData2))
|
if (strcasecmp(szData1,szData2))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
pidltemp1 = ILGetNext(pidltemp1);
|
pidltemp1 = ILGetNext(pidltemp1);
|
||||||
|
@ -681,7 +685,7 @@ LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
||||||
|
|
||||||
len1 = ILGetSize(pidl1)-2;
|
len1 = ILGetSize(pidl1)-2;
|
||||||
len2 = ILGetSize(pidl2);
|
len2 = ILGetSize(pidl2);
|
||||||
pidlNew = (LPITEMIDLIST)SHAlloc(len1 + len2);
|
pidlNew = SHAlloc(len1+len2);
|
||||||
|
|
||||||
if (pidlNew)
|
if (pidlNew)
|
||||||
{
|
{
|
||||||
|
@ -698,7 +702,7 @@ LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
*/
|
*/
|
||||||
HRESULT WINAPI SHGetRealIDL(IShellFolder * lpsf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST *pidlReal)
|
HRESULT WINAPI SHGetRealIDL(LPSHELLFOLDER lpsf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST *pidlReal)
|
||||||
{
|
{
|
||||||
IDataObject* pDataObj;
|
IDataObject* pDataObj;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
@ -710,7 +714,7 @@ HRESULT WINAPI SHGetRealIDL(IShellFolder * lpsf, LPCITEMIDLIST pidlSimple, LPITE
|
||||||
STGMEDIUM medium;
|
STGMEDIUM medium;
|
||||||
FORMATETC fmt;
|
FORMATETC fmt;
|
||||||
|
|
||||||
fmt.cfFormat = RegisterClipboardFormatW(CFSTR_SHELLIDLIST);
|
fmt.cfFormat = RegisterClipboardFormatW(CFSTR_SHELLIDLISTW);
|
||||||
fmt.ptd = NULL;
|
fmt.ptd = NULL;
|
||||||
fmt.dwAspect = DVASPECT_CONTENT;
|
fmt.dwAspect = DVASPECT_CONTENT;
|
||||||
fmt.lindex = -1;
|
fmt.lindex = -1;
|
||||||
|
@ -718,10 +722,12 @@ HRESULT WINAPI SHGetRealIDL(IShellFolder * lpsf, LPCITEMIDLIST pidlSimple, LPITE
|
||||||
|
|
||||||
hr = IDataObject_GetData(pDataObj, &fmt, &medium);
|
hr = IDataObject_GetData(pDataObj, &fmt, &medium);
|
||||||
|
|
||||||
|
IDataObject_Release(pDataObj);
|
||||||
|
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
/*assert(pida->cidl==1);*/
|
/*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_folder = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]);
|
||||||
LPCITEMIDLIST pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[1]);
|
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_DESKTOP ret = 0
|
||||||
* pild = CSIDL_DRIVES ret = 0
|
* pild = CSIDL_DRIVES ret = 0
|
||||||
*/
|
*/
|
||||||
EXTERN_C LPITEMIDLIST WINAPI SHLogILFromFSIL(LPITEMIDLIST pidl)
|
LPITEMIDLIST WINAPI SHLogILFromFSIL(LPITEMIDLIST pidl)
|
||||||
{
|
{
|
||||||
FIXME("(pidl=%p)\n",pidl);
|
FIXME("(pidl=%p)\n",pidl);
|
||||||
|
|
||||||
|
@ -839,7 +845,7 @@ LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
|
||||||
* NOTES
|
* NOTES
|
||||||
* Destroys the passed in idlist! (???)
|
* 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;
|
LPITEMIDLIST idlRet;
|
||||||
|
|
||||||
|
@ -949,11 +955,11 @@ LPITEMIDLIST WINAPI ILCreateFromPathW (LPCWSTR path)
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* ILCreateFromPath [SHELL32.157]
|
* ILCreateFromPath [SHELL32.157]
|
||||||
*/
|
*/
|
||||||
EXTERN_C LPITEMIDLIST WINAPI ILCreateFromPathAW (LPCVOID path)
|
LPITEMIDLIST WINAPI ILCreateFromPathAW (LPCVOID path)
|
||||||
{
|
{
|
||||||
if ( SHELL_OsIsUnicode())
|
if ( SHELL_OsIsUnicode())
|
||||||
return ILCreateFromPathW ((LPCWSTR)path);
|
return ILCreateFromPathW (path);
|
||||||
return ILCreateFromPathA ((LPCSTR)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);
|
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)
|
if (FAILED(ret) && ppidl)
|
||||||
*ppidl = NULL;
|
*ppidl = NULL;
|
||||||
|
|
||||||
|
@ -1045,7 +1059,7 @@ LPITEMIDLIST WINAPI SHSimpleIDListFromPathA(LPCSTR lpszPath)
|
||||||
if (lpszPath)
|
if (lpszPath)
|
||||||
{
|
{
|
||||||
len = MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, NULL, 0);
|
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);
|
MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, wPath, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1067,11 +1081,11 @@ LPITEMIDLIST WINAPI SHSimpleIDListFromPathW(LPCWSTR lpszPath)
|
||||||
return pidl;
|
return pidl;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXTERN_C LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW(LPCVOID lpszPath)
|
LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW(LPCVOID lpszPath)
|
||||||
{
|
{
|
||||||
if ( SHELL_OsIsUnicode())
|
if ( SHELL_OsIsUnicode())
|
||||||
return SHSimpleIDListFromPathW ((LPCWSTR)lpszPath);
|
return SHSimpleIDListFromPathW (lpszPath);
|
||||||
return SHSimpleIDListFromPathA ((LPCSTR)lpszPath);
|
return SHSimpleIDListFromPathA (lpszPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
@ -1139,7 +1153,7 @@ HRESULT WINAPI SHGetDataFromIDListA(IShellFolder * psf, LPCITEMIDLIST pidl,
|
||||||
* SHGetDataFromIDListW [SHELL32.248]
|
* SHGetDataFromIDListW [SHELL32.248]
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
HRESULT WINAPI SHGetDataFromIDListW(IShellFolder * psf, LPCITEMIDLIST pidl,
|
HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
|
||||||
int nFormat, LPVOID dest, int len)
|
int nFormat, LPVOID dest, int len)
|
||||||
{
|
{
|
||||||
LPSTR filename, shortname;
|
LPSTR filename, shortname;
|
||||||
|
@ -1252,10 +1266,12 @@ BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
|
||||||
if (FAILED(hr) || !(dwAttributes & SFGAO_FILESYSTEM))
|
if (FAILED(hr) || !(dwAttributes & SFGAO_FILESYSTEM))
|
||||||
{
|
{
|
||||||
WARN("Wrong dwAttributes or GetAttributesOf failed: %x\n", hr);
|
WARN("Wrong dwAttributes or GetAttributesOf failed: %x\n", hr);
|
||||||
|
IShellFolder_Release(psfFolder);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = IShellFolder_GetDisplayNameOf(psfFolder, pidlLast, SHGDN_FORPARSING, &strret);
|
hr = IShellFolder_GetDisplayNameOf(psfFolder, pidlLast, SHGDN_FORPARSING, &strret);
|
||||||
|
IShellFolder_Release(psfFolder);
|
||||||
if (FAILED(hr)) return FALSE;
|
if (FAILED(hr)) return FALSE;
|
||||||
|
|
||||||
hr = StrRetToBufW(&strret, pidlLast, pszPath, MAX_PATH);
|
hr = StrRetToBufW(&strret, pidlLast, pszPath, MAX_PATH);
|
||||||
|
@ -1299,6 +1315,8 @@ HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCI
|
||||||
SHFree (pidlParent);
|
SHFree (pidlParent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IShellFolder_Release(psfDesktop);
|
||||||
|
|
||||||
if (SUCCEEDED(hr) && ppidlLast)
|
if (SUCCEEDED(hr) && ppidlLast)
|
||||||
*ppidlLast = ILFindLastID(pidl);
|
*ppidlLast = ILFindLastID(pidl);
|
||||||
|
|
||||||
|
@ -1325,7 +1343,7 @@ static LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size)
|
||||||
{
|
{
|
||||||
LPITEMIDLIST pidlOut = NULL;
|
LPITEMIDLIST pidlOut = NULL;
|
||||||
|
|
||||||
pidlOut = (LPITEMIDLIST)SHAlloc(size + 5);
|
pidlOut = SHAlloc(size + 5);
|
||||||
if(pidlOut)
|
if(pidlOut)
|
||||||
{
|
{
|
||||||
LPPIDLDATA pData;
|
LPPIDLDATA pData;
|
||||||
|
@ -1352,7 +1370,7 @@ LPITEMIDLIST _ILCreateDesktop(void)
|
||||||
LPITEMIDLIST ret;
|
LPITEMIDLIST ret;
|
||||||
|
|
||||||
TRACE("()\n");
|
TRACE("()\n");
|
||||||
ret = (LPITEMIDLIST)SHAlloc(2);
|
ret = SHAlloc(2);
|
||||||
if (ret)
|
if (ret)
|
||||||
ret->mkid.cb = 0;
|
ret->mkid.cb = 0;
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1472,7 +1490,7 @@ LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID)
|
||||||
{
|
{
|
||||||
IID iid;
|
IID iid;
|
||||||
|
|
||||||
if (FAILED(CLSIDFromString((LPOLESTR)szGUID, &iid)))
|
if (FAILED(SHCLSIDFromStringW(szGUID, &iid)))
|
||||||
{
|
{
|
||||||
ERR("%s is not a GUID\n", debugstr_w(szGUID));
|
ERR("%s is not a GUID\n", debugstr_w(szGUID));
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1483,7 +1501,7 @@ LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID)
|
||||||
LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
|
LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
|
||||||
{
|
{
|
||||||
char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
|
char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
|
||||||
DWORD len, len1, wlen, alen, cbData;
|
DWORD len, len1, wlen, alen;
|
||||||
LPITEMIDLIST pidl;
|
LPITEMIDLIST pidl;
|
||||||
PIDLTYPE type;
|
PIDLTYPE type;
|
||||||
|
|
||||||
|
@ -1499,11 +1517,9 @@ LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
|
||||||
|
|
||||||
type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
|
type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
|
||||||
|
|
||||||
wlen = wcslen(wfd->cFileName) + 1;
|
wlen = lstrlenW(wfd->cFileName) + 1;
|
||||||
cbData = sizeof(FileStruct) - 1 + (alen + (alen & 1)); // Note: szNames field is initially 1 byte long
|
pidl = _ILAlloc(type, FIELD_OFFSET(FileStruct, szNames[alen + (alen & 1)]) +
|
||||||
cbData += sizeof(FileStructW) - 1 + wlen * sizeof(WCHAR); // Note: wszName field is initially 1 byte long
|
FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD));
|
||||||
cbData += sizeof(WORD); // offset to FileStructW
|
|
||||||
pidl = _ILAlloc(type, cbData);
|
|
||||||
if (pidl)
|
if (pidl)
|
||||||
{
|
{
|
||||||
LPPIDLDATA pData = _ILGetDataPointer(pidl);
|
LPPIDLDATA pData = _ILGetDataPointer(pidl);
|
||||||
|
@ -1517,7 +1533,7 @@ LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
|
||||||
memcpy(fs->szNames, buff, alen);
|
memcpy(fs->szNames, buff, alen);
|
||||||
|
|
||||||
fsw = (FileStructW*)(pData->u.file.szNames + alen + (alen & 0x1));
|
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->ftCreationTime, &fsw->uCreationDate, &fsw->uCreationTime);
|
||||||
FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime);
|
FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime);
|
||||||
memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR));
|
memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR));
|
||||||
|
@ -1564,7 +1580,7 @@ LPITEMIDLIST _ILCreateDrive(LPCWSTR lpszNew)
|
||||||
if (pszDest)
|
if (pszDest)
|
||||||
{
|
{
|
||||||
strcpy(pszDest, "x:\\");
|
strcpy(pszDest, "x:\\");
|
||||||
pszDest[0] = towupper(lpszNew[0]);
|
pszDest[0]=toupperW(lpszNew[0]);
|
||||||
TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
|
TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1668,7 +1684,7 @@ LPITEMIDLIST _ILCreateFont(void)
|
||||||
|
|
||||||
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
|
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
|
||||||
{
|
{
|
||||||
IID *iid = _ILGetGUIDPointer(pidl);
|
REFIID iid = _ILGetGUIDPointer(pidl);
|
||||||
|
|
||||||
TRACE("(%p)\n",pidl);
|
TRACE("(%p)\n",pidl);
|
||||||
|
|
||||||
|
@ -1874,7 +1890,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
|
||||||
|
|
||||||
if (pFileStructW) {
|
if (pFileStructW) {
|
||||||
lstrcpynW(szOut, pFileStructW->wszName, uOutSize);
|
lstrcpynW(szOut, pFileStructW->wszName, uOutSize);
|
||||||
dwReturn = wcslen(pFileStructW->wszName);
|
dwReturn = lstrlenW(pFileStructW->wszName);
|
||||||
} else {
|
} else {
|
||||||
GUID const * riid;
|
GUID const * riid;
|
||||||
WCHAR szTemp[MAX_PATH];
|
WCHAR szTemp[MAX_PATH];
|
||||||
|
@ -1896,7 +1912,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
|
||||||
if (szOut)
|
if (szOut)
|
||||||
lstrcpynW(szOut, szTemp, uOutSize);
|
lstrcpynW(szOut, szTemp, uOutSize);
|
||||||
|
|
||||||
dwReturn = wcslen (szTemp);
|
dwReturn = lstrlenW (szTemp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (( szSrcW = _ILGetTextPointerW(pidl) ))
|
else if (( szSrcW = _ILGetTextPointerW(pidl) ))
|
||||||
|
@ -1905,7 +1921,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
|
||||||
if (szOut)
|
if (szOut)
|
||||||
lstrcpynW(szOut, szSrcW, uOutSize);
|
lstrcpynW(szOut, szSrcW, uOutSize);
|
||||||
|
|
||||||
dwReturn = wcslen(szSrcW);
|
dwReturn = lstrlenW(szSrcW);
|
||||||
}
|
}
|
||||||
else if (( szSrc = _ILGetTextPointer(pidl) ))
|
else if (( szSrc = _ILGetTextPointer(pidl) ))
|
||||||
{
|
{
|
||||||
|
@ -1915,7 +1931,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
|
||||||
if (szOut)
|
if (szOut)
|
||||||
lstrcpynW(szOut, szTemp, uOutSize);
|
lstrcpynW(szOut, szTemp, uOutSize);
|
||||||
|
|
||||||
dwReturn = wcslen (szTemp);
|
dwReturn = lstrlenW (szTemp);
|
||||||
}
|
}
|
||||||
else if (( riid = _ILGetGUIDPointer(pidl) ))
|
else if (( riid = _ILGetGUIDPointer(pidl) ))
|
||||||
{
|
{
|
||||||
|
@ -1925,7 +1941,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
|
||||||
if (szOut)
|
if (szOut)
|
||||||
lstrcpynW(szOut, szTemp, uOutSize);
|
lstrcpynW(szOut, szTemp, uOutSize);
|
||||||
|
|
||||||
dwReturn = wcslen (szTemp);
|
dwReturn = lstrlenW (szTemp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
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
|
/* 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
|
* 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. */
|
* 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 */
|
/* FileStructW is positioned after FileStruct */
|
||||||
cbOffset < sizeof(pidl->mkid.cb) + sizeof(PIDLTYPE) + sizeof(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 */
|
/* There has to be enough space at cbOffset in the pidl to hold FileStructW and cbOffset */
|
||||||
cbOffset > pidl->mkid.cb - sizeof(cbOffset) - sizeof(FileStructW) ||
|
cbOffset > pidl->mkid.cb - sizeof(cbOffset) - sizeof(FileStructW) ||
|
||||||
pidl->mkid.cb != cbOffset + pFileStructW->cbLen)
|
pidl->mkid.cb != cbOffset + pFileStructW->cbLen)
|
||||||
{
|
{
|
||||||
ERR("Invalid pidl format (cbOffset = %d)!\n", cbOffset);
|
WARN("Invalid pidl format (cbOffset = %d)!\n", cbOffset);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2407,10 +2423,11 @@ LPITEMIDLIST* _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl)
|
||||||
UINT i;
|
UINT i;
|
||||||
LPITEMIDLIST *apidldest;
|
LPITEMIDLIST *apidldest;
|
||||||
|
|
||||||
apidldest = (LPITEMIDLIST *)SHAlloc(cidl * sizeof(LPITEMIDLIST));
|
|
||||||
if (!apidlsrc)
|
if (!apidlsrc)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
apidldest = SHAlloc(cidl * sizeof(LPITEMIDLIST));
|
||||||
|
|
||||||
for (i = 0; i < cidl; i++)
|
for (i = 0; i < cidl; i++)
|
||||||
apidldest[i] = ILClone(apidlsrc[i]);
|
apidldest[i] = ILClone(apidlsrc[i]);
|
||||||
|
|
||||||
|
@ -2427,7 +2444,7 @@ LPITEMIDLIST* _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida)
|
||||||
UINT i;
|
UINT i;
|
||||||
LPITEMIDLIST *dst;
|
LPITEMIDLIST *dst;
|
||||||
|
|
||||||
dst = (LPITEMIDLIST *)SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
|
dst = SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
|
||||||
if (!dst)
|
if (!dst)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -94,13 +94,13 @@ extern "C" {
|
||||||
#define PT_FOLDER 0x31
|
#define PT_FOLDER 0x31
|
||||||
#define PT_VALUE 0x32
|
#define PT_VALUE 0x32
|
||||||
#define PT_VALUEW 0x34
|
#define PT_VALUEW 0x34
|
||||||
|
#define PT_FOLDERW 0x35
|
||||||
#define PT_WORKGRP 0x41
|
#define PT_WORKGRP 0x41
|
||||||
#define PT_COMP 0x42
|
#define PT_COMP 0x42
|
||||||
#define PT_NETPROVIDER 0x46
|
#define PT_NETPROVIDER 0x46
|
||||||
#define PT_NETWORK 0x47
|
#define PT_NETWORK 0x47
|
||||||
#define PT_IESPECIAL1 0x61
|
#define PT_IESPECIAL1 0x61
|
||||||
#define PT_YAGUID 0x70 /* yet another guid.. */
|
#define PT_YAGUID 0x70 /* yet another guid.. */
|
||||||
#define PT_CPEXT 0x71
|
|
||||||
#define PT_IESPECIAL2 0xb1
|
#define PT_IESPECIAL2 0xb1
|
||||||
#define PT_SHARE 0xc3
|
#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 */
|
CHAR szName[1]; /*10*/ /* terminated by 0x00, followed by display name and comment string */
|
||||||
} PIDLCPanelStruct;
|
} PIDLCPanelStruct;
|
||||||
|
|
||||||
|
#ifdef __REACTOS__
|
||||||
|
|
||||||
typedef struct tagPIDLFontStruct
|
typedef struct tagPIDLFontStruct
|
||||||
{
|
{
|
||||||
BYTE dummy;
|
BYTE dummy;
|
||||||
|
@ -141,6 +143,8 @@ typedef struct tagPIDLRecycleStruct
|
||||||
WCHAR szName[1];
|
WCHAR szName[1];
|
||||||
} PIDLRecycleStruct;
|
} PIDLRecycleStruct;
|
||||||
|
|
||||||
|
#endif /* !__REACTOS__ */
|
||||||
|
|
||||||
typedef struct tagGUIDStruct
|
typedef struct tagGUIDStruct
|
||||||
{
|
{
|
||||||
BYTE dummy; /* offset 01 is unknown */
|
BYTE dummy; /* offset 01 is unknown */
|
||||||
|
@ -202,9 +206,11 @@ typedef struct tagPIDLDATA
|
||||||
} htmlhelp;
|
} htmlhelp;
|
||||||
struct tagPIDLCPanelStruct cpanel;
|
struct tagPIDLCPanelStruct cpanel;
|
||||||
struct tagValueW valueW;
|
struct tagValueW valueW;
|
||||||
struct tagPIDLFontStruct cfont;
|
#ifdef __REACTOS__
|
||||||
struct tagPIDLPrinterStruct cprinter;
|
struct tagPIDLFontStruct cfont;
|
||||||
struct tagPIDLRecycleStruct crecycle;
|
struct tagPIDLPrinterStruct cprinter;
|
||||||
|
struct tagPIDLRecycleStruct crecycle;
|
||||||
|
#endif
|
||||||
}u;
|
}u;
|
||||||
} PIDLDATA, *LPPIDLDATA;
|
} PIDLDATA, *LPPIDLDATA;
|
||||||
#include "poppack.h"
|
#include "poppack.h"
|
||||||
|
@ -212,42 +218,44 @@ typedef struct tagPIDLDATA
|
||||||
/*
|
/*
|
||||||
* getting special values from simple pidls
|
* getting special values from simple pidls
|
||||||
*/
|
*/
|
||||||
DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||||
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize);
|
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||||
BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||||
DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||||
BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||||
void _ILGetFileType (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
void _ILGetFileType (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||||
DWORD _ILGetFileAttributes (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
DWORD _ILGetFileAttributes (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft);
|
BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft) DECLSPEC_HIDDEN;
|
||||||
DWORD _ILGetDrive (LPCITEMIDLIST, LPSTR, UINT);
|
DWORD _ILGetDrive (LPCITEMIDLIST, LPSTR, UINT) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* testing simple pidls
|
* testing simple pidls
|
||||||
*/
|
*/
|
||||||
BOOL _ILIsUnicode (LPCITEMIDLIST pidl);
|
BOOL _ILIsUnicode (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
BOOL _ILIsDesktop (LPCITEMIDLIST pidl);
|
BOOL _ILIsDesktop (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl);
|
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
BOOL _ILIsPrinter (LPCITEMIDLIST pidl);
|
#ifdef __REACTOS__
|
||||||
BOOL _ILIsMyDocuments (LPCITEMIDLIST pidl);
|
BOOL _ILIsPrinter (LPCITEMIDLIST pidl);
|
||||||
BOOL _ILIsControlPanel (LPCITEMIDLIST pidl);
|
BOOL _ILIsMyDocuments (LPCITEMIDLIST pidl);
|
||||||
BOOL _ILIsBitBucket (LPCITEMIDLIST pidl);
|
BOOL _ILIsControlPanel (LPCITEMIDLIST pidl);
|
||||||
BOOL _ILIsAdminTools (LPCITEMIDLIST pidl);
|
BOOL _ILIsBitBucket (LPCITEMIDLIST pidl);
|
||||||
BOOL _ILIsNetHood (LPCITEMIDLIST pidl);
|
BOOL _ILIsAdminTools (LPCITEMIDLIST pidl);
|
||||||
BOOL _ILIsDrive (LPCITEMIDLIST pidl);
|
BOOL _ILIsNetHood (LPCITEMIDLIST pidl);
|
||||||
BOOL _ILIsFolder (LPCITEMIDLIST pidl);
|
#endif
|
||||||
BOOL _ILIsValue (LPCITEMIDLIST pidl);
|
BOOL _ILIsDrive (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl);
|
BOOL _ILIsFolder (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
BOOL _ILIsPidlSimple (LPCITEMIDLIST pidl);
|
BOOL _ILIsValue (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
BOOL _ILIsCPanelStruct (LPCITEMIDLIST pidl);
|
BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
static __inline
|
BOOL _ILIsPidlSimple (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
|
BOOL _ILIsCPanelStruct (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
|
static inline
|
||||||
BOOL _ILIsEqualSimple (LPCITEMIDLIST pidlA, LPCITEMIDLIST pidlB)
|
BOOL _ILIsEqualSimple (LPCITEMIDLIST pidlA, LPCITEMIDLIST pidlB)
|
||||||
{
|
{
|
||||||
return (pidlA->mkid.cb > 0 && !memcmp(pidlA, pidlB, pidlA->mkid.cb)) ||
|
return (pidlA->mkid.cb > 0 && !memcmp(pidlA, pidlB, pidlA->mkid.cb)) ||
|
||||||
(!pidlA->mkid.cb && !pidlB->mkid.cb);
|
(!pidlA->mkid.cb && !pidlB->mkid.cb);
|
||||||
}
|
}
|
||||||
static __inline
|
static inline
|
||||||
BOOL _ILIsEmpty (LPCITEMIDLIST pidl) { return _ILIsDesktop(pidl); }
|
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,
|
/* Creates a PIDL with guid format and type type, which must be one of PT_GUID,
|
||||||
* PT_SHELLEXT, or PT_YAGUID.
|
* 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. */
|
/* Like _ILCreateGuid, but using the string szGUID. */
|
||||||
LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID);
|
LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID) DECLSPEC_HIDDEN;
|
||||||
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID);
|
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/* Commonly used PIDLs representing file system objects. */
|
/* Commonly used PIDLs representing file system objects. */
|
||||||
LPITEMIDLIST _ILCreateDesktop (void);
|
LPITEMIDLIST _ILCreateDesktop (void) DECLSPEC_HIDDEN;
|
||||||
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *stffile);
|
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *stffile) DECLSPEC_HIDDEN;
|
||||||
HRESULT _ILCreateFromPathW (LPCWSTR szPath, LPITEMIDLIST* ppidl);
|
HRESULT _ILCreateFromPathW (LPCWSTR szPath, LPITEMIDLIST* ppidl) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/* Other helpers */
|
/* Other helpers */
|
||||||
LPITEMIDLIST _ILCreateMyComputer (void);
|
LPITEMIDLIST _ILCreateMyComputer (void) DECLSPEC_HIDDEN;
|
||||||
LPITEMIDLIST _ILCreateMyDocuments (void);
|
LPITEMIDLIST _ILCreateMyDocuments (void) DECLSPEC_HIDDEN;
|
||||||
LPITEMIDLIST _ILCreateIExplore (void);
|
LPITEMIDLIST _ILCreateIExplore (void) DECLSPEC_HIDDEN;
|
||||||
LPITEMIDLIST _ILCreateControlPanel (void);
|
LPITEMIDLIST _ILCreateControlPanel (void) DECLSPEC_HIDDEN;
|
||||||
LPITEMIDLIST _ILCreatePrinters (void);
|
LPITEMIDLIST _ILCreatePrinters (void) DECLSPEC_HIDDEN;
|
||||||
LPITEMIDLIST _ILCreateNetwork (void);
|
LPITEMIDLIST _ILCreateNetwork (void) DECLSPEC_HIDDEN;
|
||||||
LPITEMIDLIST _ILCreateNetHood (void);
|
LPITEMIDLIST _ILCreateNetHood (void) DECLSPEC_HIDDEN;
|
||||||
LPITEMIDLIST _ILCreateAdminTools (void);
|
#ifdef __REACTOS__
|
||||||
LPITEMIDLIST _ILCreateFont (void);
|
LPITEMIDLIST _ILCreateAdminTools (void);
|
||||||
LPITEMIDLIST _ILCreateBitBucket (void);
|
LPITEMIDLIST _ILCreateFont (void);
|
||||||
LPITEMIDLIST _ILCreateDrive (LPCWSTR);
|
#endif
|
||||||
|
LPITEMIDLIST _ILCreateBitBucket (void) DECLSPEC_HIDDEN;
|
||||||
|
LPITEMIDLIST _ILCreateDrive (LPCWSTR) DECLSPEC_HIDDEN;
|
||||||
|
LPITEMIDLIST _ILCreateEntireNetwork (void) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* helper functions (getting struct-pointer)
|
* helper functions (getting struct-pointer)
|
||||||
*/
|
*/
|
||||||
LPPIDLDATA _ILGetDataPointer (LPCITEMIDLIST);
|
LPPIDLDATA _ILGetDataPointer (LPCITEMIDLIST) DECLSPEC_HIDDEN;
|
||||||
LPSTR _ILGetTextPointer (LPCITEMIDLIST);
|
LPSTR _ILGetTextPointer (LPCITEMIDLIST) DECLSPEC_HIDDEN;
|
||||||
IID *_ILGetGUIDPointer (LPCITEMIDLIST pidl);
|
IID *_ILGetGUIDPointer (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
FileStructW *_ILGetFileStructW (LPCITEMIDLIST pidl);
|
FileStructW *_ILGetFileStructW (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* debug helper
|
* debug helper
|
||||||
*/
|
*/
|
||||||
void pdump (LPCITEMIDLIST pidl);
|
void pdump (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
BOOL pcheck (LPCITEMIDLIST pidl);
|
BOOL pcheck (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* aPidl helper
|
* aPidl helper
|
||||||
*/
|
*/
|
||||||
void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl);
|
void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl) DECLSPEC_HIDDEN;
|
||||||
LPITEMIDLIST * _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl);
|
LPITEMIDLIST * _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl) DECLSPEC_HIDDEN;
|
||||||
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida);
|
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
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue