ReactOS 0.4.16-dev-1025-gd3456f5
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);
113SH32_GetDetailsOfPKeyAsVariant(IShellFolder2 *pSF, PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pVar, BOOL UseFsColMap);
114
117
120 _Inout_ LPWSTR *ppch,
121 _Out_ LPWSTR pszOut,
122 _In_ INT cchOut,
123 _In_ BOOL bValidate);
124
125HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST * pidlInOut,
126 LPOLESTR szNext, DWORD * pEaten, DWORD * pdwAttributes);
127
129
131
133
135
136#ifdef __cplusplus
137HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO* ppfti,
138 LPCITEMIDLIST pidlChild, const GUID* clsid, REFIID riid, LPVOID *ppvOut);
139
141 int csidl, REFIID riid, LPVOID *ppvOut);
142#endif
143
144HRESULT SHELL32_BindToSF (LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO* ppfti,
145 LPCITEMIDLIST pidl, const GUID* clsid, REFIID riid, LPVOID *ppvOut);
146
147extern "C"
149
151
152HRESULT SH_GetApidlFromDataObject(IDataObject *pDataObject, PIDLIST_ABSOLUTE* ppidlfolder, PUITEMID_CHILD **apidlItems, UINT *pcidl);
153
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}
161
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}
174
177
179{
180 return StrIsNullOrEmpty(Name) || StrPBrkW(Name, INVALID_FILETITLE_CHARACTERSW);
181}
182
183void CloseRegKeyArray(HKEY* array, UINT cKeys);
184LSTATUS AddClassKeyToArray(const WCHAR* szClass, HKEY* array, UINT* cKeys);
187
188#ifdef __cplusplus
189
190struct CRegKeyHandleArray
191{
192 HKEY hKeys[16];
193 UINT cKeys;
194
195 CRegKeyHandleArray() : cKeys(0) {}
196 ~CRegKeyHandleArray() { CloseRegKeyArray(hKeys, cKeys); }
197 operator HKEY*() { return hKeys; }
198 operator UINT*() { return &cKeys; }
199 operator UINT() { return cKeys; }
200 HKEY& operator [](SIZE_T i) { return hKeys[i]; }
201};
202
203HRESULT inline SHSetStrRet(LPSTRRET pStrRet, DWORD resId)
204{
205 return SHSetStrRet(pStrRet, shell32_hInstance, resId);
206}
207
208#endif
209
210#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:13
#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
unsigned short VARTYPE
Definition: compat.h:2254
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
LPWSTR WINAPI StrPBrkW(LPCWSTR lpszStr, LPCWSTR lpszMatch)
Definition: string.c:1284
#define swprintf
Definition: precomp.h:40
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
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
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
const GUID * guid
LPCWSTR szPath
Definition: env.c:37
#define sprintf(buf, format,...)
Definition: sprintf.c:55
static LPOLESTR
Definition: stg_prop.c:27
static SHCONTF
Definition: ordinal.c:64
REFCLSID clsid
Definition: msctf.c:82
unsigned int UINT
Definition: ndis.h:50
#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
BYTE PIDLTYPE
Definition: pidl.h:136
#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:133
HRESULT SHELL32_BindToSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidl, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
Definition: shlfolder.cpp:293
HRESULT SHELL_CreateAbsolutePidl(IShellFolder *pSF, PCUIDLIST_RELATIVE pidlChild, PIDLIST_ABSOLUTE *ppPidl)
Definition: shlfolder.cpp:142
static HRESULT MakeSCID(SHCOLUMNID &scid, REFCLSID fmtid, UINT pid)
Definition: shfldr.h:99
HRESULT SHELL32_GetDisplayNameOfChild(IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
Definition: shlfolder.cpp:331
SHCONTF SHELL_GetDefaultFolderEnumSHCONTF()
Definition: shlfolder.cpp:29
HRESULT SHELL32_CompareChildren(IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:349
void AddFSClassKeysToArray(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:430
HRESULT SHELL_GetDetailsOfAsStringVariant(IShellFolder2 *pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
Definition: shlfolder.cpp:95
static __inline int SHELL32_GUIDToStringW(REFGUID guid, LPWSTR str)
Definition: shfldr.h:162
HRESULT SHELL32_GetFSItemAttributes(IShellFolder *psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes)
Definition: CFSFolder.cpp:634
static __inline int SHELL32_GUIDToStringA(REFGUID guid, LPSTR str)
Definition: shfldr.h:154
static SFGAOF SHELL_CreateFolderEnumItemAttributeQuery(SHCONTF Flags, BOOL ForRegItem)
Definition: shfldr.h:82
static BOOL IsIllegalFsFileName(PCWSTR Name)
Definition: shfldr.h:178
LSTATUS AddClsidKeyToArray(REFCLSID clsid, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:423
struct _REQUIREDREGITEM REQUIREDREGITEM
LSTATUS AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
Definition: shlfolder.cpp:408
HRESULT SHELL32_CompareDetails(IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:372
struct _REGFOLDERINITDATA REGFOLDERINITDATA
HRESULT SH_GetApidlFromDataObject(IDataObject *pDataObject, PIDLIST_ABSOLUTE *ppidlfolder, PUITEMID_CHILD **apidlItems, UINT *pcidl)
Definition: shlfolder.cpp:499
struct _REGFOLDERINFO REGFOLDERINFO
void CloseRegKeyArray(HKEY *array, UINT cKeys)
Definition: shlfolder.cpp:402
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
HRESULT CRegFolder_CreateInstance(PREGFOLDERINITDATA pInit, LPCITEMIDLIST pidlRoot, REFIID riid, void **ppv)
Definition: CRegFolder.cpp:970
HRESULT Shell_NextElement(_Inout_ LPWSTR *ppch, _Out_ LPWSTR pszOut, _In_ INT cchOut, _In_ BOOL bValidate)
Definition: shlfolder.cpp:155
HRESULT SHELL32_ParseNextElement(IShellFolder2 *psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST *pidlInOut, LPOLESTR szNext, DWORD *pEaten, DWORD *pdwAttributes)
Definition: shlfolder.cpp:204
void SHELL_FS_ProcessDisplayFilename(LPWSTR szPath, DWORD dwFlags)
Definition: CFSFolder.cpp:1487
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
HRESULT CDefViewBckgrndMenu_CreateInstance(IShellFolder *psf, REFIID riid, void **ppv)
BOOL SHELL_FS_HideExtension(LPCWSTR pwszPath)
Definition: CFSFolder.cpp:1453
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
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
WORD fmt
Definition: shfldr.h:34
WORD colnameid
Definition: shfldr.h:31
WORD cxChar
Definition: shfldr.h:35
WORD colstate
Definition: shfldr.h:32
const uint16_t * PCWSTR
Definition: typedefs.h:57
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t * LPDWORD
Definition: typedefs.h:59
int32_t INT
Definition: typedefs.h:58
#define INVALID_FILETITLE_CHARACTERSW
Definition: undocshell.h:1002
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
Definition: winddi.h:3837
LONG_PTR LPARAM
Definition: windef.h:208
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
const char * LPCSTR
Definition: xmlstorage.h:183
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193