ReactOS 0.4.17-dev-470-gf9e3448
shfldr.h File Reference
#include <ntquery.h>
Include dependency graph for shfldr.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  shvheader
 
struct  _REQUIREDREGITEM
 
struct  _REGFOLDERINFO
 
struct  _REGFOLDERINITDATA
 

Macros

#define CHARS_IN_GUID   39
 
#define SHFSF_COL_NAME   0
 
#define SHFSF_COL_SIZE   1
 
#define SHFSF_COL_TYPE   2
 
#define SHFSF_COL_MDATE   3
 
#define SHFSF_COL_FATTS   4
 
#define SHFSF_COL_COMMENT   5
 
#define GET_SHGDN_FOR(dwFlags)   ((DWORD)dwFlags & (DWORD)0x0000FF00)
 
#define GET_SHGDN_RELATION(dwFlags)   ((DWORD)dwFlags & (DWORD)0x000000FF)
 
#define IS_SHGDN_FOR_PARSING(flags)   ( ((flags) & (SHGDN_FORADDRESSBAR | SHGDN_FORPARSING)) == SHGDN_FORPARSING)
 
#define IS_SHGDN_DESKTOPABSOLUTEPARSING(flags)   ( ((flags) & (SHGDN_FORADDRESSBAR | SHGDN_FORPARSING | 0xFF)) == SHGDN_FORPARSING)
 

Typedefs

typedef struct _REQUIREDREGITEM REQUIREDREGITEM
 
typedef struct _REGFOLDERINFO REGFOLDERINFO
 
typedef struct _REGFOLDERINITDATA REGFOLDERINITDATA
 
typedef struct _REGFOLDERINITDATAPREGFOLDERINITDATA
 

Functions

HRESULT CRegFolder_CreateInstance (PREGFOLDERINITDATA pInit, LPCITEMIDLIST pidlRoot, REFIID riid, void **ppv)
 
static SFGAOF SHELL_CreateFolderEnumItemAttributeQuery (SHCONTF Flags, BOOL ForRegItem)
 
SHCONTF SHELL_GetDefaultFolderEnumSHCONTF ()
 
BOOL SHELL_IncludeItemInFolderEnum (IShellFolder *pSF, PCUITEMID_CHILD pidl, SFGAOF Query, SHCONTF Flags)
 
static HRESULT MakeSCID (SHCOLUMNID &scid, REFCLSID fmtid, UINT pid)
 
HRESULT SHELL_MapSCIDToColumn (IShellFolder2 *pSF, const SHCOLUMNID *pscid)
 
