ReactOS 0.4.17-dev-470-gf9e3448
shfldr.h
Go to the documentation of this file.
1
2/*
3 * Virtual Folder
4 * common definitions
5 *
6 * Copyright 1997 Marcus Meissner
7 * Copyright 1998, 1999, 2002 Juergen Schmied
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 */
23
24#ifndef _SHFLDR_H_
25#define _SHFLDR_H_
26#include <ntquery.h> // For PID_STG_*
27
28#define CHARS_IN_GUID 39
29
30typedef struct {
31 WORD colnameid; // Column title text resource id passed to LoadString
32 WORD colstate; // SHCOLSTATEF returned by IShellFolder2::GetDefaultColumnState
33 // HACK: SHCOLSTATEF truncated to WORD to reduce .rdata section size
34 WORD fmt; // LVCFMT_*
35 WORD cxChar; // Column width hint
36} shvheader;
37/*
38 * CFSFolder column indices. CDesktopFolder MUST use the same indices!
39 * According to the documentation for IShellFolder2::GetDetailsOf,
40 * the first 4 columns for SFGAO_FILESYSTEM items must be Name, Size, Type, Modified date
41For Details See:
42https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ishellfolder2-getdetailsof
43 */
44#define SHFSF_COL_NAME 0
45#define SHFSF_COL_SIZE 1
46#define SHFSF_COL_TYPE 2 // SHGFI_TYPENAME
47#define SHFSF_COL_MDATE 3 // Modified date
48#define SHFSF_COL_FATTS 4 // File attributes
49#define SHFSF_COL_COMMENT 5
50
51typedef struct _REQUIREDREGITEM
52{
55 BYTE Order; // According to Geoff Chappell, required items have a fixed sort order
57
58typedef struct _REGFOLDERINFO
59{
61 BYTE Count; // Count of required items
67
68typedef struct _REGFOLDERINITDATA
69{
73
75
76#define GET_SHGDN_FOR(dwFlags) ((DWORD)dwFlags & (DWORD)0x0000FF00)
77#define GET_SHGDN_RELATION(dwFlags) ((DWORD)dwFlags & (DWORD)0x000000FF)
78#define IS_SHGDN_FOR_PARSING(flags) ( ((flags) & (SHGDN_FORADDRESSBAR | SHGDN_FORPARSING)) == SHGDN_FORPARSING)
79#define IS_SHGDN_DESKTOPABSOLUTEPARSING(flags) ( ((flags) & (SHGDN_FORADDRESSBAR | SHGDN_FORPARSING | 0xFF)) == SHGDN_FORPARSING)
80
81static inline SFGAOF
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}
91
94
95BOOL
97
98static inline HRESULT
99MakeSCID(SHCOLUMNID &scid, REFCLSID fmtid, UINT pid)
100{
101 scid.fmtid = fmtid;
102 scid.pid = pid;
103 return S_OK;
104}
105
107SHELL_MapSCIDToColumn(IShellFolder2 *pSF, const SHCOLUMNID *pscid);
115SH32_GetDetailsOfPKeyAsVariant(IShellFolder2 *pSF, PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pVar, BOOL UseFsColMap);
116
119
122
125 _Inout_ LPWSTR *ppch,
126 _Out_ LPWSTR pszOut,
127 _In_ INT cchOut,
128 _In_ BOOL bValidate);
129
130HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST * pidlInOut,
131 LPOLESTR szNext, DWORD * pEaten, DWORD * pdwAttributes);
132
134
136
138
140
141#ifdef __cplusplus
142HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO* ppfti,
143 LPCITEMIDLIST pidlChild, const GUID* clsid, REFIID riid, LPVOID *ppvOut);
144
146 int csidl, REFIID riid, LPVOID *ppvOut);
147#endif
148
149HRESULT SHELL32_BindToSF (LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO* ppfti,
150 LPCITEMIDLIST pidl, const GUID* clsid, REFIID riid, LPVOID *ppvOut);
151
152extern "C"
154
156
157HRESULT SH_GetApidlFromDataObject(IDataObject *pDataObject, PIDLIST_ABSOLUTE* ppidlfolder, PUITEMID_CHILD **apidlItems, UINT *pcidl);
158
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}
166
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}
179
182
184{
185 return StrIsNullOrEmpty(Name) || StrPBrkW(Name, INVALID_FILETITLE_CHARACTERSW);
186}
187
188void CloseRegKeyArray(HKEY* array, UINT cKeys);
189LSTATUS AddClassKeyToArray(const WCHAR* szClass, HKEY* array, UINT* cKeys);
193
194#ifdef __cplusplus
195
197{
198 HKEY hKeys[16];
199 UINT cKeys;
200
201 CRegKeyHandleArray() : cKeys(0) {}
203 operator HKEY*() { return hKeys; }
204 operator UINT*() { return &cKeys; }
205 operator UINT() { return cKeys; }
206 HKEY& operator [](SIZE_T i) { return hKeys[i]; }
207};
208
209HRESULT inline SHSetStrRet(LPSTRRET pStrRet, DWORD resId)
210{
211 return SHSetStrRet(pStrRet, shell32_hInstance, resId);
212}
213
214#endif
215
217
218#endif /* _SHFLDR_H_ */
static HRESULT SHELL32_CoCreateInitSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidlChild, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
Definition: CFindFolder.cpp:39
#define shell32_hInstance
#define __inline
Definition: _wctype.cpp:15
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
Definition: query.c:292
LPARAM lParam
Definition: combotst.c:139
LPWSTR Name
Definition: desk.c:124
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define SFGAO_SYSTEM
Definition: shobjidl.idl:198
void CloseRegKeyArray(HKEY *array, UINT cKeys)
Definition: fontext.cpp:103
unsigned short VARTYPE
Definition: compat.h:2254
WCHAR *WINAPI StrPBrkW(const WCHAR *str, const WCHAR *match)
Definition: string.c:760
GUID guid
Definition: version.c:147
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
PWDFDEVICE_INIT pInit
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
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
LONG_PTR LPARAM
Definition: minwindef.h:175
LPCWSTR szPath
Definition: env.c:37
#define sprintf
Definition: sprintf.c:45
#define _swprintf(buf, format,...)
Definition: sprintf.c:56
static SHCONTF
Definition: ordinal.c:61
const CLSID * clsid
Definition: msctf.cpp:50
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
interface IBindCtx * LPBC
Definition: objfwd.h:18
short WCHAR
Definition: pedump.c:58
BYTE PIDLTYPE
Definition: pidl.h:156
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
const WCHAR * str
HRESULT SH32_GetDetailsOfPKeyAsVariant(IShellFolder2 *pSF, PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pVar, BOOL UseFsColMap)
Definition: shlfolder.cpp:152
HRESULT SHELL32_BindToSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidl, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
Definition: shlfolder.cpp:325
HRESULT SHELL_GetDetailsOfAsStringVariant(IShellFolder *pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
Definition: shlfolder.cpp:116
HRESULT SHELL_CreateAbsolutePidl(IShellFolder *pSF, PCUIDLIST_RELATIVE pidlChild, PIDLIST_ABSOLUTE *ppPidl)
Definition: shlfolder.cpp:174
HRESULT SHELL_QueryInfoTipAlloc(_In_ IShellFolder *pSF, _In_ DWORD dwFlags, _In_ LPCITEMIDLIST pidl, _Out_ PWSTR *ppTip)
Definition: shlfolder.cpp:162
static HRESULT MakeSCID(SHCOLUMNID &scid, REFCLSID fmtid, UINT pid)
Definition: shfldr.h:99
UINT SHELL_GetIconUnderlineFlags()
Definition: general.cpp:134
HRESULT SHELL32_GetDisplayNameOfChild(IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
Definition: shlfolder.cpp:363
SHCONTF SHELL_GetDefaultFolderEnumSHCONTF()
Definition: shlfolder.cpp:29
HRESULT SHELL32_CompareChildren(IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:381
void AddFSClassKeysToArray(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:462
static __inline int SHELL32_GUIDToStringW(REFGUID guid, LPWSTR str)
Definition: shfldr.h:167
HRESULT SHELL32_GetFSItemAttributes(IShellFolder *psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes)
Definition: CFSFolder.cpp:644
static __inline int SHELL32_GUIDToStringA(REFGUID guid, LPSTR str)
Definition: shfldr.h:159
static SFGAOF SHELL_CreateFolderEnumItemAttributeQuery(SHCONTF Flags, BOOL ForRegItem)
Definition: shfldr.h:82
static BOOL IsIllegalFsFileName(PCWSTR Name)
Definition: shfldr.h:183
LSTATUS AddClsidKeyToArray(REFCLSID clsid, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:455
struct _REQUIREDREGITEM REQUIREDREGITEM
LSTATUS AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
Definition: fontext.cpp:109
HRESULT SHELL32_CompareDetails(IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:404
struct _REGFOLDERINITDATA REGFOLDERINITDATA
HRESULT SH_GetApidlFromDataObject(IDataObject *pDataObject, PIDLIST_ABSOLUTE *ppidlfolder, PUITEMID_CHILD **apidlItems, UINT *pcidl)
Definition: shlfolder.cpp:542
struct _REGFOLDERINFO REGFOLDERINFO
void CloseRegKeyArray(HKEY *array, UINT cKeys)
Definition: fontext.cpp:103
BOOL HCR_RegOpenClassIDKey(REFIID riid, HKEY *hkey)
Definition: classes.c:253
struct _REGFOLDERINITDATA * PREGFOLDERINITDATA
BOOL SHELL_IncludeItemInFolderEnum(IShellFolder *pSF, PCUITEMID_CHILD pidl, SFGAOF Query, SHCONTF Flags)
Definition: shlfolder.cpp:41
void AddPidlClassKeysToArray(LPCITEMIDLIST pidl, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:536
HRESULT CRegFolder_CreateInstance(PREGFOLDERINITDATA pInit, LPCITEMIDLIST pidlRoot, REFIID riid, void **ppv)
Definition: CRegFolder.cpp:995
HRESULT Shell_NextElement(_Inout_ LPWSTR *ppch, _Out_ LPWSTR pszOut, _In_ INT cchOut, _In_ BOOL bValidate)
Definition: shlfolder.cpp:187
HRESULT SHELL32_ParseNextElement(IShellFolder2 *psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST *pidlInOut, LPOLESTR szNext, DWORD *pEaten, DWORD *pdwAttributes)
Definition: shlfolder.cpp:236
void SHELL_FS_ProcessDisplayFilename(LPWSTR szPath, DWORD dwFlags)
Definition: CFSFolder.cpp:1479
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
HRESULT CDefViewBckgrndMenu_CreateInstance(IShellFolder *psf, REFIID riid, void **ppv)
BOOL SHELL_FS_HideExtension(LPCWSTR pwszPath)
Definition: CFSFolder.cpp:1444
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
ITEMID_CHILD UNALIGNED * PUITEMID_CHILD
Definition: shtypes.idl:68
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
Definition: shtypes.idl:71
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
HKEY hKeys[16]
Definition: precomp.h:103
HKEY & operator[](SIZE_T i)
Definition: precomp.h:111
Definition: scsiwmi.h:51
const REQUIREDREGITEM * Items
Definition: shfldr.h:62
REFCLSID clsid
Definition: shfldr.h:63
LPCWSTR pszParsingPath
Definition: shfldr.h:64
LPCWSTR pszEnumKeyName
Definition: shfldr.h:65
BYTE Count
Definition: shfldr.h:61
PIDLTYPE PidlType
Definition: shfldr.h:60
IShellFolder * psfOuter
Definition: shfldr.h:70
const REGFOLDERINFO * pInfo
Definition: shfldr.h:71
LPCSTR pszCpl
Definition: shfldr.h:54
REFCLSID clsid
Definition: shfldr.h:53
Definition: undname.c:54
WORD fmt
Definition: shfldr.h:34
WORD colnameid
Definition: shfldr.h:31
WORD cxChar
Definition: shfldr.h:35
WORD colstate
Definition: shfldr.h:32
uint16_t * PWSTR
Definition: typedefs.h:56
const char * LPCSTR
Definition: typedefs.h:52
const uint16_t * PCWSTR
Definition: typedefs.h:57
const uint16_t * LPCWSTR
Definition: typedefs.h:57
uint16_t * LPWSTR
Definition: typedefs.h:56
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t * LPDWORD
Definition: typedefs.h:59
char * LPSTR
Definition: typedefs.h:51
int32_t INT
Definition: typedefs.h:58
#define INVALID_FILETITLE_CHARACTERSW
Definition: undocshell.h:1084
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
Definition: winddi.h:3837
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
unsigned char BYTE
Definition: xxhash.c:193