shell32: Update the debug functions to handle Unicode value pidl.
Add _ILIsUnicode as a simple pidl test.
This commit is contained in:
parent
3533be811c
commit
c0db9e573e
|
@ -103,6 +103,51 @@ LPSTR _dbg_ILGetTextPointer(LPCITEMIDLIST pidl)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
LPWSTR _dbg_ILGetTextPointerW(LPCITEMIDLIST pidl)
|
||||||
|
{
|
||||||
|
LPPIDLDATA pdata =_dbg_ILGetDataPointer(pidl);
|
||||||
|
|
||||||
|
if (pdata)
|
||||||
|
{
|
||||||
|
switch (pdata->type)
|
||||||
|
{
|
||||||
|
case PT_GUID:
|
||||||
|
case PT_SHELLEXT:
|
||||||
|
case PT_YAGUID:
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
case PT_DRIVE:
|
||||||
|
case PT_DRIVE1:
|
||||||
|
case PT_DRIVE2:
|
||||||
|
case PT_DRIVE3:
|
||||||
|
/* return (LPSTR)&(pdata->u.drive.szDriveName);*/
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
case PT_FOLDER:
|
||||||
|
case PT_FOLDER1:
|
||||||
|
case PT_VALUE:
|
||||||
|
case PT_IESPECIAL1:
|
||||||
|
case PT_IESPECIAL2:
|
||||||
|
/* return (LPSTR)&(pdata->u.file.szNames); */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
case PT_WORKGRP:
|
||||||
|
case PT_COMP:
|
||||||
|
case PT_NETWORK:
|
||||||
|
case PT_NETPROVIDER:
|
||||||
|
case PT_SHARE:
|
||||||
|
/* return (LPSTR)&(pdata->u.network.szNames); */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
case PT_VALUEW:
|
||||||
|
return (LPWSTR)&(pdata->u.file.szNames);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
LPSTR _dbg_ILGetSTextPointer(LPCITEMIDLIST pidl)
|
LPSTR _dbg_ILGetSTextPointer(LPCITEMIDLIST pidl)
|
||||||
{
|
{
|
||||||
|
@ -125,6 +170,34 @@ LPSTR _dbg_ILGetSTextPointer(LPCITEMIDLIST pidl)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
LPWSTR _dbg_ILGetSTextPointerW(LPCITEMIDLIST pidl)
|
||||||
|
{
|
||||||
|
LPPIDLDATA pdata =_dbg_ILGetDataPointer(pidl);
|
||||||
|
|
||||||
|
if (pdata)
|
||||||
|
{
|
||||||
|
switch (pdata->type)
|
||||||
|
{
|
||||||
|
case PT_FOLDER:
|
||||||
|
case PT_VALUE:
|
||||||
|
case PT_IESPECIAL1:
|
||||||
|
case PT_IESPECIAL2:
|
||||||
|
/*return (LPSTR)(pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1); */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
case PT_WORKGRP:
|
||||||
|
/* return (LPSTR)(pdata->u.network.szNames + strlen (pdata->u.network.szNames) + 1); */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
case PT_VALUEW:
|
||||||
|
return (LPWSTR)(pdata->u.file.szNames + lstrlenW ((LPWSTR)pdata->u.file.szNames) + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
IID* _dbg_ILGetGUIDPointer(LPCITEMIDLIST pidl)
|
IID* _dbg_ILGetGUIDPointer(LPCITEMIDLIST pidl)
|
||||||
{
|
{
|
||||||
|
@ -147,6 +220,7 @@ static
|
||||||
void _dbg_ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
|
void _dbg_ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
|
||||||
{
|
{
|
||||||
LPSTR szSrc;
|
LPSTR szSrc;
|
||||||
|
LPWSTR szSrcW;
|
||||||
GUID const * riid;
|
GUID const * riid;
|
||||||
|
|
||||||
if (!pidl) return;
|
if (!pidl) return;
|
||||||
|
@ -164,6 +238,13 @@ void _dbg_ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
|
||||||
/* filesystem */
|
/* filesystem */
|
||||||
if (szOut) lstrcpynA(szOut, szSrc, uOutSize);
|
if (szOut) lstrcpynA(szOut, szSrc, uOutSize);
|
||||||
}
|
}
|
||||||
|
else if (( szSrcW = _dbg_ILGetTextPointerW(pidl) ))
|
||||||
|
{
|
||||||
|
CHAR tmp[MAX_PATH];
|
||||||
|
/* unicode filesystem */
|
||||||
|
WideCharToMultiByte(CP_ACP,0,szSrcW, -1, tmp, MAX_PATH, NULL, NULL);
|
||||||
|
if (szOut) lstrcpynA(szOut, tmp, uOutSize);
|
||||||
|
}
|
||||||
else if (( riid = _dbg_ILGetGUIDPointer(pidl) ))
|
else if (( riid = _dbg_ILGetGUIDPointer(pidl) ))
|
||||||
{
|
{
|
||||||
if (szOut)
|
if (szOut)
|
||||||
|
@ -194,20 +275,40 @@ void pdump (LPCITEMIDLIST pidl)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
DWORD dwAttrib = 0;
|
if (_ILIsUnicode(pidltemp))
|
||||||
LPPIDLDATA pData = _dbg_ILGetDataPointer(pidltemp);
|
{
|
||||||
DWORD type = pData ? pData->type : 0;
|
DWORD dwAttrib = 0;
|
||||||
LPSTR szLongName = _dbg_ILGetTextPointer(pidltemp);
|
LPPIDLDATA pData = _dbg_ILGetDataPointer(pidltemp);
|
||||||
LPSTR szShortName = _dbg_ILGetSTextPointer(pidltemp);
|
DWORD type = pData ? pData->type : 0;
|
||||||
char szName[MAX_PATH];
|
LPWSTR szLongName = _dbg_ILGetTextPointerW(pidltemp);
|
||||||
|
LPWSTR szShortName = _dbg_ILGetSTextPointerW(pidltemp);
|
||||||
|
char szName[MAX_PATH];
|
||||||
|
|
||||||
_dbg_ILSimpleGetText(pidltemp, szName, MAX_PATH);
|
_dbg_ILSimpleGetText(pidltemp, szName, MAX_PATH);
|
||||||
if ( pData && (PT_FOLDER == type || PT_VALUE == type) )
|
if ( pData && (PT_FOLDER == type || PT_VALUE == type) )
|
||||||
dwAttrib = pData->u.file.uFileAttribs;
|
dwAttrib = pData->u.file.uFileAttribs;
|
||||||
|
|
||||||
MESSAGE ("[%p] size=%04u type=%x attr=0x%08x name=%s (%s,%s)\n",
|
MESSAGE ("[%p] size=%04u type=%x attr=0x%08x name=%s (%s,%s)\n",
|
||||||
pidltemp, pidltemp->mkid.cb, type, dwAttrib,
|
pidltemp, pidltemp->mkid.cb, type, dwAttrib,
|
||||||
debugstr_a(szName), debugstr_a(szLongName), debugstr_a(szShortName));
|
debugstr_a(szName), debugstr_w(szLongName), debugstr_w(szShortName));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DWORD dwAttrib = 0;
|
||||||
|
LPPIDLDATA pData = _dbg_ILGetDataPointer(pidltemp);
|
||||||
|
DWORD type = pData ? pData->type : 0;
|
||||||
|
LPSTR szLongName = _dbg_ILGetTextPointer(pidltemp);
|
||||||
|
LPSTR szShortName = _dbg_ILGetSTextPointer(pidltemp);
|
||||||
|
char szName[MAX_PATH];
|
||||||
|
|
||||||
|
_dbg_ILSimpleGetText(pidltemp, szName, MAX_PATH);
|
||||||
|
if ( pData && (PT_FOLDER == type || PT_VALUE == type) )
|
||||||
|
dwAttrib = pData->u.file.uFileAttribs;
|
||||||
|
|
||||||
|
MESSAGE ("[%p] size=%04u type=%x attr=0x%08x name=%s (%s,%s)\n",
|
||||||
|
pidltemp, pidltemp->mkid.cb, type, dwAttrib,
|
||||||
|
debugstr_a(szName), debugstr_a(szLongName), debugstr_a(szShortName));
|
||||||
|
}
|
||||||
|
|
||||||
pidltemp = _dbg_ILGetNext(pidltemp);
|
pidltemp = _dbg_ILGetNext(pidltemp);
|
||||||
|
|
||||||
|
|
|
@ -1642,6 +1642,7 @@ DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT uSize)
|
||||||
* ### 2. section testing pidls ###
|
* ### 2. section testing pidls ###
|
||||||
*
|
*
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
|
* _ILIsUnicode()
|
||||||
* _ILIsDesktop()
|
* _ILIsDesktop()
|
||||||
* _ILIsMyComputer()
|
* _ILIsMyComputer()
|
||||||
* _ILIsSpecialFolder()
|
* _ILIsSpecialFolder()
|
||||||
|
@ -1650,6 +1651,15 @@ DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT uSize)
|
||||||
* _ILIsValue()
|
* _ILIsValue()
|
||||||
* _ILIsPidlSimple()
|
* _ILIsPidlSimple()
|
||||||
*/
|
*/
|
||||||
|
BOOL _ILIsUnicode(LPCITEMIDLIST pidl)
|
||||||
|
{
|
||||||
|
LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
|
||||||
|
|
||||||
|
TRACE("(%p)\n",pidl);
|
||||||
|
|
||||||
|
return (pidl && lpPData && PT_VALUEW == lpPData->type);
|
||||||
|
}
|
||||||
|
|
||||||
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
|
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
|
||||||
{
|
{
|
||||||
TRACE("(%p)\n",pidl);
|
TRACE("(%p)\n",pidl);
|
||||||
|
|
|
@ -201,6 +201,7 @@ DWORD _ILGetDrive (LPCITEMIDLIST, LPSTR, UINT);
|
||||||
/*
|
/*
|
||||||
* testing simple pidls
|
* testing simple pidls
|
||||||
*/
|
*/
|
||||||
|
BOOL _ILIsUnicode (LPCITEMIDLIST pidl);
|
||||||
BOOL _ILIsDesktop (LPCITEMIDLIST pidl);
|
BOOL _ILIsDesktop (LPCITEMIDLIST pidl);
|
||||||
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl);
|
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl);
|
||||||
BOOL _ILIsDrive (LPCITEMIDLIST pidl);
|
BOOL _ILIsDrive (LPCITEMIDLIST pidl);
|
||||||
|
|
Loading…
Reference in New Issue