HRESULT SHELL_GetDetailsOfAsStringVariant (IShellFolder *pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
 
HRESULT SHELL_GetDetailsOfAsStringVariant (IShellFolder2 *pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
 
HRESULT SHELL_GetDetailsOfColumnAsVariant (IShellFolder2 *pSF, PCUITEMID_CHILD pidl, UINT Column, VARTYPE vt, VARIANT *pVar)
 
HRESULT SH32_GetDetailsOfPKeyAsVariant (IShellFolder2 *pSF, PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pVar, BOOL UseFsColMap)
 
HRESULT SHELL_QueryInfoTipAlloc (_In_ IShellFolder *pSF, _In_ DWORD dwFlags, _In_ LPCITEMIDLIST pidl, _Out_ PWSTR *ppTip)
 
HRESULT SHELL_CreateAbsolutePidl (IShellFolder *pSF, PCUIDLIST_RELATIVE pidlChild, PIDLIST_ABSOLUTE *ppPidl)
 
HRESULT Shell_NextElement (_Inout_ LPWSTR *ppch, _Out_ LPWSTR pszOut, _In_ INT cchOut, _In_ BOOL bValidate)
 
HRESULT SHELL32_ParseNextElement (IShellFolder2 *psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST *pidlInOut, LPOLESTR szNext, DWORD *pEaten, DWORD *pdwAttributes)
 
HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
 
HRESULT SHELL32_GetFSItemAttributes (IShellFolder *psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes)
 
HRESULT SHELL32_CompareDetails (IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
 
HRESULT SHELL32_CompareChildren (IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
 
HRESULT SHELL32_BindToSF (LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidl, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
 
BOOL HCR_RegOpenClassIDKey (REFIID riid, HKEY *hkey)
 
HRESULT CDefViewBckgrndMenu_CreateInstance (IShellFolder *psf, REFIID riid, void **ppv)
 
HRESULT SH_GetApidlFromDataObject (IDataObject *pDataObject, PIDLIST_ABSOLUTE *ppidlfolder, PUITEMID_CHILD **apidlItems, UINT *pcidl)
 
static __inline int SHELL32_GUIDToStringA (REFGUID guid, LPSTR str)
 
static __inline int SHELL32_GUIDToStringW (REFGUID guid, LPWSTR str)
 
void SHELL_FS_ProcessDisplayFilename (LPWSTR szPath, DWORD dwFlags)
 
BOOL SHELL_FS_HideExtension (LPCWSTR pwszPath)
 
static BOOL IsIllegalFsFileName (PCWSTR Name)
 
void CloseRegKeyArray (HKEY *array, UINT cKeys)
 
LSTATUS AddClassKeyToArray (const WCHAR *szClass, HKEY *array, UINT *cKeys)
 
LSTATUS AddClsidKeyToArray (REFCLSID clsid, HKEY *array, UINT *cKeys)
 
void AddFSClassKeysToArray (UINT cidl, PCUITEMID_CHILD_ARRAY apidl, HKEY *array, UINT *cKeys)
 
void AddPidlClassKeysToArray (LPCITEMIDLIST pidl, HKEY *array, UINT *cKeys)
 
UINT SHELL_GetIconUnderlineFlags ()
 

Macro Definition Documentation

◆ CHARS_IN_GUID

#define CHARS_IN_GUID   39

Definition at line 28 of file shfldr.h.

◆ GET_SHGDN_FOR

#define GET_SHGDN_FOR (   dwFlags)    ((DWORD)dwFlags & (DWORD)0x0000FF00)

Definition at line 76 of file shfldr.h.

◆ GET_SHGDN_RELATION

#define GET_SHGDN_RELATION (   dwFlags)    ((DWORD)dwFlags & (DWORD)0x000000FF)

Definition at line 77 of file shfldr.h.

◆ IS_SHGDN_DESKTOPABSOLUTEPARSING

#define IS_SHGDN_DESKTOPABSOLUTEPARSING (   flags)    ( ((flags) & (SHGDN_FORADDRESSBAR | SHGDN_FORPARSING | 0xFF)) == SHGDN_FORPARSING)

Definition at line 79 of file shfldr.h.

◆ IS_SHGDN_FOR_PARSING

#define IS_SHGDN_FOR_PARSING (   flags)    ( ((flags) & (SHGDN_FORADDRESSBAR | SHGDN_FORPARSING)) == SHGDN_FORPARSING)

Definition at line 78 of file shfldr.h.

◆ SHFSF_COL_COMMENT

#define SHFSF_COL_COMMENT   5

Definition at line 49 of file shfldr.h.

◆ SHFSF_COL_FATTS

#define SHFSF_COL_FATTS   4

Definition at line 48 of file shfldr.h.

◆ SHFSF_COL_MDATE

#define SHFSF_COL_MDATE   3

Definition at line 47 of file shfldr.h.

◆ SHFSF_COL_NAME

#define SHFSF_COL_NAME   0

Definition at line 44 of file shfldr.h.

◆ SHFSF_COL_SIZE

#define SHFSF_COL_SIZE   1

Definition at line 45 of file shfldr.h.

◆ SHFSF_COL_TYPE

#define SHFSF_COL_TYPE   2

Definition at line 46 of file shfldr.h.

Typedef Documentation

◆ PREGFOLDERINITDATA

◆ REGFOLDERINFO

◆ REGFOLDERINITDATA

◆ REQUIREDREGITEM

Function Documentation

◆ AddClassKeyToArray()

LSTATUS AddClassKeyToArray ( const WCHAR szClass,
HKEY array,
UINT cKeys 
)

Definition at line 109 of file fontext.cpp.

110{
111 if (*cKeys >= 16)
112 return ERROR_MORE_DATA;
113
114 CRegKey key;
116 if (error == ERROR_SUCCESS)
117 {
118 array[*cKeys] = key.Detach();
119 *cKeys += 1;
120 }
121 return error;
122}
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define error(str)
Definition: mkdosfs.c:1605
#define KEY_READ
Definition: nt_native.h:1026
#define KEY_QUERY_VALUE
Definition: nt_native.h:1019
Definition: undname.c:54
Definition: copy.c:22
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

Referenced by AddClsidKeyToArray(), AddFSClassKeysToArray(), CDrivesContextMenu_CreateInstance(), ClassPropDialogInitCallback(), CDesktopFolder::CreateViewObject(), CFSFolder::CreateViewObject(), CRegItemContextMenu_CreateInstance(), CDesktopFolder::GetUIObjectOf(), and CNetFolder::GetUIObjectOf().

◆ AddClsidKeyToArray()

LSTATUS AddClsidKeyToArray ( REFCLSID  clsid,
HKEY array,
UINT cKeys 
)

Definition at line 455 of file shlfolder.cpp.

456{
457 WCHAR path[6 + 38 + 1] = L"CLSID\\";
458 StringFromGUID2(clsid, path + 6, 38 + 1);
459 return AddClassKeyToArray(path, array, cKeys);
460}
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
Definition: combase.c:1525
#define L(x)
Definition: resources.c:13
const CLSID * clsid
Definition: msctf.cpp:50
short WCHAR
Definition: pedump.c:58
LSTATUS AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:440

Referenced by CRegItemContextMenu_CreateInstance(), and CDesktopFolder::GetUIObjectOf().

◆ AddFSClassKeysToArray()

void AddFSClassKeysToArray ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
HKEY array,
UINT cKeys 
)

Definition at line 462 of file shlfolder.cpp.

463{
464 // This function opens the association array keys in canonical order for filesystem items.
465 // The order is documented: learn.microsoft.com/en-us/windows/win32/shell/fa-associationarray
466
467 ASSERT(cidl >= 1 && apidl);
468 PCUITEMID_CHILD pidl = apidl[0];
469 if (_ILIsValue(pidl))
470 {
472 PWSTR name;
473 FileStructW* pFileData = _ILGetFileStructW(pidl);
474 if (pFileData)
475 {
476 name = pFileData->wszName;
477 }
478 else
479 {
481 name = buf;
482 }
483 LPCWSTR extension = PathFindExtension(name);
484
485 if (extension)
486 {
487 WCHAR wszClass[MAX_PATH], wszSFA[23 + _countof(wszClass)];
488 DWORD dwSize = sizeof(wszClass);
489 if (RegGetValueW(HKEY_CLASSES_ROOT, extension, NULL, RRF_RT_REG_SZ, NULL, wszClass, &dwSize) != ERROR_SUCCESS ||
490 !*wszClass || AddClassKeyToArray(wszClass, array, cKeys) != ERROR_SUCCESS)
491 {
492 // Only add the extension key if the ProgId is not valid
493 AddClassKeyToArray(extension, array, cKeys);
494
495 // "Open With" becomes the default when there are no verbs in the above keys
496 if (cidl == 1)
497 AddClassKeyToArray(L"Unknown", array, cKeys);
498 }
499
500 _swprintf(wszSFA, L"SystemFileAssociations\\%s", extension);
501 AddClassKeyToArray(wszSFA, array, cKeys);
502
503 dwSize = sizeof(wszClass);
504 if (RegGetValueW(HKEY_CLASSES_ROOT, extension, L"PerceivedType", RRF_RT_REG_SZ, NULL, wszClass, &dwSize) == ERROR_SUCCESS)
505 {
506 _swprintf(wszSFA, L"SystemFileAssociations\\%s", wszClass);
507 AddClassKeyToArray(wszSFA, array, cKeys);
508 }
509 }
510
511 AddClassKeyToArray(L"*", array, cKeys);
512 AddClassKeyToArray(L"AllFilesystemObjects", array, cKeys);
513 }
514 else if (_ILIsFolder(pidl))
515 {
516 // FIXME: Directory > Folder > AFO is the correct order and it's
517 // the order Windows reports in its undocumented association array
518 // but it is somehow not the order Windows adds the items to its menu!
519 // Until the correct algorithm in CDefaultContextMenu can be determined,
520 // we add the folder keys in "menu order".
521 AddClassKeyToArray(L"Folder", array, cKeys);
522 AddClassKeyToArray(L"AllFilesystemObjects", array, cKeys);
523 AddClassKeyToArray(L"Directory", array, cKeys);
524 }
525 else if (_ILIsDrive(pidl))
526 {
527 AddClassKeyToArray(L"Drive", array, cKeys);
528 AddClassKeyToArray(L"Folder", array, cKeys);
529 }
530 else
531 {
532 ERR("Got non FS pidl\n");
533 }
534}
#define ERR(fmt,...)
Definition: precomp.h:57
#define NULL
Definition: types.h:112
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1931
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define ASSERT(a)
Definition: mode.c:44
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define _swprintf(buf, format,...)
Definition: sprintf.c:56
FileStructW * _ILGetFileStructW(LPCITEMIDLIST pidl)
Definition: pidl.c:2450
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2144
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:2151
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
Definition: pidl.c:2137
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
Definition: pidl.c:2198
#define PathFindExtension
Definition: shlwapi.h:468
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
#define _countof(array)
Definition: sndvol32.h:70
WCHAR wszName[1]
Definition: shlfolder.c:1557
Definition: name.c:39
uint16_t * PWSTR
Definition: typedefs.h:56
const uint16_t * LPCWSTR
Definition: typedefs.h:57
#define RRF_RT_REG_SZ
Definition: winreg.h:58

Referenced by AddPidlClassKeysToArray(), FSFolderItemPropDialogInitCallback(), CDesktopFolder::GetUIObjectOf(), and CFSFolder::GetUIObjectOf().

◆ AddPidlClassKeysToArray()

void AddPidlClassKeysToArray ( LPCITEMIDLIST  pidl,
HKEY array,
UINT cKeys 
)

Definition at line 536 of file shlfolder.cpp.

537{
538 if ((pidl = ILFindLastID(pidl)) != NULL)
539 AddFSClassKeysToArray(1, &pidl, array, cKeys);
540}
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:199
void AddFSClassKeysToArray(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:462

Referenced by CFSDropTarget::_GetEffectFromMenu().

◆ CDefViewBckgrndMenu_CreateInstance()

HRESULT CDefViewBckgrndMenu_CreateInstance ( IShellFolder psf,
REFIID  riid,
void **  ppv 
)

Definition at line 330 of file CDefViewBckgrndMenu.cpp.

331{
332 return ShellObjectCreatorInit<CDefViewBckgrndMenu>(psf, riid, ppv);
333}
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39

Referenced by CDefView::GetItemObject().

◆ CloseRegKeyArray()

void CloseRegKeyArray ( HKEY array,
UINT  cKeys 
)

Definition at line 103 of file fontext.cpp.

104{
105 for (UINT i = 0; i < cKeys; ++i)
107}
#define RegCloseKey(hKey)
Definition: registry.h:49
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: sysinfo.c:13

◆ CRegFolder_CreateInstance()

HRESULT CRegFolder_CreateInstance ( PREGFOLDERINITDATA  pInit,
LPCITEMIDLIST  pidlRoot,
REFIID  riid,
void **  ppv 
)

Definition at line 995 of file CRegFolder.cpp.

996{
997 return ShellObjectCreatorInit<CRegFolder>(pInit, pidlRoot, riid, ppv);
998}
PWDFDEVICE_INIT pInit

Referenced by CDesktopFolder::FinalConstruct(), CDrivesFolder::FinalConstruct(), and CControlPanelFolder::Initialize().

◆ HCR_RegOpenClassIDKey()

BOOL HCR_RegOpenClassIDKey ( REFIID  riid,
HKEY hkey 
)

Definition at line 253 of file classes.c.

254{
255 char xriid[50];
256 sprintf( xriid, "CLSID\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
257 (UINT)riid->Data1, riid->Data2, riid->Data3,
258 riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3],
259 riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7] );
260
261 TRACE("%s\n",xriid );
262
263 return !RegOpenKeyExA(HKEY_CLASSES_ROOT, xriid, 0, KEY_READ, hkey);
264}
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Definition: reg.c:3298
#define sprintf
Definition: sprintf.c:45
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by CRegFolder::GetDetailsOf(), CRegFolder::GetDisplayNameOf(), HCR_GetClassNameA(), and HCR_GetClassNameW().

◆ IsIllegalFsFileName()

static BOOL IsIllegalFsFileName ( PCWSTR  Name)
inlinestatic

Definition at line 183 of file shfldr.h.

184{
185 return StrIsNullOrEmpty(Name) || StrPBrkW(Name, INVALID_FILETITLE_CHARACTERSW);
186}
LPWSTR Name
Definition: desk.c:124
WCHAR *WINAPI StrPBrkW(const WCHAR *str, const WCHAR *match)
Definition: string.c:760
#define INVALID_FILETITLE_CHARACTERSW
Definition: undocshell.h:1084

Referenced by CRegFolder::SetNameOf().

◆ MakeSCID()

static HRESULT MakeSCID ( SHCOLUMNID &  scid,
REFCLSID  fmtid,
UINT  pid 
)
inlinestatic

Definition at line 99 of file shfldr.h.

100{
101 scid.fmtid = fmtid;
102 scid.pid = pid;
103 return S_OK;
104}
#define S_OK
Definition: intsafe.h:52
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
Definition: winddi.h:3837

Referenced by CControlPanelFolder::MapColumnToSCID(), CDrivesFolder::MapColumnToSCID(), CFSFolder::MapColumnToSCID(), and CRegFolder::MapColumnToSCID().

◆ SH32_GetDetailsOfPKeyAsVariant()

HRESULT SH32_GetDetailsOfPKeyAsVariant ( IShellFolder2 pSF,
PCUITEMID_CHILD  pidl,
const SHCOLUMNID *  pscid,
VARIANT pVar,
BOOL  UseFsColMap 
)

Definition at line 152 of file shlfolder.cpp.

153{
154 // CFSFolder and CRegFolder uses the SHFSF_COL columns and can use the faster and better version,
155 // everyone else must ask the folder to map the SCID to a column.
157 HRESULT hr = UseFsColMap ? MapSCIDToShell32FsColumn(pscid, vt) : SHELL_MapSCIDToColumn(pSF, pscid);
158 return SUCCEEDED(hr) ? SHELL_GetDetailsOfColumnAsVariant(pSF, pidl, hr, vt, pVar) : hr;
159}
HRESULT hr
Definition: delayimp.cpp:582
unsigned short VARTYPE
Definition: compat.h:2254
@ VT_EMPTY
Definition: compat.h:2295
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static HRESULT MapSCIDToShell32FsColumn(const SHCOLUMNID *pscid, VARTYPE &vt)
Definition: shlfolder.cpp:58
HRESULT SHELL_MapSCIDToColumn(IShellFolder2 *pSF, const SHCOLUMNID *pscid)
Definition: shlfolder.cpp:80
HRESULT SHELL_GetDetailsOfColumnAsVariant(IShellFolder2 *pSF, PCUITEMID_CHILD pidl, UINT Column, VARTYPE vt, VARIANT *pVar)
Definition: shlfolder.cpp:129

Referenced by CControlPanelFolder::GetDetailsEx(), CDrivesFolder::GetDetailsEx(), CFSFolder::GetDetailsEx(), and CRegFolder::GetDetailsEx().

◆ SH_GetApidlFromDataObject()

HRESULT SH_GetApidlFromDataObject ( IDataObject pDataObject,
PIDLIST_ABSOLUTE ppidlfolder,
PUITEMID_CHILD **  apidlItems,
UINT pcidl 
)

Definition at line 542 of file shlfolder.cpp.

543{
544 CDataObjectHIDA cida(pDataObject);
545
546 if (FAILED_UNEXPECTEDLY(cida.hr()))
547 return cida.hr();
548
549 /* convert the data into pidl */
550 LPITEMIDLIST pidl;
551 LPITEMIDLIST *apidl = _ILCopyCidaToaPidl(&pidl, cida);
552 if (!apidl)
553 {
554 return E_OUTOFMEMORY;
555 }
556
557 *ppidlfolder = pidl;
558 *apidlItems = apidl;
559 *pcidl = cida->cidl;
560
561 return S_OK;
562}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST *pidl, const CIDA *cida)
Definition: pidl.c:2654
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

Referenced by CFSDropTarget::_RepositionItems(), DrivesContextMenuCallback(), and RegFolderContextMenuCallback().

◆ SHELL32_BindToSF()

HRESULT SHELL32_BindToSF ( LPCITEMIDLIST  pidlRoot,
PERSIST_FOLDER_TARGET_INFO *  ppfti,
LPCITEMIDLIST  pidl,
const GUID clsid,
REFIID  riid,
LPVOID ppvOut 
)

Definition at line 325 of file shlfolder.cpp.

327{
328 PITEMID_CHILD pidlChild = ILCloneFirst (pidl);
329 if (!pidlChild)
330 return E_FAIL;
331
334 ppfti,
335 pidlChild,
336 clsid,
338 ILFree(pidlChild);
339
341 return hr;
342
343 if (_ILIsPidlSimple (pidl))
344 return psf->QueryInterface(riid, ppvOut);
345 else
346 return psf->BindToObject(ILGetNext (pidl), NULL, riid, ppvOut);
347}
#define E_FAIL
Definition: ddrawi.h:102
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
Definition: pidl.c:263
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:977
BOOL WINAPI _ILIsPidlSimple(LPCITEMIDLIST pidl)
HRESULT SHELL32_CoCreateInitSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidlChild, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
Definition: shlfolder.cpp:287
#define IID_PPV_ARG(Itype, ppType)

Referenced by CDrivesFolder::BindToObject(), CFSFolder::BindToObject(), CNetFolder::BindToObject(), and CRegFolder::BindToObject().

◆ SHELL32_CompareChildren()

HRESULT SHELL32_CompareChildren ( IShellFolder2 psf,
LPARAM  lParam,
LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)

Definition at line 381 of file shlfolder.cpp.

382{
383 PUIDLIST_RELATIVE nextpidl1 = ILGetNext (pidl1);
384 PUIDLIST_RELATIVE nextpidl2 = ILGetNext (pidl2);
385
386 bool isEmpty1 = _ILIsDesktop(nextpidl1);
387 bool isEmpty2 = _ILIsDesktop(nextpidl2);
388 if (isEmpty1 || isEmpty2)
389 return MAKE_COMPARE_HRESULT(isEmpty2 - isEmpty1);
390
391 PITEMID_CHILD firstpidl = ILCloneFirst (pidl1);
392 if (!firstpidl)
393 return E_OUTOFMEMORY;
394
396 HRESULT hr = psf->BindToObject(firstpidl, 0, IID_PPV_ARG(IShellFolder, &psf2));
397 ILFree(firstpidl);
398 if (FAILED(hr))
399 return MAKE_COMPARE_HRESULT(0);
400
401 return psf2->CompareIDs(lParam, nextpidl1, nextpidl2);
402}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
LPARAM lParam
Definition: combotst.c:139
HRESULT BindToObject([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
#define FAILED(hr)
Definition: intsafe.h:51
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:686
ITEMIDLIST_RELATIVE UNALIGNED * PUIDLIST_RELATIVE
Definition: shtypes.idl:55

Referenced by CDrivesFolder::CompareIDs(), CFSFolder::CompareIDs(), CRegFolder::CompareIDs(), and SHELL32_CompareDetails().

◆ SHELL32_CompareDetails()

HRESULT SHELL32_CompareDetails ( IShellFolder2 isf,
LPARAM  lParam,
LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)

Definition at line 404 of file shlfolder.cpp.

405{
407 WCHAR wszItem1[MAX_PATH], wszItem2[MAX_PATH];
409 UINT col = LOWORD(lParam); // Column index without SHCIDS_* flags
410
411 hres = isf->GetDetailsOf(pidl1, col, &sd);
412 if (FAILED(hres))
413 return MAKE_COMPARE_HRESULT(1);
414
415 hres = StrRetToBufW(&sd.str, pidl1, wszItem1, MAX_PATH);
416 if (FAILED(hres))
417 return MAKE_COMPARE_HRESULT(1);
418
419 hres = isf->GetDetailsOf(pidl2, col, &sd);
420 if (FAILED(hres))
421 return MAKE_COMPARE_HRESULT(1);
422
423 hres = StrRetToBufW(&sd.str, pidl2, wszItem2, MAX_PATH);
424 if (FAILED(hres))
425 return MAKE_COMPARE_HRESULT(1);
426
427 int ret = CFSFolder::CompareUiStrings(wszItem1, wszItem2, lParam);
428 if (ret == 0)
429 return SHELL32_CompareChildren(isf, lParam, pidl1, pidl2);
430
432}
static int CompareUiStrings(LPCWSTR a, LPCWSTR b, LPARAM lParam=0)
Definition: CFSFolder.h:132
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:248
return ret
Definition: mutex.c:146
HRESULT GetDetailsOf([in] PCUITEMID_CHILD pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd)
HRESULT hres
Definition: protocol.c:465
static const WCHAR sd[]
Definition: suminfo.c:286
#define LOWORD(l)
Definition: pedump.c:82
HRESULT SHELL32_CompareChildren(IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:381

Referenced by CControlPanelFolder::CompareIDs(), CDrivesFolder::CompareIDs(), CFSFolder::CompareIDs(), CPrinterFolder::CompareIDs(), CRegFolder::CompareIDs(), and CRegFolder::CompareRegItemsSortOrder().

◆ SHELL32_GetDisplayNameOfChild()

HRESULT SHELL32_GetDisplayNameOfChild ( IShellFolder2 psf,
LPCITEMIDLIST  pidl,
DWORD  dwFlags,
LPSTRRET  strRet 
)

Definition at line 363 of file shlfolder.cpp.

365{
366 LPITEMIDLIST pidlFirst = ILCloneFirst(pidl);
367 if (!pidlFirst)
368 return E_OUTOFMEMORY;
369
370 CComPtr<IShellFolder> psfChild;
371 HRESULT hr = psf->BindToObject(pidlFirst, NULL, IID_PPV_ARG(IShellFolder, &psfChild));
372 if (SUCCEEDED (hr))
373 {
374 hr = psfChild->GetDisplayNameOf(ILGetNext (pidl), dwFlags, strRet);
375 }
376 ILFree (pidlFirst);
377
378 return hr;
379}
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141

Referenced by CDesktopFolder::GetDisplayNameOf(), CDrivesFolder::GetDisplayNameOf(), CFSFolder::GetDisplayNameOf(), and CRegFolder::GetDisplayNameOf().

◆ SHELL32_GetFSItemAttributes()

HRESULT SHELL32_GetFSItemAttributes ( IShellFolder psf,
LPCITEMIDLIST  pidl,
LPDWORD  pdwAttributes 
)

Definition at line 644 of file CFSFolder.cpp.

645{
646 DWORD dwFileAttributes, dwShellAttributes;
647
648 if (!_ILIsFolderOrFile(pidl))
649 {
650 ERR("Got wrong type of pidl!\n");
651 *pdwAttributes &= SFGAO_CANLINK;
652 return S_OK;
653 }
654
656
657 /* Set common attributes */
658 dwShellAttributes = SFGAO_CANCOPY | SFGAO_CANMOVE | SFGAO_CANLINK | SFGAO_CANRENAME | SFGAO_CANDELETE |
659 SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_FILESYSTEM;
660
661 BOOL bDirectory = (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
662
663 if (SFGAO_VALIDATE & *pdwAttributes)
664 {
665 STRRET strret;
666 LPWSTR path;
667 if (SUCCEEDED(psf->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strret)) &&
668 SUCCEEDED(StrRetToStrW(&strret, pidl, &path)))
669 {
670 BOOL exists = PathFileExistsW(path);
671 SHFree(path);
672 if (!exists)
673 return E_FAIL;
674 }
675 }
676
677 if (!bDirectory)
678 {
679 // https://git.reactos.org/?p=reactos.git;a=blob;f=dll/shellext/zipfldr/res/zipfldr.rgs;hb=032b5aacd233cd7b83ab6282aad638c161fdc400#l9
680 WCHAR szFileName[MAX_PATH];
681 LPWSTR pExtension;
682 BOOL hasName = _ILSimpleGetTextW(pidl, szFileName, _countof(szFileName));
683 dwShellAttributes |= SFGAO_STREAM;
684
685 // Vista+ feature: Hidden files with a leading tilde treated as super-hidden
686 // See https://devblogs.microsoft.com/oldnewthing/20170526-00/?p=96235
687 if (hasName && szFileName[0] == '~' && (dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))
688 dwShellAttributes |= SFGAO_HIDDEN | SFGAO_SYSTEM;
689
690 if (hasName && (pExtension = PathFindExtensionW(szFileName)))
691 {
692 CLSID clsidFile;
693 // FIXME: Cache this?
694 HRESULT hr = GetCLSIDForFileTypeFromExtension(pExtension, L"CLSID", &clsidFile);
695 if (hr == S_OK)
696 {
697 HKEY hkey;
698 hr = SHRegGetCLSIDKeyW(clsidFile, L"ShellFolder", FALSE, FALSE, &hkey);
699 if (SUCCEEDED(hr))
700 {
702 DWORD dwSize = sizeof(dwAttributes);
704
706 if (Status == STATUS_SUCCESS)
707 {
708 TRACE("Augmenting '%S' with dwAttributes=0x%x\n", szFileName, dwAttributes);
709 dwShellAttributes |= dwAttributes;
710 }
711 ::RegCloseKey(hkey);
712
713 // This should be presented as directory!
714 bDirectory = (dwAttributes & SFGAO_FOLDER) != 0 || dwAttributes == 0;
715 TRACE("Treating '%S' as directory!\n", szFileName);
716 }
717 }
718 }
719 }
720
721 // This is a directory
722 if (bDirectory)
723 {
724 dwShellAttributes |= (SFGAO_FOLDER | /*SFGAO_HASSUBFOLDER |*/ SFGAO_STORAGE);
725
726 // Is this a real directory?
728 {
729 dwShellAttributes |= (SFGAO_FILESYSANCESTOR | SFGAO_STORAGEANCESTOR);
730 }
731 }
732
734 dwShellAttributes |= SFGAO_HIDDEN | SFGAO_GHOSTED;
735
737 dwShellAttributes |= SFGAO_READONLY;
738
740 dwShellAttributes |= SFGAO_SYSTEM;
741
743 dwShellAttributes |= SFGAO_COMPRESSED;
744
746 dwShellAttributes |= SFGAO_ENCRYPTED;
747
748 if ((SFGAO_NONENUMERATED & *pdwAttributes) && (dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))
749 {
751 if ((!(shcf & SHCONTF_INCLUDEHIDDEN)) || ((dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) && !(shcf & SHCONTF_INCLUDESUPERHIDDEN)))
752 dwShellAttributes |= SFGAO_NONENUMERATED;
753 }
754
755 if (SFGAO_LINK & *pdwAttributes)
756 {
758
759 if (_ILGetExtension(pidl, ext, _countof(ext)) && !lstrcmpiW(ext, L"lnk"))
760 dwShellAttributes |= SFGAO_LINK;
761 }
762
763 if (SFGAO_HASSUBFOLDER & *pdwAttributes)
764 {
765 CComPtr<IShellFolder> psf2;
766 if (SUCCEEDED(psf->BindToObject(pidl, 0, IID_PPV_ARG(IShellFolder, &psf2))))
767 {
768 CComPtr<IEnumIDList> pEnumIL;
769 if (SUCCEEDED(psf2->EnumObjects(0, SHCONTF_FOLDERS, &pEnumIL)))
770 {
771 if (pEnumIL->Skip(1) == S_OK)
772 dwShellAttributes |= SFGAO_HASSUBFOLDER;
773 }
774 }
775 }
776
777 *pdwAttributes = dwShellAttributes;
778
779 TRACE ("-- 0x%08x\n", *pdwAttributes);
780 return S_OK;
781}
DWORD dwFileAttributes
#define FALSE
Definition: types.h:117
#define SFGAO_SYSTEM
Definition: shobjidl.idl:198
static const WCHAR *const ext[]
Definition: module.c:53
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
Definition: path.c:1250
BOOL WINAPI PathFileExistsW(const WCHAR *path)
Definition: path.c:2583
static HRESULT GetCLSIDForFileTypeFromExtension(LPCWSTR pExtension, LPCWSTR KeyName, CLSID *pclsid)
Definition: CFSFolder.cpp:109
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:370
HRESULT WINAPI SHRegGetCLSIDKeyW(REFGUID, LPCWSTR, BOOL, BOOL, PHKEY)
Definition: reg.c:595
HRESULT WINAPI StrRetToStrW(LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *ppszName)
Definition: string.c:349
unsigned int BOOL
Definition: ntddk_ex.h:94
Status
Definition: gdiplustypes.h:24
HRESULT GetDisplayNameOf([in] PCUITEMID_CHILD pidl, [in] SHGDNF uFlags, [out] STRRET *lpName)
static SHCONTF
Definition: ordinal.c:61
#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_DIRECTORY
Definition: nt_native.h:705
#define FILE_ATTRIBUTE_ENCRYPTED
Definition: ntifs_ex.h:385
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2585
BOOL _ILGetExtension(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2538
#define STATUS_SUCCESS
Definition: shellext.h:65
SHCONTF SHELL_GetDefaultFolderEnumSHCONTF()
Definition: shlfolder.cpp:29
uint16_t * LPWSTR
Definition: typedefs.h:56
DWORD dwAttributes
Definition: vdmdbg.h:34
WINSHLWAPI LSTATUS WINAPI SHRegGetValueW(HKEY, LPCWSTR, LPCWSTR, SRRF, LPDWORD, LPVOID, LPDWORD)
#define RRF_RT_REG_DWORD
Definition: winreg.h:61

Referenced by CFSFolder::GetAttributesOf().

◆ SHELL32_GUIDToStringA()

static __inline int SHELL32_GUIDToStringA ( REFGUID  guid,
LPSTR  str 
)
static

Definition at line 159 of file shfldr.h.

160{
161 return sprintf(str, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
162 guid.Data1, guid.Data2, guid.Data3,
163 guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
164 guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
165}
GUID guid
Definition: version.c:147
const WCHAR * str

◆ SHELL32_GUIDToStringW()

static __inline int SHELL32_GUIDToStringW ( REFGUID  guid,
LPWSTR  str 
)
static

Definition at line 167 of file shfldr.h.

168{
169 static const WCHAR fmtW[] =
170 { '{','%','0','8','l','X','-','%','0','4','X','-','%','0','4','X','-',
171 '%','0','2','X','%','0','2','X','-',
172 '%','0','2','X','%','0','2','X','%','0','2','X','%','0','2','X',
173 '%','0','2','X','%','0','2','X','}',0 };
174 return _swprintf(str, fmtW,
175 guid.Data1, guid.Data2, guid.Data3,
176 guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
177 guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
178}

Referenced by CRegFolder::GetDisplayNameOf(), and SHELL32_IsShellFolderNamespaceItemHidden().

◆ SHELL32_ParseNextElement()

HRESULT SHELL32_ParseNextElement ( IShellFolder2 psf,
HWND  hwndOwner,
LPBC  pbc,
LPITEMIDLIST pidlInOut,
LPOLESTR  szNext,
DWORD pEaten,
DWORD pdwAttributes 
)

Definition at line 236 of file shlfolder.cpp.

238{
240 LPITEMIDLIST pidlIn = pidlInOut ? *pidlInOut : NULL;
241 LPITEMIDLIST pidlOut = NULL;
242 LPITEMIDLIST pidlTemp = NULL;
243 CComPtr<IShellFolder> psfChild;
244
245 TRACE ("(%p, %p, %p, %s)\n", psf, pbc, pidlIn, debugstr_w (szNext));
246
247 /* get the shellfolder for the child pidl and let it analyse further */
248 hr = psf->BindToObject(pidlIn, pbc, IID_PPV_ARG(IShellFolder, &psfChild));
249 if (FAILED(hr))
250 return hr;
251
252 hr = psfChild->ParseDisplayName(hwndOwner, pbc, szNext, pEaten, &pidlOut, pdwAttributes);
253 if (FAILED(hr))
254 return hr;
255
256 pidlTemp = ILCombine (pidlIn, pidlOut);
257 if (!pidlTemp)
258 {
260 if (pidlOut)
261 ILFree(pidlOut);
262 return hr;
263 }
264
265 if (pidlOut)
266 ILFree (pidlOut);
267
268 if (pidlIn)
269 ILFree (pidlIn);
270
271 *pidlInOut = pidlTemp;
272
273 TRACE ("-- pidl=%p ret=0x%08x\n", pidlInOut ? *pidlInOut : NULL, hr);
274 return S_OK;
275}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define debugstr_w
Definition: kernel32.h:32
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817

Referenced by CRegFolder::ParseDisplayName().

◆ SHELL_CreateAbsolutePidl()

HRESULT SHELL_CreateAbsolutePidl ( IShellFolder pSF,
PCUIDLIST_RELATIVE  pidlChild,
PIDLIST_ABSOLUTE ppPidl 
)

Definition at line 174 of file shlfolder.cpp.

175{
176 PIDLIST_ABSOLUTE pidlFolder;
177 HRESULT hr = SHGetIDListFromObject(pSF, &pidlFolder);
178 if (SUCCEEDED(hr))
179 {
180 hr = SHILCombine(pidlFolder, pidlChild, ppPidl);
181 ILFree(pidlFolder);
182 }
183 return hr;
184}
HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
Definition: pidl.c:1680

Referenced by CRegFolder::SetNameOf().

◆ SHELL_CreateFolderEnumItemAttributeQuery()

static SFGAOF SHELL_CreateFolderEnumItemAttributeQuery ( SHCONTF  Flags,
BOOL  ForRegItem 
)
inlinestatic

Definition at line 82 of file shfldr.h.

83{
84 SFGAOF query = SFGAO_FOLDER | (ForRegItem ? SFGAO_NONENUMERATED : 0);
85 if (!(Flags & SHCONTF_INCLUDEHIDDEN))
86 query |= SFGAO_HIDDEN;
87 if (!(Flags & SHCONTF_INCLUDESUPERHIDDEN))
88 query |= SFGAO_HIDDEN | SFGAO_SYSTEM;
89 return query;
90}
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

Referenced by CRegFolderEnum::AddItemsFromKey(), and CRegFolderEnum::Initialize().

◆ SHELL_FS_HideExtension()

BOOL SHELL_FS_HideExtension ( LPCWSTR  pwszPath)

Definition at line 1444 of file CFSFolder.cpp.

1445{
1446 HKEY hKey;
1447 BOOL doHide = FALSE; /* The default value is FALSE (win98 at least) */
1448 LONG lError;
1449
1450 doHide = !SHELL_GetSetting(SSF_SHOWEXTENSIONS, fShowExtensions);
1451
1452 if (!doHide)
1453 {
1455 if (*DotExt != 0)
1456 {
1458 LONG classlen = sizeof(classname);
1459 lError = RegQueryValueW(HKEY_CLASSES_ROOT, DotExt, classname, &classlen);
1460 if (lError == ERROR_SUCCESS)
1461 {
1463 if (lError == ERROR_SUCCESS)
1464 {
1465 lError = RegQueryValueExW(hKey, L"NeverShowExt", NULL, NULL, NULL, NULL);
1466 if (lError == ERROR_SUCCESS)
1467 doHide = TRUE;
1468
1470 }
1471 }
1472 }
1473 }
1474 // TODO: else if "AlwaysShowExt"
1475
1476 return doHide;
1477}
#define TRUE
Definition: types.h:120
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4241
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
FxAutoRegKey hKey
LPCWSTR szPath
Definition: env.c:37
long LONG
Definition: pedump.c:60
WCHAR classname[128]
Definition: startup.c:15
#define SHELL_GetSetting(pss, ssf, field)
Definition: shellutils.h:910
#define SSF_SHOWEXTENSIONS
Definition: shlobj.h:1622

Referenced by CDefView::OnNotify(), CFSFolder::SetNameOf(), and SHELL_FS_ProcessDisplayFilename().

◆ SHELL_FS_ProcessDisplayFilename()

void SHELL_FS_ProcessDisplayFilename ( LPWSTR  szPath,
DWORD  dwFlags 
)

Definition at line 1479 of file CFSFolder.cpp.

1480{
1481 /*FIXME: MSDN also mentions SHGDN_FOREDITING which is not yet handled. */
1482 if (!(dwFlags & SHGDN_FORPARSING) &&
1483 ((dwFlags & SHGDN_INFOLDER) || (dwFlags == SHGDN_NORMAL))) {
1484 if (SHELL_FS_HideExtension(szPath) && szPath[0] != '.')
1486 }
1487}
void WINAPI PathRemoveExtensionW(WCHAR *path)
Definition: path.c:1922
BOOL SHELL_FS_HideExtension(LPCWSTR szPath)
Definition: CFSFolder.cpp:1444

Referenced by CFSFolder::GetDisplayNameOf(), and CRecycleBin::GetDisplayNameOf().

◆ SHELL_GetDefaultFolderEnumSHCONTF()

SHCONTF SHELL_GetDefaultFolderEnumSHCONTF ( )

Definition at line 29 of file shlfolder.cpp.

30{
31 SHCONTF Flags = SHCONTF_FOLDERS | SHCONTF_NONFOLDERS;
34 if (ss.fShowAllObjects)
35 Flags |= SHCONTF_INCLUDEHIDDEN;
36 if (ss.fShowSuperHidden)
37 Flags |= SHCONTF_INCLUDESUPERHIDDEN;
38 return Flags;
39}
#define ss
Definition: i386-dis.c:441
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
#define SSF_SHOWSUPERHIDDEN
Definition: shlobj.h:1637
#define SSF_SHOWALLOBJECTS
Definition: shlobj.h:1621

Referenced by SHELL32_GetFSItemAttributes().

◆ SHELL_GetDetailsOfAsStringVariant() [1/2]

HRESULT SHELL_GetDetailsOfAsStringVariant ( IShellFolder pSF,
PCUITEMID_CHILD  pidl,
UINT  Column,
VARIANT pVar 
)

Definition at line 116 of file shlfolder.cpp.

117{
118 HRESULT hr;
121 return SHELL_GetDetailsOfAsStringVariant(pSF2, pidl, Column, pVar);
123 if (SUCCEEDED(hr = pSF->CreateViewObject(NULL, IID_PPV_ARG(IShellDetails, &pSD))))
124 return GetDetailsOfAsStringVariant(pSD, pidl, Column, pVar);
125 return hr;
126}
HRESULT CreateViewObject([in] HWND hwndOwner, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
HRESULT SHELL_GetDetailsOfAsStringVariant(IShellFolder2 *pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
Definition: shlfolder.cpp:110
static HRESULT GetDetailsOfAsStringVariant(T &pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
Definition: shlfolder.cpp:95

Referenced by CFSFolder::GetDetailsEx(), and CFolder::GetDetailsOf().

◆ SHELL_GetDetailsOfAsStringVariant() [2/2]

HRESULT SHELL_GetDetailsOfAsStringVariant ( IShellFolder2 pSF,
PCUITEMID_CHILD  pidl,
UINT  Column,
VARIANT pVar 
)

Definition at line 110 of file shlfolder.cpp.

111{
112 return GetDetailsOfAsStringVariant(pSF, pidl, Column, pVar);
113}

Referenced by SHELL_GetDetailsOfAsStringVariant(), and SHELL_GetDetailsOfColumnAsVariant().

◆ SHELL_GetDetailsOfColumnAsVariant()

HRESULT SHELL_GetDetailsOfColumnAsVariant ( IShellFolder2 pSF,
PCUITEMID_CHILD  pidl,
UINT  Column,
VARTYPE  vt,
VARIANT pVar 
)

Definition at line 129 of file shlfolder.cpp.

130{
131 HRESULT hr = SHELL_GetDetailsOfAsStringVariant(pSF, pidl, Column, pVar);
132 if (FAILED(hr))
133 return hr;
134 if (vt == VT_EMPTY)
135 {
137 if (FAILED(pSF->GetDefaultColumnState(Column, &state)))
140 vt = VT_I8;
142 vt = VT_DATE;
143 else
144 vt = VT_BSTR;
145 }
146 if (vt != VT_BSTR)
147 VariantChangeType(pVar, pVar, 0, vt);
148 return hr;
149}
static int state
Definition: maze.c:121
@ VT_BSTR
Definition: compat.h:2303
@ VT_I8
Definition: compat.h:2314
@ VT_DATE
Definition: compat.h:2302
HRESULT GetDefaultColumnState([in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags)
@ SHCOLSTATE_TYPE_INT
Definition: shtypes.idl:122
@ SHCOLSTATE_TYPEMASK
Definition: shtypes.idl:124
@ SHCOLSTATE_TYPE_DATE
Definition: shtypes.idl:123
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
DWORD SHCOLSTATEF
Definition: shtypes.idl:142
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
Definition: variant.c:962

Referenced by SH32_GetDetailsOfPKeyAsVariant().

◆ SHELL_GetIconUnderlineFlags()

UINT SHELL_GetIconUnderlineFlags ( )

Definition at line 134 of file general.cpp.

135{
137 if (mode == UNDERLINE_HOVER)
138 return LVS_EX_UNDERLINEHOT;
139 if (mode == UNDERLINE_ON)
141 return 0;
142}
@ UNDERLINE_HOVER
Definition: general.cpp:28
@ UNDERLINE_ON
Definition: general.cpp:28
static UINT SHELL_GetIconUnderlineMode()
Definition: general.cpp:116
GLenum mode
Definition: glext.h:6217
#define LVS_EX_UNDERLINECOLD
Definition: commctrl.h:2746
#define LVS_EX_UNDERLINEHOT
Definition: commctrl.h:2745

Referenced by CDefView::CreateList(), and CDefView::OnSettingChange().

◆ SHELL_IncludeItemInFolderEnum()

BOOL SHELL_IncludeItemInFolderEnum ( IShellFolder pSF,
PCUITEMID_CHILD  pidl,
SFGAOF  Query,
SHCONTF  Flags 
)

Definition at line 41 of file shlfolder.cpp.

42{
43 if (SUCCEEDED(pSF->GetAttributesOf(1, &pidl, &Query)))
44 {
45 if (Query & SFGAO_NONENUMERATED)
46 return FALSE;
47 if ((Query & SFGAO_HIDDEN) && !(Flags & SHCONTF_INCLUDEHIDDEN))
48 return FALSE;
49 if ((Query & (SFGAO_HIDDEN | SFGAO_SYSTEM)) == (SFGAO_HIDDEN | SFGAO_SYSTEM) && !(Flags & SHCONTF_INCLUDESUPERHIDDEN))
50 return FALSE;
51 if ((Flags & (SHCONTF_FOLDERS | SHCONTF_NONFOLDERS)) != (SHCONTF_FOLDERS | SHCONTF_NONFOLDERS))
52 return (Flags & SHCONTF_FOLDERS) ? (Query & SFGAO_FOLDER) : !(Query & SFGAO_FOLDER);
53 }
54 return TRUE;
55}
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
Definition: query.c:292
HRESULT GetAttributesOf([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF *rgfInOut)

Referenced by CRegFolderEnum::AddItemsFromKey(), and CRegFolderEnum::Initialize().

◆ SHELL_MapSCIDToColumn()

HRESULT SHELL_MapSCIDToColumn ( IShellFolder2 pSF,
const SHCOLUMNID *  pscid 
)

Definition at line 80 of file shlfolder.cpp.

81{
82 for (UINT i = 0; i <= SHCIDS_COLUMNMASK; ++i)
83 {
84 SHCOLUMNID scid;
85 HRESULT hr = pSF->MapColumnToSCID(i, &scid);
86 if (FAILED(hr))
87 break;
88 if (IsEqualPropertyKey(scid, *pscid))
89 return i;
90 }
91 return E_FAIL;
92}
HRESULT MapColumnToSCID([in] UINT iColumn, [in] SHCOLUMNID *pscid)
#define IsEqualPropertyKey(a, b)
Definition: propkeydef.h:52

Referenced by SH32_GetDetailsOfPKeyAsVariant().

◆ Shell_NextElement()

HRESULT Shell_NextElement ( _Inout_ LPWSTR ppch,
_Out_ LPWSTR  pszOut,
_In_ INT  cchOut,
_In_ BOOL  bValidate 
)

Definition at line 187 of file shlfolder.cpp.

192{
193 *pszOut = UNICODE_NULL;
194
195 if (!*ppch)
196 return S_FALSE;
197
198 HRESULT hr;
199 LPWSTR pchNext = wcschr(*ppch, L'\\');
200 if (pchNext)
201 {
202 if (*ppch < pchNext)
203 {
204 /* Get an element */
205 StringCchCopyNW(pszOut, cchOut, *ppch, pchNext - *ppch);
206 ++pchNext;
207
208 if (!*pchNext)
209 pchNext = NULL; /* No next */
210
211 hr = S_OK;
212 }
213 else /* Double backslashes found? */
214 {
215 pchNext = NULL;
217 }
218 }
219 else /* No more next */
220 {
221 StringCchCopyW(pszOut, cchOut, *ppch);
222 hr = S_OK;
223 }
224
225 *ppch = pchNext; /* Go next */
226
227 if (hr == S_OK && bValidate && !PathIsValidElement(pszOut))
228 {
229 *pszOut = UNICODE_NULL;
231 }
232
233 return hr;
234}
#define wcschr
Definition: compat.h:17
BOOL PathIsValidElement(_In_ LPCWSTR pszPath)
Definition: utils.cpp:240
#define UNICODE_NULL
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
Definition: strsafe.h:236
#define S_FALSE
Definition: winerror.h:3451

Referenced by CFSFolder::_ParseSimple(), and CFSFolder::ParseDisplayName().

◆ SHELL_QueryInfoTipAlloc()

HRESULT SHELL_QueryInfoTipAlloc ( _In_ IShellFolder pSF,
_In_ DWORD  dwFlags,
_In_ LPCITEMIDLIST  pidl,
_Out_ PWSTR ppTip 
)

Definition at line 162 of file shlfolder.cpp.

163{
164 if (!pidl)
165 return E_INVALIDARG;
167 HRESULT hr = pSF->GetUIObjectOf(NULL, 1, &pidl, IID_NULL_PPV_ARG(IQueryInfo, &pQI));
168 if (FAILED(hr))
169 return hr;
170 hr = pQI->GetInfoTip(dwFlags, ppTip); // Note: *ppTip can be NULL if there is no tip
171 return SUCCEEDED(hr) && !*ppTip ? S_FALSE : hr;
172}
#define IID_NULL_PPV_ARG(Itype, ppType)

Referenced by CFolder::GetDetailsOf().