ReactOS 0.4.16-dev-1170-ge326b06
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 (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_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)
 

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 408 of file shlfolder.cpp.

409{
410 if (*cKeys >= 16)
411 return ERROR_MORE_DATA;
412
413 HKEY hkey;
415 if (result == ERROR_SUCCESS)
416 {
417 array[*cKeys] = hkey;
418 *cKeys += 1;
419 }
420 return result;
421}
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
GLuint64EXT * result
Definition: glext.h:11304
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
#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 423 of file shlfolder.cpp.

424{
425 WCHAR path[6 + 38 + 1] = L"CLSID\\";
426 StringFromGUID2(clsid, path + 6, 38 + 1);
427 return AddClassKeyToArray(path, array, cKeys);
428}
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
REFCLSID clsid
Definition: msctf.c:82
#define L(x)
Definition: ntvdm.h:50
LSTATUS AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:408
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CDesktopFolder::GetUIObjectOf().

◆ AddFSClassKeysToArray()

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

Definition at line 430 of file shlfolder.cpp.

431{
432 // This function opens the association array keys in canonical order for filesystem items.
433 // The order is documented: learn.microsoft.com/en-us/windows/win32/shell/fa-associationarray
434
435 ASSERT(cidl >= 1 && apidl);
436 PCUITEMID_CHILD pidl = apidl[0];
437 if (_ILIsValue(pidl))
438 {
440 PWSTR name;
441 FileStructW* pFileData = _ILGetFileStructW(pidl);
442 if (pFileData)
443 {
444 name = pFileData->wszName;
445 }
446 else
447 {
449 name = buf;
450 }
451 LPCWSTR extension = PathFindExtension(name);
452
453 if (extension)
454 {
455 WCHAR wszClass[MAX_PATH], wszSFA[23 + _countof(wszClass)];
456 DWORD dwSize = sizeof(wszClass);
457 if (RegGetValueW(HKEY_CLASSES_ROOT, extension, NULL, RRF_RT_REG_SZ, NULL, wszClass, &dwSize) != ERROR_SUCCESS ||
458 !*wszClass || AddClassKeyToArray(wszClass, array, cKeys) != ERROR_SUCCESS)
459 {
460 // Only add the extension key if the ProgId is not valid
461 AddClassKeyToArray(extension, array, cKeys);
462
463 // "Open With" becomes the default when there are no verbs in the above keys
464 if (cidl == 1)
465 AddClassKeyToArray(L"Unknown", array, cKeys);
466 }
467
468 swprintf(wszSFA, L"SystemFileAssociations\\%s", extension);
469 AddClassKeyToArray(wszSFA, array, cKeys);
470
471 dwSize = sizeof(wszClass);
472 if (RegGetValueW(HKEY_CLASSES_ROOT, extension, L"PerceivedType ", RRF_RT_REG_SZ, NULL, wszClass, &dwSize) == ERROR_SUCCESS)
473 {
474 swprintf(wszSFA, L"SystemFileAssociations\\%s", wszClass);
475 AddClassKeyToArray(wszSFA, array, cKeys);
476 }
477 }
478
479 AddClassKeyToArray(L"*", array, cKeys);
480 AddClassKeyToArray(L"AllFilesystemObjects", array, cKeys);
481 }
482 else if (_ILIsFolder(pidl))
483 {
484 // FIXME: Directory > Folder > AFO is the correct order and it's
485 // the order Windows reports in its undocumented association array
486 // but it is somehow not the order Windows adds the items to its menu!
487 // Until the correct algorithm in CDefaultContextMenu can be determined,
488 // we add the folder keys in "menu order".
489 AddClassKeyToArray(L"Folder", array, cKeys);
490 AddClassKeyToArray(L"AllFilesystemObjects", array, cKeys);
491 AddClassKeyToArray(L"Directory", array, cKeys);
492 }
493 else
494 {
495 ERR("Got non FS pidl\n");
496 }
497}
#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
#define RRF_RT_REG_SZ
Definition: driver.c:575
#define swprintf
Definition: precomp.h:40
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
FileStructW * _ILGetFileStructW(LPCITEMIDLIST pidl)
Definition: pidl.c:2443
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2137
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:2144
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
Definition: pidl.c:2191
#define PathFindExtension
Definition: shlwapi.h:942
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
#define _countof(array)
Definition: sndvol32.h:70
WCHAR wszName[1]
Definition: shlfolder.c:1555
Definition: name.c:39
uint16_t * PWSTR
Definition: typedefs.h:56
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

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

