ReactOS  0.4.13-dev-39-g8b6696f
shellfs.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2003, 2004, 2005, 2006 Martin Fuchs
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 
20  //
21  // Explorer clone
22  //
23  // shellfs.cpp
24  //
25  // Martin Fuchs, 23.07.2003
26  //
27 
28 
29 #include <precomp.h>
30 
32 {
33  CONTEXT("ShellDirectory::fill_w32fdata_shell()");
34 
35  bool bhfi_valid = false;
36 
37  if (do_access && !( (attribs&SFGAO_FILESYSTEM) && SUCCEEDED(
38  SHGetDataFromIDList(_folder, pidl, SHGDFIL_FINDDATA, pw32fdata, sizeof(WIN32_FIND_DATA))) )) {
40  IDataObject* pDataObj;
41 
42  STGMEDIUM medium = {0, {0}, 0};
43  FORMATETC fmt = {(USHORT)g_Globals._cfStrFName, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
44 
45  HRESULT hr = _folder->GetUIObjectOf(0, 1, &pidl, IID_IDataObject, 0, (LPVOID*)&pDataObj);
46 
47  if (SUCCEEDED(hr)) {
48  hr = pDataObj->GetData(&fmt, &medium);
49 
50  pDataObj->Release();
51 
52  if (SUCCEEDED(hr)) {
53  LPCTSTR path = (LPCTSTR)GlobalLock(medium.UNION_MEMBER(hGlobal));
54 
55  if (path) {
56  // fill with drive names "C:", ...
57  assert(_tcslen(path) < GlobalSize(medium.UNION_MEMBER(hGlobal)));
58  _tcscpy(pw32fdata->cFileName, path);
59 
61 
63  pw32fdata->dwFileAttributes = fad.dwFileAttributes;
64  pw32fdata->ftCreationTime = fad.ftCreationTime;
65  pw32fdata->ftLastAccessTime = fad.ftLastAccessTime;
66  pw32fdata->ftLastWriteTime = fad.ftLastWriteTime;
67 
69  // copy file size
70  pw32fdata->nFileSizeLow = fad.nFileSizeLow;
71  pw32fdata->nFileSizeHigh = fad.nFileSizeHigh;
72  } else {
73  // ignore FILE_ATTRIBUTE_HIDDEN attribute of NTFS drives - this would hide those drives in ShellBrowser
74  if (pw32fdata->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) {
75  if (path[1]==':' && path[2]=='\\' && !path[3]) // Is it a drive path?
76  pw32fdata->dwFileAttributes &= ~FILE_ATTRIBUTE_HIDDEN;
77  }
78  }
79  }
80 
83 
84  if (hFile != INVALID_HANDLE_VALUE) {
86  bhfi_valid = true;
87 
89  }
90 
91  SetErrorMode(sem_org);
92 
93  GlobalUnlock(medium.UNION_MEMBER(hGlobal));
94  GlobalFree(medium.UNION_MEMBER(hGlobal));
95  }
96  }
97  }
98  }
99 
100  if (!do_access || !(attribs&SFGAO_FILESYSTEM)) // Archiv files should not be displayed as folders in explorer view.
101  if (attribs & (SFGAO_FOLDER|SFGAO_HASSUBFOLDER))
102  pw32fdata->dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY;
103 
104  if (attribs & SFGAO_READONLY)
105  pw32fdata->dwFileAttributes |= FILE_ATTRIBUTE_READONLY;
106 
107  if (attribs & SFGAO_COMPRESSED)
108  pw32fdata->dwFileAttributes |= FILE_ATTRIBUTE_COMPRESSED;
109 
110  return bhfi_valid;
111 }
112 
113 
115 {
116  CONTEXT("ShellEntry::create_absolute_pidl()");
117 
118  if (_up)
119  {
120  if (_up->_etype == ET_SHELL) {
121  ShellDirectory* dir = static_cast<ShellDirectory*>(_up);
122 
123  if (dir->_pidl->mkid.cb) // Caching of absolute PIDLs could enhance performance.
124  return _pidl.create_absolute_pidl(dir->create_absolute_pidl());
125  } else
127  }
128  return _pidl;
129 }
130 
131 
132  // get full path of a shell entry
133 bool ShellEntry::get_path(PTSTR path, size_t path_count) const
134 {
135  if (!path || path_count==0)
136  return false;
137 /*
138  path[0] = TEXT('\0');
139 
140  if (FAILED(path_from_pidl(get_parent_folder(), &*_pidl, path, path_count)))
141  return false;
142 */
144  LPCTSTR ret = fs_path;
145 
146  if (ret) {
147  lstrcpyn(path, ret, path_count);
148  return true;
149  } else
150  return false;
151 }
152 
153 
154  // get full path of a shell folder
155 bool ShellDirectory::get_path(PTSTR path, size_t path_count) const
156 {
157  CONTEXT("ShellDirectory::get_path()");
158 
159  if (!path || path_count==0)
160  return false;
161 
162  path[0] = TEXT('\0');
163 
164  if (_folder.empty())
165  return false;
166 
167  SFGAOF attribs = SFGAO_FILESYSTEM;
168 
169  // Split pidl into current and parent folder PIDLs
170  ShellPath pidlParent, pidlFolder;
171  _pidl.split(pidlParent, pidlFolder);
172 
173  if (FAILED(const_cast<ShellFolder&>(_folder)->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlFolder, &attribs)))
174  return false;
175 
176  if (!(attribs & SFGAO_FILESYSTEM))
177  return false;
178 
179  if (FAILED(path_from_pidl(get_parent_folder(), &*_pidl, path, path_count)))
180  return false;
181 
182  return true;
183 }
184 
185 
187 {
188  CONTEXT("ShellEntry::launch_entry()");
189 
190  SHELLEXECUTEINFO shexinfo;
191 
192  shexinfo.cbSize = sizeof(SHELLEXECUTEINFO);
193  shexinfo.fMask = SEE_MASK_INVOKEIDLIST; // SEE_MASK_IDLIST is also possible.
194  shexinfo.hwnd = hwnd;
195  shexinfo.lpVerb = NULL;
196  shexinfo.lpFile = NULL;
197  shexinfo.lpParameters = NULL;
198  shexinfo.lpDirectory = NULL;
199  shexinfo.nShow = nCmdShow;
200 
201  ShellPath shell_path = create_absolute_pidl();
202  shexinfo.lpIDList = &*shell_path;
203 
204  // add PIDL to the recent file list
206 
207  BOOL ret = TRUE;
208 
209  if (!ShellExecuteEx(&shexinfo)) {
211  ret = FALSE;
212  }
213 
214  return ret;
215 }
216 
217 
219 {
220  ShellDirectory* dir = static_cast<ShellDirectory*>(_up);
221 
222  ShellFolder folder = dir? dir->_folder: GetDesktopFolder();
223  LPCITEMIDLIST pidl = _pidl;
224 
225  return ShellFolderContextMenu(folder, hwnd, 1, &pidl, pptScreen.x, pptScreen.y, cm_ifs);
226 }
227 
228 
230 {
231  LPCITEMIDLIST pidl = _pidl;
232 
233  return get_parent_folder()->GetUIObjectOf(hWnd, 1, &pidl, riid, NULL, ppvOut);
234 }
235 
236 
238 {
240 }
241 
243 {
244  return get_parent_folder();
245 }
246 
248 {
249  return _folder;
250 }
251 
252 
253 void ShellDirectory::read_directory(int scan_flags)
254 {
255  CONTEXT("ShellDirectory::read_directory()");
256 
257  int level = _level + 1;
258 
259  Entry* first_entry = NULL;
260  Entry* last = NULL;
261 
262  /*if (_folder.empty())
263  return;*/
264 
265 #ifndef _NO_WIN_FS
267 
268  if (!(scan_flags&SCAN_NO_FILESYSTEM) && get_path(buffer, COUNTOF(buffer)) && _tcsncmp(buffer,TEXT("::{"),3)) {
269  Entry* entry = NULL; // eliminate useless GCC warning by initializing entry
270 
272 
273  lstrcpy(p, TEXT("\\*"));
274 
275  WIN32_FIND_DATA w32fd;
276  HANDLE hFind = FindFirstFile(buffer, &w32fd);
277 
278  if (hFind != INVALID_HANDLE_VALUE) {
279  do {
280  // ignore hidden files (usefull in the start menu)
281  if (w32fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
282  continue;
283 
284  // ignore directory entries "." and ".."
285  if ((w32fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) &&
286  w32fd.cFileName[0]==TEXT('.') &&
287  (w32fd.cFileName[1]==TEXT('\0') ||
288  (w32fd.cFileName[1]==TEXT('.') && w32fd.cFileName[2]==TEXT('\0'))))
289  continue;
290 
291  lstrcpy(p+1, w32fd.cFileName);
292 
293  if (w32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
294  entry = new WinDirectory(this, buffer);
295  else
296  entry = new WinEntry(this);
297 
298  if (!first_entry)
299  first_entry = entry;
300 
301  if (last)
302  last->_next = entry;
303 
304  memcpy(&entry->_data, &w32fd, sizeof(WIN32_FIND_DATA));
305 
306  entry->_level = level;
307 
308  if (!(scan_flags & SCAN_DONT_ACCESS)) {
311 
312  if (hFile != INVALID_HANDLE_VALUE) {
313  if (GetFileInformationByHandle(hFile, &entry->_bhfi))
314  entry->_bhfi_valid = true;
315 
316 #ifdef BACKUP_READ_IMPLEMENTED
317  if (ScanNTFSStreams(entry, hFile))
318  entry->_scanned = true; // There exist named NTFS sub-streams in this file.
319 #endif
320 
322  }
323  }
324 
325  // set file type name
327 
328  DWORD attribs = SFGAO_FILESYSTEM;
329 
330  if (w32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
331  attribs |= SFGAO_FOLDER|SFGAO_HASSUBFOLDER;
332 
333  if (w32fd.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
334  attribs |= SFGAO_READONLY;
335 
336  //if (w32fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
337  // attribs |= SFGAO_HIDDEN;
338 
339  if (w32fd.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED)
340  attribs |= SFGAO_COMPRESSED;
341 
342  if (ext && !_tcsicmp(ext, _T(".lnk"))) {
343  attribs |= SFGAO_LINK;
344  w32fd.dwFileAttributes |= ATTRIBUTE_SYMBOLIC_LINK;
345  }
346 
347  entry->_shell_attribs = attribs;
348 
349  if (w32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
350  entry->_icon_id = ICID_FOLDER;
351  else if (!(scan_flags & SCAN_DONT_EXTRACT_ICONS))
352  entry->_icon_id = entry->safe_extract_icon(); // Assume small icon, we can extract the large icon later on demand.
353 
354  last = entry;
355  } while(FindNextFile(hFind, &w32fd));
356 
357  FindClose(hFind);
358  }
359  }
360  else // SCAN_NO_FILESYSTEM
361 #endif
362  {
363  ShellItemEnumerator enumerator(_folder, SHCONTF_FOLDERS|SHCONTF_NONFOLDERS|SHCONTF_INCLUDEHIDDEN|SHCONTF_SHAREABLE|SHCONTF_STORAGE);
364 
367  HRESULT hr_next = S_OK;
368 
369  do {
370 #define FETCH_ITEM_COUNT 32
372  ULONG cnt = 0;
373 
374  memset(pidls, 0, sizeof(pidls));
375 
376  hr_next = enumerator->Next(FETCH_ITEM_COUNT, pidls, &cnt);
377 
378  /* don't break yet now: Registry Explorer Plugin returns E_FAIL!
379  if (!SUCCEEDED(hr_next))
380  break; */
381 
382  if (hr_next == S_FALSE)
383  break;
384 
385  for(ULONG n=0; n<cnt; ++n) {
386  WIN32_FIND_DATA w32fd;
388  bool bhfi_valid = false;
389 
390  memset(&w32fd, 0, sizeof(WIN32_FIND_DATA));
391 
392  SFGAOF attribs_before = ~SFGAO_READONLY & ~SFGAO_VALIDATE;
393  SFGAOF attribs = attribs_before;
394  HRESULT hr = _folder->GetAttributesOf(1, (LPCITEMIDLIST*)&pidls[n], &attribs);
395  bool removeable = false;
396 
397  if (SUCCEEDED(hr) && attribs!=attribs_before) {
398  // avoid accessing floppy drives when browsing "My Computer"
399  if (attribs & SFGAO_REMOVABLE) {
400  attribs |= SFGAO_HASSUBFOLDER;
401  removeable = true;
402  } else if (!(scan_flags & SCAN_DONT_ACCESS)) {
403  SFGAOF attribs2 = SFGAO_READONLY;
404 
405  HRESULT hr = _folder->GetAttributesOf(1, (LPCITEMIDLIST*)&pidls[n], &attribs2);
406 
407  if (SUCCEEDED(hr))
408  attribs |= attribs2;
409  }
410  } else
411  attribs = 0;
412 
413  bhfi_valid = fill_w32fdata_shell(pidls[n], attribs, &w32fd, &bhfi,
414  !(scan_flags&SCAN_DONT_ACCESS) && !removeable);
415 
416  try {
417  Entry* entry = NULL; // eliminate useless GCC warning by initializing entry
418 
419  if (w32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
420  entry = new ShellDirectory(this, pidls[n], _hwnd);
421  else
422  entry = new ShellEntry(this, pidls[n]);
423 
424  if (!first_entry)
425  first_entry = entry;
426 
427  if (last)
428  last->_next = entry;
429 
430  memcpy(&entry->_data, &w32fd, sizeof(WIN32_FIND_DATA));
431 
432  if (bhfi_valid)
433  memcpy(&entry->_bhfi, &bhfi, sizeof(BY_HANDLE_FILE_INFORMATION));
434 
435  // store path in entry->_data.cFileName in case fill_w32fdata_shell() didn't already fill it
436  if (!entry->_data.cFileName[0])
437  if (SUCCEEDED(path_from_pidl(_folder, pidls[n], path, COUNTOF(path))))
438  _tcscpy(entry->_data.cFileName, path);
439 
440  if (SUCCEEDED(name_from_pidl(_folder, pidls[n], name, COUNTOF(name), SHGDN_INFOLDER|0x2000/*0x2000=SHGDN_INCLUDE_NONFILESYS*/))) {
441  if (!entry->_data.cFileName[0])
442  _tcscpy(entry->_data.cFileName, name);
443  else if (_tcscmp(entry->_display_name, name))
444  entry->_display_name = _tcsdup(name); // store display name separate from file name; sort display by file name
445  }
446 
447  if (attribs & SFGAO_LINK)
448  w32fd.dwFileAttributes |= ATTRIBUTE_SYMBOLIC_LINK;
449 
450  entry->_level = level;
451  entry->_shell_attribs = attribs;
452  entry->_bhfi_valid = bhfi_valid;
453 
454  // set file type name
456 
457  // get icons for files and virtual objects
458  if (!(entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ||
459  !(attribs & SFGAO_FILESYSTEM)) {
460  if (!(scan_flags & SCAN_DONT_EXTRACT_ICONS))
461  entry->_icon_id = entry->safe_extract_icon(); // Assume small icon, we can extract the large icon later on demand.
462  } else if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
463  entry->_icon_id = ICID_FOLDER;
464  else
465  entry->_icon_id = ICID_NONE; // don't try again later
466 
467  last = entry;
468  } catch(COMException& e) {
470  }
471  }
472  } while(SUCCEEDED(hr_next));
473  }
474 
475  if (last)
476  last->_next = NULL;
477 
478  _down = first_entry;
479  _scanned = true;
480 }
481 
482 const void* ShellDirectory::get_next_path_component(const void* p) const
483 {
484  LPITEMIDLIST pidl = (LPITEMIDLIST)p;
485 
486  if (!pidl || !pidl->mkid.cb)
487  return NULL;
488 
489  // go to next element
490  pidl = (LPITEMIDLIST)((LPBYTE)pidl+pidl->mkid.cb);
491 
492  return pidl;
493 }
494 
496 {
497  LPITEMIDLIST pidl = (LPITEMIDLIST) p;
498 
499  // handle special case of empty trailing id list entry
500  if (!pidl->mkid.cb)
501  return this;
502 
503  for(Entry*entry=_down; entry; entry=entry->_next)
504  if (entry->_etype == ET_SHELL) {
505  ShellEntry* se = static_cast<ShellEntry*>(entry);
506 
507  if (se->_pidl && se->_pidl->mkid.cb==pidl->mkid.cb && !memcmp(se->_pidl, pidl, se->_pidl->mkid.cb))
508  return entry;
509  } else {
510  const ShellPath& sp = entry->create_absolute_pidl();
511  static DynamicFct<LPITEMIDLIST(WINAPI*)(LPCITEMIDLIST)> ILFindLastID(TEXT("SHELL32"), "ILFindLastID");
512 
513  if (ILFindLastID) {
514  LPCITEMIDLIST entry_pidl = (*ILFindLastID)(sp);
515 
516  if (entry_pidl && entry_pidl->mkid.cb==pidl->mkid.cb && !memcmp(entry_pidl, pidl, entry_pidl->mkid.cb))
517  return entry;
518  }
519  }
520 
521  return NULL;
522 }
523 
525 {
526  int cnt = 0;
527 
528  for(Entry*entry=_down; entry; entry=entry->_next)
529  if (entry->_icon_id == ICID_UNKNOWN) {
530  entry->_icon_id = entry->extract_icon(flags);
531 
532  if (entry->_icon_id != ICID_NONE)
533  ++cnt;
534  }
535 
536  return cnt;
537 }
bool fill_w32fdata_shell(LPCITEMIDLIST pidl, SFGAOF attribs, WIN32_FIND_DATA *, BY_HANDLE_FILE_INFORMATION *, bool do_access=true)
Definition: shellfs.cpp:31
virtual void read_directory(int scan_flags=0)
Definition: shellfs.cpp:253
virtual ShellPath create_absolute_pidl() const
Definition: entries.h:126
virtual ShellPath create_absolute_pidl() const
Definition: shellfs.cpp:114
void split(ShellPath &parent, ShellPath &obj) const
#define ShellExecuteEx
Definition: shellapi.h:690
UINT WINAPI SetErrorMode(IN UINT uMode)
Definition: except.c:753
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
GLint level
Definition: gl.h:1546
struct _CONTEXT CONTEXT
#define REFIID
Definition: guiddef.h:113
#define TRUE
Definition: types.h:120
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
#define CloseHandle
Definition: compat.h:398
ShellEntry(Entry *parent, LPITEMIDLIST shell_path)
Definition: shellfs.h:32
Definition: fci.c:115
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
long y
Definition: polytest.cpp:48
Retrieval of file system paths of ShellPath objects.
Definition: shellclasses.h:932
HRESULT hr
Definition: shlfolder.c:183
#define SEM_FAILCRITICALERRORS
Definition: rtltypes.h:69
Entry * _up
Definition: entries.h:94
FileTypeManager _ftype_mgr
Definition: globals.h:284
long x
Definition: polytest.cpp:48
#define _tcsicmp
Definition: xmlstorage.h:205
POINT last
Definition: font.c:46
int _tcscmp(const _TCHAR *s1, const _TCHAR *s2)
Definition: tcscmp.h:8
REFIID riid
Definition: precomp.h:44
const GLint * attribs
Definition: glext.h:10538
uint8_t entry
Definition: isohybrid.c:63
virtual const void * get_next_path_component(const void *) const
Definition: shellfs.cpp:482
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
SHELLEXECUTEINFOA SHELLEXECUTEINFO
Definition: shellapi.h:677
HWND hWnd
Definition: settings.c:17
virtual ShellFolder get_shell_folder() const
Definition: shellfs.cpp:242
GLdouble n
Definition: glext.h:7729
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
Definition: tcscpy.h:8
#define assert(x)
Definition: debug.h:53
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
shell folder entry
Definition: shellfs.h:53
GLuint buffer
Definition: glext.h:5915
#define _tcsdup
Definition: tchar.h:625
IShellFolder smart pointer.
Definition: shellclasses.h:593
const GUID IID_IDataObject
bool empty() const
Definition: shellclasses.h:382
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define _MAX_FNAME
Definition: utility.h:74
CHAR * LPTSTR
Definition: xmlstorage.h:192
#define FILE_SHARE_READ
Definition: compat.h:125
Exception with context information.
Definition: shellclasses.h:113
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
Definition: heapmem.c:1090
HRESULT name_from_pidl(IShellFolder *folder, LPCITEMIDLIST pidl, LPTSTR buffer, int len, SHGDNF flags)
virtual HRESULT GetUIObjectOf(HWND hWnd, REFIID riid, LPVOID *ppvOut)
Definition: shellfs.cpp:229
unsigned char * LPBYTE
Definition: typedefs.h:52
void WINAPI SHAddToRecentDocs(UINT uFlags, LPCVOID pv)
Definition: shellord.c:669
#define GetFileAttributesEx
Definition: winbase.h:3630
unsigned int BOOL
Definition: ntddk_ex.h:94
wrapper class for enumerating shell namespace objects
#define e
Definition: ke_i.h:82
#define _MAX_PATH
Definition: utility.h:77
virtual BOOL launch_entry(HWND hwnd, UINT nCmdShow=SW_SHOWNORMAL)
Definition: shellfs.cpp:186
#define S_FALSE
Definition: winerror.h:2357
size_t __cdecl _tcslen(const _TCHAR *str)
Definition: tcslen.h:9
smooth NULL
Definition: ftsmooth.c:416
char ext[3]
Definition: mkdosfs.c:358
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:189
#define FETCH_ITEM_COUNT
unsigned int dir
Definition: maze.c:112
#define FindFirstFile
Definition: winbase.h:3596
CHAR * PTSTR
Definition: xmlstorage.h:191
#define OPEN_EXISTING
Definition: compat.h:426
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
IShellFolder * get_parent_folder() const
Definition: shellfs.h:120
void HandleException(COMException &e, HWND hwnd)
Exception Handler for COM exceptions.
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
ENTRY_TYPE _etype
Definition: entries.h:107
BOOL WINAPI GetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
Definition: fileinfo.c:608
static IShellFolder ShellFolder
Definition: ordinal.c:2632
if(!(yy_init))
Definition: macro.lex.yy.c:714
LPCSTR lpParameters
Definition: shellapi.h:314
LONG HRESULT
Definition: typedefs.h:77
#define FindNextFile
Definition: winbase.h:3602
Entry * _down
Definition: entries.h:93
LPCTSTR set_type(struct Entry *entry, bool dont_hide_ext=false)
Definition: explorer.cpp:213
#define MAX_PATH
Definition: compat.h:26
#define WINAPI
Definition: msvc.h:8
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
nsrefcnt Release()
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT _cfStrFName
Definition: globals.h:271
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611
#define FILE_ATTRIBUTE_COMPRESSED
Definition: nt_native.h:711
GLbitfield flags
Definition: glext.h:7161
virtual ShellFolder get_shell_folder() const
Definition: shellfs.cpp:237
#define SHGDFIL_FINDDATA
Definition: shlobj.h:1368
void display_error(HWND hwnd, DWORD error)
Definition: utility.cpp:98
int ret
#define FILE_SHARE_DELETE
Definition: nt_native.h:682
#define SHGetDataFromIDList
Definition: shlobj.h:1420
ICONCACHE_FLAGS
Definition: entries.h:66
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
ShellFolder _folder
Definition: shellfs.h:112
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
ExplorerGlobals g_Globals
Definition: explorer.cpp:52
ShellDirectory(ShellFolder &root_folder, const ShellPath &shell_path, HWND hwnd)
Definition: shellfs.h:55
Windows file system file-entry.
Definition: winfs.h:32
#define GENERIC_READ
Definition: compat.h:124
ShellPath _pidl
Definition: shellfs.h:44
shell file/directory entry
Definition: shellfs.h:30
_In_ HANDLE hFile
Definition: mswsock.h:90
int _level
Definition: entries.h:98
LPCSTR lpDirectory
Definition: shellapi.h:315
virtual HRESULT do_context_menu(HWND hwnd, const POINT &pptScreen, CtxMenuInterfaces &cm_ifs)
Definition: shellfs.cpp:218
ShellFolder & GetDesktopFolder()
#define S_OK
Definition: intsafe.h:59
#define TEXT(s)
Definition: k32.h:26
int extract_icons(ICONCACHE_FLAGS flags)
Definition: shellfs.cpp:524
ShellPath create_absolute_pidl(LPCITEMIDLIST parent_pidl) const
#define path_from_pidl
Definition: shellclasses.h:628
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
Definition: fatprocs.h:904
unsigned short USHORT
Definition: pedump.c:61
#define lstrcpy
Definition: winbase.h:3688
Definition: services.c:325
virtual Entry * find_entry(const void *)
Definition: shellfs.cpp:495
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
unsigned int UINT
Definition: ndis.h:50
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
bool _scanned
Definition: entries.h:97
virtual bool get_path(PTSTR path, size_t path_count) const
Definition: shellfs.cpp:133
Definition: name.c:36
#define FILE_FLAG_BACKUP_SEMANTICS
Definition: disk.h:41
virtual bool get_path(PTSTR path, size_t path_count) const
Definition: shellfs.cpp:155
#define SHARD_PIDL
Definition: shlobj.h:1092
unsigned int ULONG
Definition: retypes.h:1
#define SEE_MASK_INVOKEIDLIST
Definition: shellapi.h:28
static const WCHAR sp[]
Definition: suminfo.c:288
#define COUNTOF(x)
Definition: utility.h:93
Windows file system directory-entry.
Definition: winfs.h:45
GLfloat GLfloat p
Definition: glext.h:8902
#define memset(x, y, z)
Definition: compat.h:39
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
HRESULT ShellFolderContextMenu(IShellFolder *shell_folder, HWND hwndParent, int cidl, LPCITEMIDLIST *apidl, int x, int y, CtxMenuInterfaces &cm_ifs)
virtual ShellFolder get_shell_folder() const
Definition: shellfs.cpp:247
wrapper class for item ID lists
Definition: shellclasses.h:651
Definition: dsound.c:943
int _tcsncmp(const _TCHAR *s1, const _TCHAR *s2, size_t n)
Definition: tcsncmp.h:9
#define ATTRIBUTE_SYMBOLIC_LINK
Definition: entries.h:62
base of all file and directory entries
Definition: entries.h:82
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
#define SUCCEEDED(hr)
Definition: intsafe.h:57
#define lstrcpyn
Definition: winbase.h:3689
HRESULT GetUIObjectOf([in] HWND hwndOwner, [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in] REFIID riid, [in, out, unique] UINT *prgfInOut, [out, iid_is(riid)] void **ppvOut)
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502