ReactOS 0.4.15-dev-7928-g68a8619
pidl.h
Go to the documentation of this file.
1/*
2 * internal pidl functions
3 *
4 * Copyright 1998 Juergen Schmied
5 * Copyright 2004 Juan Lang
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 *
21 * NOTES:
22 *
23 * DO NOT use these definitions outside the shell32.dll!
24 *
25 * The contents of a pidl should never be used directly from an application.
26 *
27 * Undocumented:
28 * MS says: the abID of SHITEMID should be treated as binary data and not
29 * be interpreted by applications. Applies to everyone but MS itself.
30 * Word95 interprets the contents of abID (Filesize/Date) so we have to go
31 * for binary compatibility here.
32 */
33
34#ifndef __WINE_PIDL_H
35#define __WINE_PIDL_H
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41/*
42* the pidl does cache fileattributes to speed up SHGetAttributes when
43* displaying a big number of files.
44*
45* a pidl of NULL means the desktop
46*
47* The structure of the pidl seems to be a union. The first byte of the
48* PIDLDATA describes the type of pidl.
49*
50* object ! first byte / ! format ! living space
51* ! size
52* ----------------------------------------------------------------
53* my computer 0x1F/20 guid (2) (usual)
54* network 0x1F guid
55* bitbucket 0x1F guid
56* drive 0x23/25 drive (usual)
57* drive 0x25/25 drive (lnk/persistent)
58* drive 0x29/25 drive
59* shell extension 0x2E guid
60* drive 0x2F drive (lnk/persistent)
61* folder/file 0x30 folder/file (1) (lnk/persistent)
62* folder 0x31 folder (usual)
63* valueA 0x32 file (ANSI file name)
64* valueW 0x34 file (Unicode file name)
65* workgroup 0x41 network (3)
66* computer 0x42 network (4)
67* net provider 0x46 network
68* whole network 0x47 network (5)
69* MSITStore 0x61 htmlhlp (7)
70* printers/ras connections 0x70 guid
71* history/favorites 0xb1 file
72* share 0xc3 network (6)
73*
74* guess: the persistent elements are non tracking
75*
76* (1) dummy byte is used, attributes are empty
77* (2) IID_MyComputer = 20D04FE0L-3AEA-1069-A2D8-08002B30309D
78* (3) two strings "workgroup" "Microsoft Network"
79* (4) two strings "\\sirius" "Microsoft Network"
80* (5) one string "Entire Network"
81* (6) two strings "\\sirius\c" "Microsoft Network"
82* (7) contains string "mk:@MSITStore:C:\path\file.chm::/path/filename.htm"
83* GUID 871C5380-42A0-1069-A2EA-08002B30309D
84*/
85
86#define PT_CPLAPPLET 0x00
87#define PT_GUID 0x1F
88#define PT_DRIVE 0x23
89#define PT_DRIVE2 0x25
90#define PT_DRIVE3 0x29
91#define PT_SHELLEXT 0x2E
92#define PT_DRIVE1 0x2F
93#define PT_FOLDER1 0x30
94#define PT_FOLDER 0x31
95#define PT_VALUE 0x32
96#define PT_VALUEW 0x34
97#define PT_FOLDERW 0x35
98#define PT_WORKGRP 0x41
99#define PT_COMP 0x42
100#define PT_NETPROVIDER 0x46
101#define PT_NETWORK 0x47
102#define PT_IESPECIAL1 0x61
103#define PT_YAGUID 0x70 /* yet another guid.. */
104#define PT_IESPECIAL2 0xb1
105#define PT_SHARE 0xc3
106
107#include "pshpack1.h"
109
111{
112 BYTE dummy; /*01 is 0x00 */
113 DWORD iconIdx; /*02 negative icon ID */
116 WCHAR szName[1]; /*10*/ /* terminated by 0x00, followed by display name and comment string */
118
119#ifdef __REACTOS__
120
121typedef struct tagPIDLFontStruct
122{
123 BYTE dummy;
124 WORD offsFile;
125 WCHAR szName[1];
126} PIDLFontStruct;
127
128typedef struct tagPIDLPrinterStruct
129{
130 BYTE dummy;
132 WORD offsServer;
133 WCHAR szName[1];
134} PIDLPrinterStruct;
135
136typedef struct tagPIDLRecycleStruct
137{
138 FILETIME LastModification;
139 FILETIME DeletionTime;
141 ULARGE_INTEGER PhysicalFileSize;
143 WCHAR szName[1];
144} PIDLRecycleStruct;
145
146#endif /* !__REACTOS__ */
147
148typedef struct tagGUIDStruct
149{
150 BYTE dummy; /* offset 01 is unknown */
151 GUID guid; /* offset 02 */
153
154typedef struct tagDriveStruct
155{
156 CHAR szDriveName[20]; /*01*/
157 WORD unknown; /*21*/
159
160typedef struct tagFileStruct
161{
162 BYTE dummy; /*01 is 0x00 for files or dirs */
167 CHAR szNames[1]; /*12*/
168 /* Here are coming two strings. The first is the long name.
169 The second the dos name when needed or just 0x00 */
171
172/* At least on WinXP, this struct is appended with 2-byte-alignment to FileStruct. There follows
173 * a WORD member after the wszName string, which gives the offset from the beginning of the PIDL
174 * to the FileStructW member. */
175typedef struct tagFileStructW {
185
186typedef struct tagValueW
187{
190
191typedef struct tagPIDLDATA
192{ PIDLTYPE type; /*00*/
193 union
194 {
198 struct
199 { WORD dummy; /*01*/
200 CHAR szNames[1]; /*03*/
202 struct
203 { WORD dummy; /*01*/
204 DWORD dummy1; /*02*/
205 CHAR szName[1]; /*06*/ /* terminated by 0x00 0x00 */
209#ifdef __REACTOS__
210 struct tagPIDLFontStruct cfont;
211 struct tagPIDLPrinterStruct cprinter;
212 struct tagPIDLRecycleStruct crecycle;
213#endif
216#include "poppack.h"
217
218/*
219 * getting special values from simple pidls
220 */
226void _ILGetFileType (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
228
231
232/*
233 * testing simple pidls
234 */
238#ifdef __REACTOS__
243#endif
250static inline
252{
253 return (pidlA->mkid.cb > 0 && !memcmp(pidlA, pidlB, pidlA->mkid.cb)) ||
254 (!pidlA->mkid.cb && !pidlB->mkid.cb);
255}
256static inline
258
259/*
260 * simple pidls
261 */
262
263/* Creates a PIDL with guid format and type type, which must be one of PT_GUID,
264 * PT_SHELLEXT, or PT_YAGUID.
265 */
267
268/* Like _ILCreateGuid, but using the string szGUID. */
271
272/* Commonly used PIDLs representing file system objects. */
276
277/* Other helpers */
285#ifdef __REACTOS__
287#endif
291
292/*
293 * helper functions (getting struct-pointer)
294 */
299
300/*
301 * debug helper
302 */
305
306/*
307 * aPidl helper
308 */
312
314
315#ifdef __cplusplus
316} /* extern "C" */
317#endif
318
319#endif /* __WINE_PIDL_H */
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define DECLSPEC_HIDDEN
Definition: precomp.h:8
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
Definition: fsrtlfuncs.h:108
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
const GUID * guid
LPCWSTR szPath
Definition: env.c:37
unsigned int UINT
Definition: ndis.h:50
BOOL _ILIsMyDocuments(LPCITEMIDLIST pidl)
Definition: pidl.c:1942
BOOL _ILIsBitBucket(LPCITEMIDLIST pidl)
Definition: pidl.c:1986
BOOL _ILIsNetHood(LPCITEMIDLIST pidl)
Definition: pidl.c:1953
BOOL _ILIsControlPanel(LPCITEMIDLIST pidl)
Definition: pidl.c:1964
LPITEMIDLIST _ILCreateAdminTools(void)
Definition: pidl.c:1725
LPITEMIDLIST _ILCreatePrinters(void) DECLSPEC_HIDDEN
Definition: pidl.c:1694
LPITEMIDLIST _ILCreateDesktop(void) DECLSPEC_HIDDEN
Definition: pidl.c:1646
void pdump(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: debughlp.cpp:311
struct tagPIDLDATA PIDLDATA
BOOL _ILIsCPanelStruct(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: pidl.c:2038
LPITEMIDLIST _ILCreateDrive(LPCWSTR) DECLSPEC_HIDDEN
Definition: pidl.c:1852
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN
Definition: pidl.c:2650
BOOL pcheck(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: debughlp.cpp:349
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST *pidl, const CIDA *cida) DECLSPEC_HIDDEN
Definition: pidl.c:2728
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN
Definition: pidl.c:2151
LPITEMIDLIST _ILCreateNetwork(void) DECLSPEC_HIDDEN
Definition: pidl.c:1713
LPITEMIDLIST _ILCreateEntireNetwork(void) DECLSPEC_HIDDEN
Definition: pidl.c:1874
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: pidl.c:2369
struct tagPIDLCPanelStruct PIDLCPanelStruct
void _ILFreeaPidl(LPITEMIDLIST *apidl, UINT cidl) DECLSPEC_HIDDEN
Definition: pidl.c:2690
BOOL _ILIsDrive(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: pidl.c:2008
BYTE PIDLTYPE
Definition: pidl.h:108
LPITEMIDLIST _ILCreateMyDocuments(void) DECLSPEC_HIDDEN
Definition: pidl.c:1663
struct tagDriveStruct DriveStruct
struct tagFileStruct FileStruct
LPITEMIDLIST _ILCreateNetHood(void) DECLSPEC_HIDDEN
HRESULT _ILCreateFromPathW(LPCWSTR szPath, LPITEMIDLIST *ppidl) DECLSPEC_HIDDEN
Definition: pidl.c:1833
BOOL _ILIsDesktop(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: CBandSite.h:24
LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID) DECLSPEC_HIDDEN
Definition: pidl.c:1756
BOOL _ILIsUnicode(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: pidl.c:1926
static BOOL _ILIsEqualSimple(LPCITEMIDLIST pidlA, LPCITEMIDLIST pidlB)
Definition: pidl.h:251
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: pidl.c:1975
PITEMID_CHILD * _ILCopyaPidl(PCUITEMID_CHILD_ARRAY apidlsrc, UINT cidl) DECLSPEC_HIDDEN
Definition: pidl.c:2707
LPSTR _ILGetTextPointer(LPCITEMIDLIST) DECLSPEC_HIDDEN
Definition: pidl.c:2298
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID) DECLSPEC_HIDDEN
Definition: pidl.c:1769
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: pidl.c:1997
LPITEMIDLIST _ILCreateControlPanel(void) DECLSPEC_HIDDEN
Definition: pidl.c:1675
LPITEMIDLIST _ILCreateBitBucket(void) DECLSPEC_HIDDEN
Definition: pidl.c:1719
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST) DECLSPEC_HIDDEN
Definition: pidl.c:2231
struct tagFileStructW FileStructW
BOOL _ILIsFolder(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: pidl.c:2020
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN
Definition: pidl.c:2510
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *stffile) DECLSPEC_HIDDEN
Definition: pidl.c:1785
BOOL _ILIsPidlSimple(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
BOOL _ILGetFileDateTime(LPCITEMIDLIST pidl, FILETIME *ft) DECLSPEC_HIDDEN
Definition: pidl.c:2447
DWORD _ILGetDrive(LPCITEMIDLIST, LPSTR, UINT) DECLSPEC_HIDDEN
Definition: pidl.c:1899
BOOL _ILGetFileDate(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN
Definition: pidl.c:2466
LPITEMIDLIST _ILCreateIExplore(void) DECLSPEC_HIDDEN
Definition: pidl.c:1669
void _ILGetFileType(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN
Definition: pidl.c:2577
struct tagValueW ValueWStruct
BOOL _ILIsValue(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: pidl.c:2029
DWORD _ILSimpleGetText(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN
Definition: pidl.c:2079
static BOOL _ILIsEmpty(LPCITEMIDLIST pidl)
Definition: pidl.h:257
FileStructW * _ILGetFileStructW(LPCITEMIDLIST pidl) DECLSPEC_HIDDEN
Definition: pidl.c:2405
struct tagGUIDStruct GUIDStruct
struct tagPIDLDATA * LPPIDLDATA
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type) DECLSPEC_HIDDEN
Definition: pidl.c:100
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid) DECLSPEC_HIDDEN
Definition: pidl.c:1731
LPITEMIDLIST _ILCreateMyComputer(void) DECLSPEC_HIDDEN
Definition: pidl.c:1657
BOOL _ILGetExtension(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN
Definition: pidl.c:2531
static const WCHAR szName[]
Definition: powrprof.c:45
#define REFIID
Definition: guiddef.h:118
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
Definition: shtypes.idl:71
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
Definition: shlobj.h:565
Definition: fci.c:127
Definition: name.c:39
WORD unknown
Definition: pidl.h:157
CHAR szDriveName[20]
Definition: pidl.h:156
WCHAR wszName[1]
Definition: pidl.h:183
BYTE dummy2[4]
Definition: pidl.h:182
WORD uCreationTime
Definition: pidl.h:179
WORD uLastAccessTime
Definition: pidl.h:181
BYTE dummy1[6]
Definition: pidl.h:177
WORD uCreationDate
Definition: pidl.h:178
WORD uLastAccessDate
Definition: pidl.h:180
WORD cbLen
Definition: pidl.h:176
WORD uFileDate
Definition: pidl.h:164
WORD uFileAttribs
Definition: pidl.h:166
WORD uFileTime
Definition: pidl.h:165
DWORD dwFileSize
Definition: pidl.h:163
BYTE dummy
Definition: pidl.h:162
CHAR szNames[1]
Definition: pidl.h:167
GUID guid
Definition: pidl.h:151
BYTE dummy
Definition: pidl.h:150
WORD offsComment
Definition: pidl.h:115
WCHAR szName[1]
Definition: pidl.h:116
WORD offsDispName
Definition: pidl.h:114
PIDLTYPE type
Definition: pidl.h:192
CHAR szNames[1]
Definition: pidl.h:200
DWORD dummy1
Definition: pidl.h:204
union tagPIDLDATA::@554 u
struct tagPIDLDATA::@554::@555 network
struct tagGUIDStruct guid
Definition: pidl.h:195
WORD dummy
Definition: pidl.h:199
struct tagValueW valueW
Definition: pidl.h:208
CHAR szName[1]
Definition: pidl.h:205
struct tagPIDLCPanelStruct cpanel
Definition: pidl.h:207
struct tagPIDLDATA::@554::@556 htmlhelp
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
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
char CHAR
Definition: xmlstorage.h:175
unsigned char BYTE
Definition: xxhash.c:193