◆ 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 402 of file shlfolder.cpp.

403{
404 for (UINT i = 0; i < cKeys; ++i)
406}
#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: ndis.h:50

◆ CRegFolder_CreateInstance()

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

Definition at line 1002 of file CRegFolder.cpp.

1003{
1004 return ShellObjectCreatorInit<CRegFolder>(pInit, pidlRoot, riid, ppv);
1005}
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(buf, format,...)
Definition: sprintf.c:55
#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 178 of file shfldr.h.

179{
180 return StrIsNullOrEmpty(Name) || StrPBrkW(Name, INVALID_FILETITLE_CHARACTERSW);
181}
LPWSTR Name
Definition: desk.c:124
LPWSTR WINAPI StrPBrkW(LPCWSTR lpszStr, LPCWSTR lpszMatch)
Definition: string.c:1284
#define INVALID_FILETITLE_CHARACTERSW
Definition: undocshell.h:993

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 133 of file shlfolder.cpp.

134{
135 // CFSFolder and CRegFolder uses the SHFSF_COL columns and can use the faster and better version,
136 // everyone else must ask the folder to map the SCID to a column.
138 HRESULT hr = UseFsColMap ? MapSCIDToShell32FsColumn(pscid, vt) : SHELL_MapSCIDToColumn(pSF, pscid);
139 return SUCCEEDED(hr) ? SHELL_GetDetailsOfColumnAsVariant(pSF, pidl, hr, vt, pVar) : hr;
140}
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
HRESULT hr
Definition: shlfolder.c:183
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:110

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 499 of file shlfolder.cpp.

500{
501 CDataObjectHIDA cida(pDataObject);
502
503 if (FAILED_UNEXPECTEDLY(cida.hr()))
504 return cida.hr();
505
506 /* convert the data into pidl */
507 LPITEMIDLIST pidl;
508 LPITEMIDLIST *apidl = _ILCopyCidaToaPidl(&pidl, cida);
509 if (!apidl)
510 {
511 return E_OUTOFMEMORY;
512 }
513
514 *ppidlfolder = pidl;
515 *apidlItems = apidl;
516 *pcidl = cida->cidl;
517
518 return S_OK;
519}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:65
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST *pidl, const CIDA *cida)
Definition: pidl.c:2645
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 293 of file shlfolder.cpp.

295{
296 PITEMID_CHILD pidlChild = ILCloneFirst (pidl);
297 if (!pidlChild)
298 return E_FAIL;
299
302 ppfti,
303 pidlChild,
304 clsid,
306 ILFree(pidlChild);
307
309 return hr;
310
311 if (_ILIsPidlSimple (pidl))
312 return psf->QueryInterface(riid, ppvOut);
313 else
314 return psf->BindToObject(ILGetNext (pidl), NULL, riid, ppvOut);
315}
#define E_FAIL
Definition: ddrawi.h:102
BOOL WINAPI _ILIsPidlSimple(LPCITEMIDLIST pidl)
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
Definition: pidl.c:262
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:970
HRESULT SHELL32_CoCreateInitSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidlChild, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
Definition: shlfolder.cpp:255
#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 349 of file shlfolder.cpp.

350{
351 PUIDLIST_RELATIVE nextpidl1 = ILGetNext (pidl1);
352 PUIDLIST_RELATIVE nextpidl2 = ILGetNext (pidl2);
353
354 bool isEmpty1 = _ILIsDesktop(nextpidl1);
355 bool isEmpty2 = _ILIsDesktop(nextpidl2);
356 if (isEmpty1 || isEmpty2)
357 return MAKE_COMPARE_HRESULT(isEmpty2 - isEmpty1);
358
359 PITEMID_CHILD firstpidl = ILCloneFirst (pidl1);
360 if (!firstpidl)
361 return E_OUTOFMEMORY;
362
364 HRESULT hr = psf->BindToObject(firstpidl, 0, IID_PPV_ARG(IShellFolder, &psf2));
365 ILFree(firstpidl);
366 if (FAILED(hr))
367 return MAKE_COMPARE_HRESULT(0);
368
369 return psf2->CompareIDs(lParam, nextpidl1, nextpidl2);
370}
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:663
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 372 of file shlfolder.cpp.

373{
375 WCHAR wszItem1[MAX_PATH], wszItem2[MAX_PATH];
377 UINT col = LOWORD(lParam); // Column index without SHCIDS_* flags
378
379 hres = isf->GetDetailsOf(pidl1, col, &sd);
380 if (FAILED(hres))
381 return MAKE_COMPARE_HRESULT(1);
382
383 hres = StrRetToBufW(&sd.str, pidl1, wszItem1, MAX_PATH);
384 if (FAILED(hres))
385 return MAKE_COMPARE_HRESULT(1);
386
387 hres = isf->GetDetailsOf(pidl2, col, &sd);
388 if (FAILED(hres))
389 return MAKE_COMPARE_HRESULT(1);
390
391 hres = StrRetToBufW(&sd.str, pidl2, wszItem2, MAX_PATH);
392 if (FAILED(hres))
393 return MAKE_COMPARE_HRESULT(1);
394
395 int ret = CFSFolder::CompareUiStrings(wszItem1, wszItem2, lParam);
396 if (ret == 0)
397 return SHELL32_CompareChildren(isf, lParam, pidl1, pidl2);
398
400}
static int CompareUiStrings(LPCWSTR a, LPCWSTR b, LPARAM lParam=0)
Definition: CFSFolder.h:136
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1530
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:349
int ret

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 331 of file shlfolder.cpp.

333{
334 LPITEMIDLIST pidlFirst = ILCloneFirst(pidl);
335 if (!pidlFirst)
336 return E_OUTOFMEMORY;
337
338 CComPtr<IShellFolder> psfChild;
339 HRESULT hr = psf->BindToObject(pidlFirst, NULL, IID_PPV_ARG(IShellFolder, &psfChild));
340 if (SUCCEEDED (hr))
341 {
342 hr = psfChild->GetDisplayNameOf(ILGetNext (pidl), dwFlags, strRet);
343 }
344 ILFree (pidlFirst);
345
346 return hr;
347}
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176

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 634 of file CFSFolder.cpp.

635{
636 DWORD dwFileAttributes, dwShellAttributes;
637
638 if (!_ILIsFolderOrFile(pidl))
639 {
640 ERR("Got wrong type of pidl!\n");
641 *pdwAttributes &= SFGAO_CANLINK;
642 return S_OK;
643 }
644
646
647 /* Set common attributes */
648 dwShellAttributes = SFGAO_CANCOPY | SFGAO_CANMOVE | SFGAO_CANLINK | SFGAO_CANRENAME | SFGAO_CANDELETE |
649 SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_FILESYSTEM;
650
651 BOOL bDirectory = (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
652
653 if (SFGAO_VALIDATE & *pdwAttributes)
654 {
655 STRRET strret;
656 LPWSTR path;
657 if (SUCCEEDED(psf->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strret)) &&
658 SUCCEEDED(StrRetToStrW(&strret, pidl, &path)))
659 {
660 BOOL exists = PathFileExistsW(path);
661 SHFree(path);
662 if (!exists)
663 return E_FAIL;
664 }
665 }
666
667 if (!bDirectory)
668 {
669 // https://git.reactos.org/?p=reactos.git;a=blob;f=dll/shellext/zipfldr/res/zipfldr.rgs;hb=032b5aacd233cd7b83ab6282aad638c161fdc400#l9
670 WCHAR szFileName[MAX_PATH];
671 LPWSTR pExtension;
672 BOOL hasName = _ILSimpleGetTextW(pidl, szFileName, _countof(szFileName));
673 dwShellAttributes |= SFGAO_STREAM;
674
675 // Vista+ feature: Hidden files with a leading tilde treated as super-hidden
676 // See https://devblogs.microsoft.com/oldnewthing/20170526-00/?p=96235
677 if (hasName && szFileName[0] == '~' && (dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))
678 dwShellAttributes |= SFGAO_HIDDEN | SFGAO_SYSTEM;
679
680 if (hasName && (pExtension = PathFindExtensionW(szFileName)))
681 {
682 CLSID clsidFile;
683 // FIXME: Cache this?
684 HRESULT hr = GetCLSIDForFileTypeFromExtension(pExtension, L"CLSID", &clsidFile);
685 if (hr == S_OK)
686 {
687 HKEY hkey;
688 hr = SHRegGetCLSIDKeyW(clsidFile, L"ShellFolder", FALSE, FALSE, &hkey);
689 if (SUCCEEDED(hr))
690 {
692 DWORD dwSize = sizeof(dwAttributes);
694
696 if (Status == STATUS_SUCCESS)
697 {
698 TRACE("Augmenting '%S' with dwAttributes=0x%x\n", szFileName, dwAttributes);
699 dwShellAttributes |= dwAttributes;
700 }
701 ::RegCloseKey(hkey);
702
703 // This should be presented as directory!
704 bDirectory = (dwAttributes & SFGAO_FOLDER) != 0 || dwAttributes == 0;
705 TRACE("Treating '%S' as directory!\n", szFileName);
706 }
707 }
708 }
709 }
710
711 // This is a directory
712 if (bDirectory)
713 {
714 dwShellAttributes |= (SFGAO_FOLDER | /*SFGAO_HASSUBFOLDER |*/ SFGAO_STORAGE);
715
716 // Is this a real directory?
718 {
719 dwShellAttributes |= (SFGAO_FILESYSANCESTOR | SFGAO_STORAGEANCESTOR);
720 }
721 }
722
724 dwShellAttributes |= SFGAO_HIDDEN | SFGAO_GHOSTED;
725
727 dwShellAttributes |= SFGAO_READONLY;
728
730 dwShellAttributes |= SFGAO_SYSTEM;
731
733 dwShellAttributes |= SFGAO_COMPRESSED;
734
736 dwShellAttributes |= SFGAO_ENCRYPTED;
737
738 if ((SFGAO_NONENUMERATED & *pdwAttributes) && (dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))
739 {
741 if ((!(shcf & SHCONTF_INCLUDEHIDDEN)) || ((dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) && !(shcf & SHCONTF_INCLUDESUPERHIDDEN)))
742 dwShellAttributes |= SFGAO_NONENUMERATED;
743 }
744
745 if (SFGAO_LINK & *pdwAttributes)
746 {
748
749 if (_ILGetExtension(pidl, ext, _countof(ext)) && !lstrcmpiW(ext, L"lnk"))
750 dwShellAttributes |= SFGAO_LINK;
751 }
752
753 if (SFGAO_HASSUBFOLDER & *pdwAttributes)
754 {
755 CComPtr<IShellFolder> psf2;
756 if (SUCCEEDED(psf->BindToObject(pidl, 0, IID_PPV_ARG(IShellFolder, &psf2))))
757 {
758 CComPtr<IEnumIDList> pEnumIL;
759 if (SUCCEEDED(psf2->EnumObjects(0, SHCONTF_FOLDERS, &pEnumIL)))
760 {
761 if (pEnumIL->Skip(1) == S_OK)
762 dwShellAttributes |= SFGAO_HASSUBFOLDER;
763 }
764 }
765 }
766
767 *pdwAttributes = dwShellAttributes;
768
769 TRACE ("-- 0x%08x\n", *pdwAttributes);
770 return S_OK;
771}
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:4262
#define RRF_RT_REG_DWORD
Definition: driver.c:578
static HRESULT GetCLSIDForFileTypeFromExtension(LPCWSTR pExtension, LPCWSTR KeyName, CLSID *pclsid)
Definition: CFSFolder.cpp:109
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1783
HRESULT WINAPI SHRegGetCLSIDKeyW(REFGUID, LPCWSTR, BOOL, BOOL, PHKEY)
Definition: reg.c:2422
HRESULT WINAPI StrRetToStrW(LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *ppszName)
Definition: string.c:1631
unsigned int BOOL
Definition: ntddk_ex.h:94
Status
Definition: gdiplustypes.h:25
HRESULT GetDisplayNameOf([in] PCUITEMID_CHILD pidl, [in] SHGDNF uFlags, [out] STRRET *lpName)
static SHCONTF
Definition: ordinal.c:64
#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:2578
BOOL _ILGetExtension(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2531
#define STATUS_SUCCESS
Definition: shellext.h:65
SHCONTF SHELL_GetDefaultFolderEnumSHCONTF()
Definition: shlfolder.cpp:29
LSTATUS WINAPI SHRegGetValueW(_In_ HKEY hkey, _In_opt_ LPCWSTR pszSubKey, _In_opt_ LPCWSTR pszValue, _In_ SRRF srrfFlags, _Out_opt_ LPDWORD pdwType, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID pvData, _Inout_opt_ LPDWORD pcbData)
DWORD dwAttributes
Definition: vdmdbg.h:34
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by CFSFolder::GetAttributesOf().

◆ SHELL32_GUIDToStringA()

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

Definition at line 154 of file shfldr.h.

155{
156 return sprintf(str, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
157 guid.Data1, guid.Data2, guid.Data3,
158 guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
159 guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
160}
const GUID * guid
const WCHAR * str

◆ SHELL32_GUIDToStringW()

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

Definition at line 162 of file shfldr.h.

163{
164 static const WCHAR fmtW[] =
165 { '{','%','0','8','l','X','-','%','0','4','X','-','%','0','4','X','-',
166 '%','0','2','X','%','0','2','X','-',
167 '%','0','2','X','%','0','2','X','%','0','2','X','%','0','2','X',
168 '%','0','2','X','%','0','2','X','}',0 };
169 return swprintf(str, fmtW,
170 guid.Data1, guid.Data2, guid.Data3,
171 guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
172 guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
173}

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 204 of file shlfolder.cpp.

206{
208 LPITEMIDLIST pidlIn = pidlInOut ? *pidlInOut : NULL;
209 LPITEMIDLIST pidlOut = NULL;
210 LPITEMIDLIST pidlTemp = NULL;
211 CComPtr<IShellFolder> psfChild;
212
213 TRACE ("(%p, %p, %p, %s)\n", psf, pbc, pidlIn, debugstr_w (szNext));
214
215 /* get the shellfolder for the child pidl and let it analyse further */
216 hr = psf->BindToObject(pidlIn, pbc, IID_PPV_ARG(IShellFolder, &psfChild));
217 if (FAILED(hr))
218 return hr;
219
220 hr = psfChild->ParseDisplayName(hwndOwner, pbc, szNext, pEaten, &pidlOut, pdwAttributes);
221 if (FAILED(hr))
222 return hr;
223
224 pidlTemp = ILCombine (pidlIn, pidlOut);
225 if (!pidlTemp)
226 {
228 if (pidlOut)
229 ILFree(pidlOut);
230 return hr;
231 }
232
233 if (pidlOut)
234 ILFree (pidlOut);
235
236 if (pidlIn)
237 ILFree (pidlIn);
238
239 *pidlInOut = pidlTemp;
240
241 TRACE ("-- pidl=%p ret=0x%08x\n", pidlInOut ? *pidlInOut : NULL, hr);
242 return S_OK;
243}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define debugstr_w
Definition: kernel32.h:32
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:816

Referenced by CRegFolder::ParseDisplayName().

◆ SHELL_CreateAbsolutePidl()

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

Definition at line 142 of file shlfolder.cpp.

143{
144 PIDLIST_ABSOLUTE pidlFolder;
145 HRESULT hr = SHGetIDListFromObject(pSF, &pidlFolder);
146 if (SUCCEEDED(hr))
147 {
148 hr = SHILCombine(pidlFolder, pidlChild, ppPidl);
149 ILFree(pidlFolder);
150 }
151 return hr;
152}
HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
Definition: pidl.c:1673

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 1453 of file CFSFolder.cpp.

1454{
1455 HKEY hKey;
1456 BOOL doHide = FALSE; /* The default value is FALSE (win98 at least) */
1457 LONG lError;
1458
1459 doHide = !SHELL_GetSetting(SSF_SHOWEXTENSIONS, fShowExtensions);
1460
1461 if (!doHide)
1462 {
1464 if (*DotExt != 0)
1465 {
1467 LONG classlen = sizeof(classname);
1468 lError = RegQueryValueW(HKEY_CLASSES_ROOT, DotExt, classname, &classlen);
1469 if (lError == ERROR_SUCCESS)
1470 {
1472 if (lError == ERROR_SUCCESS)
1473 {
1474 lError = RegQueryValueExW(hKey, L"NeverShowExt", NULL, NULL, NULL, NULL);
1475 if (lError == ERROR_SUCCESS)
1476 doHide = TRUE;
1477
1479 }
1480 }
1481 }
1482 }
1483
1484 return doHide;
1485}
#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:876
#define SSF_SHOWEXTENSIONS
Definition: shlobj.h:1614

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

◆ SHELL_FS_ProcessDisplayFilename()

void SHELL_FS_ProcessDisplayFilename ( LPWSTR  szPath,
DWORD  dwFlags 
)

Definition at line 1487 of file CFSFolder.cpp.

1488{
1489 /*FIXME: MSDN also mentions SHGDN_FOREDITING which is not yet handled. */
1490 if (!(dwFlags & SHGDN_FORPARSING) &&
1491 ((dwFlags & SHGDN_INFOLDER) || (dwFlags == SHGDN_NORMAL))) {
1492 if (SHELL_FS_HideExtension(szPath) && szPath[0] != '.')
1494 }
1495}
BOOL SHELL_FS_HideExtension(LPCWSTR szPath)
Definition: CFSFolder.cpp:1453
void WINAPI PathRemoveExtensionW(LPWSTR lpszPath)
Definition: path.c:823

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:1629
#define SSF_SHOWALLOBJECTS
Definition: shlobj.h:1613

Referenced by SHELL32_GetFSItemAttributes().

◆ SHELL_GetDetailsOfAsStringVariant()

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

Definition at line 95 of file shlfolder.cpp.

96{
97 V_VT(pVar) = VT_EMPTY;
99 sd.str.uType = STRRET_CSTR;
100 HRESULT hr = pSF->GetDetailsOf(pidl, Column, &sd);
101 if (FAILED(hr))
102 return hr;
103 if (FAILED(hr = StrRetToBSTR(&sd.str, pidl, &V_BSTR(pVar))))
104 return hr;
105 V_VT(pVar) = VT_BSTR;
106 return hr;
107}
@ VT_BSTR
Definition: compat.h:2303
HRESULT WINAPI StrRetToBSTR(STRRET *lpStrRet, LPCITEMIDLIST pidl, BSTR *pBstrOut)
Definition: string.c:1700
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
@ STRRET_CSTR
Definition: shtypes.idl:87

Referenced by CFSFolder::GetDetailsEx(), and SHELL_GetDetailsOfColumnAsVariant().

◆ SHELL_GetDetailsOfColumnAsVariant()

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

Definition at line 110 of file shlfolder.cpp.

111{
112 HRESULT hr = SHELL_GetDetailsOfAsStringVariant(pSF, pidl, Column, pVar);
113 if (FAILED(hr))
114 return hr;
115 if (vt == VT_EMPTY)
116 {
118 if (FAILED(pSF->GetDefaultColumnState(Column, &state)))
121 vt = VT_I8;
123 vt = VT_DATE;
124 else
125 vt = VT_BSTR;
126 }
127 if (vt != VT_BSTR)
128 VariantChangeType(pVar, pVar, 0, vt);
129 return hr;
130}
static int state
Definition: maze.c:121
@ VT_I8
Definition: compat.h:2314
@ VT_DATE
Definition: compat.h:2302
HRESULT GetDefaultColumnState([in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags)
HRESULT SHELL_GetDetailsOfAsStringVariant(IShellFolder2 *pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
Definition: shlfolder.cpp:95
@ 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_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 155 of file shlfolder.cpp.

160{
161 *pszOut = UNICODE_NULL;
162
163 if (!*ppch)
164 return S_FALSE;
165
166 HRESULT hr;
167 LPWSTR pchNext = wcschr(*ppch, L'\\');
168 if (pchNext)
169 {
170 if (*ppch < pchNext)
171 {
172 /* Get an element */
173 StringCchCopyNW(pszOut, cchOut, *ppch, pchNext - *ppch);
174 ++pchNext;
175
176 if (!*pchNext)
177 pchNext = NULL; /* No next */
178
179 hr = S_OK;
180 }
181 else /* Double backslashes found? */
182 {
183 pchNext = NULL;
185 }
186 }
187 else /* No more next */
188 {
189 StringCchCopyW(pszOut, cchOut, *ppch);
190 hr = S_OK;
191 }
192
193 *ppch = pchNext; /* Go next */
194
195 if (hr == S_OK && bValidate && !PathIsValidElement(pszOut))
196 {
197 *pszOut = UNICODE_NULL;
199 }
200
201 return hr;
202}
#define wcschr
Definition: compat.h:17
BOOL PathIsValidElement(_In_ LPCWSTR pszPath)
Definition: utils.cpp:158
#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:2357

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