ReactOS  0.4.14-dev-49-gfb4591c
CPrinterFolder.cpp
Go to the documentation of this file.
1 /*
2  * Virtual Printers Folder
3  *
4  * Copyright 1997 Marcus Meissner
5  * Copyright 1998, 1999, 2002 Juergen Schmied
6  * Copyright 2005 Huw Davies
7  * Copyright 2009 Andrew Hill
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 Street, Fifth Floor, Boston, MA 02110-1301 USA
22  */
23 
24 #include <precomp.h>
25 
26 #include <winspool.h>
27 
29 
37 };
38 
39 #define COLUMN_NAME 0
40 #define COLUMN_DOCUMENTS 1
41 #define COLUMN_STATUS 2
42 #define COLUMN_COMMENTS 3
43 #define COLUMN_LOCATION 4
44 #define COLUMN_MODEL 5
45 
46 #define PrinterSHELLVIEWCOLUMNS (6)
47 
48 /**************************************************************************
49  * CPrintersExtractIconW_CreateInstane
50  *
51  * There is no CPrintersExtractIconW. We just initialize CExtractIcon properly to do our job.
52  */
54 {
55  CComPtr<IDefaultExtractIconInit> initIcon;
58  return hr;
59 
60  /* FIXME: other icons for default, network, print to file */
61  initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_PRINTER);
62 
63  return initIcon->QueryInterface(riid,ppv);
64 }
65 
66 /***********************************************************************
67  * Printers folder implementation
68  */
69 
71 {
72  public:
73  CPrintersEnum();
77 
79  COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
80  END_COM_MAP()
81 };
82 
84 {
85 }
86 
88 {
89 }
90 
92 {
94  return E_FAIL;
95  return S_OK;
96 }
97 
99 {
100  PIDLDATA tmp;
101  LPITEMIDLIST pidl;
102  PIDLPrinterStruct * p;
103  int size0 = (char*)&tmp.u.cprinter.szName - (char*)&tmp.u.cprinter;
104  int size = size0;
105 
106  tmp.type = 0x00;
107  tmp.u.cprinter.dummy = 0xFF;
108  if (pi->pPrinterName)
109  tmp.u.cprinter.offsServer = wcslen(pi->pPrinterName) + 1;
110  else
111  tmp.u.cprinter.offsServer = 1;
112 
113  size += tmp.u.cprinter.offsServer * sizeof(WCHAR);
114  if (pi->pServerName)
115  size += (wcslen(pi->pServerName) + 1) * sizeof(WCHAR);
116  else
117  size += sizeof(WCHAR);
118 
119  pidl = (LPITEMIDLIST)SHAlloc(size + 4);
120  if (!pidl)
121  return pidl;
122 
123  pidl->mkid.cb = size + 2;
124  memcpy(pidl->mkid.abID, &tmp, 2 + size0);
125 
126  p = &((PIDLDATA*)pidl->mkid.abID)->u.cprinter;
127 
128  p->Attributes = pi->Attributes;
129  if (pi->pPrinterName)
130  wcscpy(p->szName, pi->pPrinterName);
131  else
132  p->szName[0] = L'\0';
133 
134  if (pi->pServerName)
135  wcscpy(p->szName + p->offsServer, pi->pServerName);
136  else
137  p->szName[p->offsServer] = L'\0';
138 
139  *(WORD*)((char*)pidl + (size + 2)) = 0;
140  return pidl;
141 }
142 
143 /**************************************************************************
144  * CPrintersEnum::CreatePrintersEnumList()
145  */
147 {
148  BOOL ret = TRUE;
149 
150  TRACE("(%p)->(flags=0x%08lx) \n", this, dwFlags);
151 
152  /* enumerate the folders */
153  if (dwFlags & SHCONTF_NONFOLDERS)
154  {
155  DWORD needed = 0, num = 0, i;
157 
158  EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 4, NULL, 0, &needed, &num);
159  if (!needed)
160  return ret;
161 
162  pi = (PRINTER_INFO_4W *)HeapAlloc(GetProcessHeap(), 0, needed);
163  if(!EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 4, (LPBYTE)pi, needed, &needed, &num)) {
164  HeapFree(GetProcessHeap(), 0, pi);
165  return FALSE;
166  }
167 
168  for(i = 0; i < num; i++) {
170  if (pidl)
171  {
172  if (!AddToEnumList(pidl))
173  SHFree(pidl);
174  }
175  }
176  HeapFree(GetProcessHeap(), 0, pi);
177  }
178  return ret;
179 }
180 
182 {
183  pidlRoot = NULL;
184  dwAttributes = 0;
185  pclsid = NULL;
186 }
187 
189 {
190  TRACE("-- destroying IShellFolder(%p)\n", this);
191  if (pidlRoot)
192  SHFree(pidlRoot);
193 }
194 
195 /**************************************************************************
196  * CPrinterFolder::ParseDisplayName
197  *
198  * This is E_NOTIMPL in Windows too.
199  */
201  DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes)
202 {
203  TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n",
204  this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName),
205  pchEaten, ppidl, pdwAttributes);
206 
207  *ppidl = 0;
208  if (pchEaten)
209  *pchEaten = 0;
210 
211  return E_NOTIMPL;
212 }
213 
214 static PIDLPrinterStruct * _ILGetPrinterStruct(LPCITEMIDLIST pidl)
215 {
217 
218  if (pdata && pdata->type == 0x00)
219  return (PIDLPrinterStruct*) & (pdata->u.cfont);
220 
221  return NULL;
222 }
223 
224 /**************************************************************************
225  * CPrinterFolder::EnumObjects
226  */
227 HRESULT WINAPI CPrinterFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList)
228 {
229  return ShellObjectCreatorInit<CPrintersEnum>(hwndOwner, dwFlags, IID_PPV_ARG(IEnumIDList, ppEnumIDList));
230 }
231 
232 /**************************************************************************
233  * CPrinterFolder::BindToObject
234  */
236 {
237  return E_NOTIMPL;
238 }
239 
240 /**************************************************************************
241  * ISF_Printers_fnBindToStorage
242  */
244 {
245  FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n",
246  this, pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
247 
248  *ppvOut = NULL;
249  return E_NOTIMPL;
250 }
251 
252 /**************************************************************************
253  * CPrinterFolder::CompareIDs
254  */
256 {
257  return SHELL32_CompareDetails(this, lParam, pidl1, pidl2);
258 }
259 
260 /**************************************************************************
261  * CPrinterFolder::CreateViewObject
262  */
264 {
265  CComPtr<IShellView> pShellView;
267 
268  TRACE("(%p)->(hwnd=%p,%s,%p)\n", this,
269  hwndOwner, shdebugstr_guid (&riid), ppvOut);
270 
271  if (!ppvOut)
272  return hr;
273 
274  *ppvOut = NULL;
275 
276  if (IsEqualIID(riid, IID_IDropTarget))
277  {
278  WARN("IDropTarget not implemented\n");
279  hr = E_NOTIMPL;
280  }
281  else if(IsEqualIID(riid, IID_IContextMenu))
282  {
283  WARN("IContextMenu not implemented\n");
284  hr = E_NOTIMPL;
285  }
286  else if(IsEqualIID(riid, IID_IShellView))
287  {
288  SFV_CREATE sfvparams = {sizeof(SFV_CREATE), this};
289  hr = SHCreateShellFolderView(&sfvparams, (IShellView**)ppvOut);
290  }
291  TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut);
292  return hr;
293 }
294 
295 /**************************************************************************
296  * CPrinterFolder::GetAttributesOf
297  */
299 {
300  static const DWORD dwPrintersAttributes =
301  SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_CANRENAME | SFGAO_CANDELETE;
302  HRESULT hr = S_OK;
303 
304  FIXME ("(%p)->(cidl=%d apidl=%p mask=0x%08lx): stub\n",
305  this, cidl, apidl, *rgfInOut);
306 
307  *rgfInOut &= dwPrintersAttributes;
308 
309  *rgfInOut &= ~SFGAO_VALIDATE;
310 
311  TRACE ("-- result=0x%08x\n", *rgfInOut);
312  return hr;
313 }
314 
315 /**************************************************************************
316  * CPrinterFolder::GetUIObjectOf
317  *
318  * PARAMETERS
319  * HWND hwndOwner, //[in ] Parent window for any output
320  * UINT cidl, //[in ] array size
321  * LPCITEMIDLIST* apidl, //[in ] simple pidl array
322  * REFIID riid, //[in ] Requested Interface
323  * UINT* prgfInOut, //[ ] reserved
324  * LPVOID* ppvObject) //[out] Resulting Interface
325  *
326  */
328  REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
329 {
330  LPVOID pObj = NULL;
332 
333  TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
334  this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
335 
336  if (!ppvOut)
337  return hr;
338 
339  *ppvOut = NULL;
340 
341  if ((IsEqualIID (riid, IID_IExtractIconA) || IsEqualIID(riid, IID_IExtractIconW)) && cidl == 1)
342  hr = CPrintersExtractIconW_CreateInstane(apidl[0], riid, &pObj);
343  else
344  hr = E_NOINTERFACE;
345 
346  if (SUCCEEDED(hr) && !pObj)
347  hr = E_OUTOFMEMORY;
348 
349  *ppvOut = pObj;
350  TRACE ("(%p)->hr=0x%08lx\n", this, hr);
351  return hr;
352 }
353 
354 /**************************************************************************
355  * CPrinterFolder::GetDisplayNameOf
356  *
357  */
359 {
360  PIDLPrinterStruct * p;
361 
362  TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", this, pidl, dwFlags, strRet);
363  pdump (pidl);
364 
365  if (!strRet)
366  {
367  WARN("no strRet\n");
368  return E_INVALIDARG;
369  }
370 
371  p = _ILGetPrinterStruct(pidl);
372  if (!p)
373  {
374  ERR("no printer struct\n");
375  return E_INVALIDARG;
376  }
377 
378  return SHSetStrRet(strRet, p->szName);
379 }
380 
381 /**************************************************************************
382  * CPrinterFolder::SetNameOf
383  * Changes the name of a file object or subfolder, possibly changing its item
384  * identifier in the process.
385  *
386  * PARAMETERS
387  * HWND hwndOwner, //[in ] Owner window for output
388  * LPCITEMIDLIST pidl, //[in ] simple pidl of item to change
389  * LPCOLESTR lpszName, //[in ] the items new display name
390  * DWORD dwFlags, //[in ] SHGNO formatting flags
391  * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
392  */
393 HRESULT WINAPI CPrinterFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, /* simple pidl */
394  LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut)
395 {
396  FIXME("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", this, hwndOwner, pidl,
397  debugstr_w (lpName), dwFlags, pPidlOut);
398 
399  return E_FAIL;
400 }
401 
403 {
404  FIXME("(%p)\n", this);
405  return E_NOTIMPL;
406 }
407 
409 {
410  FIXME("(%p)\n", this);
411  return E_NOTIMPL;
412 }
413 
415 {
416  if (pSort)
417  *pSort = 0;
418  if (pDisplay)
419  *pDisplay = 0;
420 
421  return S_OK;
422 }
423 
425 {
426  if (!pcsFlags || iColumn >= PrinterSHELLVIEWCOLUMNS)
427  return E_INVALIDARG;
428  *pcsFlags = PrinterSFHeader[iColumn].pcsFlags;
429  return S_OK;
430 
431 }
432 
434 {
435  FIXME("(%p): stub\n", this);
436 
437  return E_NOTIMPL;
438 }
439 
441 {
442  TRACE("(%p)->(%p %i %p): stub\n", this, pidl, iColumn, psd);
443 
444  if (iColumn >= PrinterSHELLVIEWCOLUMNS)
445  return E_FAIL;
446 
447  psd->fmt = PrinterSFHeader[iColumn].fmt;
448  psd->cxChar = PrinterSFHeader[iColumn].cxChar;
449  if (pidl == NULL)
450  return SHSetStrRet(&psd->str, PrinterSFHeader[iColumn].colnameid);
451 
452  if (iColumn == COLUMN_NAME)
453  return GetDisplayNameOf(pidl, SHGDN_NORMAL, &psd->str);
454 
455  psd->str.uType = STRRET_CSTR;
456  psd->str.cStr[0] = '\0';
457 
458  return E_NOTIMPL;
459 }
460 
462 {
463  FIXME ("(%p): stub\n", this);
464  return E_NOTIMPL;
465 }
466 
467 /************************************************************************
468  * CPrinterFolder::GetClassID
469  */
471 {
472  TRACE ("(%p)\n", this);
473 
474  *lpClassId = CLSID_Printers;
475 
476  return S_OK;
477 }
478 
479 /************************************************************************
480  * CPrinterFolder::Initialize
481  */
483 {
484  if (pidlRoot)
486 
487  pidlRoot = ILClone(pidl);
488  return S_OK;
489 }
490 
491 /**************************************************************************
492  * CPrinterFolder::GetCurFolder
493  */
495 {
496  TRACE ("(%p)->(%p)\n", this, pidl);
497 
498  *pidl = ILClone (pidlRoot);
499  return S_OK;
500 }
#define IDS_SHV_COLUMN_COMMENTS
Definition: shresdef.h:61
BOOL CreatePrintersEnumList(DWORD dwFlags)
virtual HRESULT WINAPI Initialize(PCIDLIST_ABSOLUTE pidl)
#define IDS_SHV_COLUMN_LOCATION
Definition: shresdef.h:62
#define REFIID
Definition: guiddef.h:118
#define TRUE
Definition: types.h:120
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2162
#define E_NOINTERFACE
Definition: winerror.h:2364
LPITEMIDLIST pidlRoot
#define COLUMN_NAME
HRESULT hr
Definition: shlfolder.c:183
interface IBindCtx * LPBC
Definition: objfwd.h:18
REFIID riid
Definition: precomp.h:44
WINE_DEFAULT_DEBUG_CHANNEL(shell)
#define PrinterSHELLVIEWCOLUMNS
BOOL AddToEnumList(LPITEMIDLIST pidl)
virtual HRESULT WINAPI GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
#define WARN(fmt,...)
Definition: debug.h:111
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut)
_In_ LPCSTR lpName
Definition: winbase.h:2729
REFIID LPVOID * ppv
Definition: atlbase.h:39
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:414
WCHAR swShell32Name[MAX_PATH]
Definition: folders.cpp:22
static LPITEMIDLIST _ILCreatePrinterItem(PRINTER_INFO_4W *pi)
#define LVCFMT_LEFT
Definition: commctrl.h:2570
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
static PIDLPrinterStruct * _ILGetPrinterStruct(LPCITEMIDLIST pidl)
static LPOLESTR
Definition: stg_prop.c:27
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:3448
#define IID_PPV_ARG(Itype, ppType)
#define E_FAIL
Definition: ddrawi.h:102
STRRET str
Definition: shtypes.idl:108
virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid)
DWORD dwAttributes
Definition: vdmdbg.h:34
#define IDS_SHV_COLUMN_MODEL
Definition: shresdef.h:63
virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
char cStr[MAX_PATH]
Definition: shtypes.idl:98
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 char * LPBYTE
Definition: typedefs.h:52
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
Definition: shtypes.idl:71
virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum)
unsigned int BOOL
Definition: ntddk_ex.h:94
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut)
virtual HRESULT WINAPI CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
struct _SFV_CREATE SFV_CREATE
HRESULT WINAPI CPrintersExtractIconW_CreateInstane(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv)
static PROTOCOLDATA * pdata
Definition: protocol.c:157
HRESULT SHELL32_CompareDetails(IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:238
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:541
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define IDS_SHV_COLUMN_STATUS
Definition: shresdef.h:60
__wchar_t WCHAR
Definition: xmlstorage.h:180
static shvheader PrinterSFHeader[]
LONG HRESULT
Definition: typedefs.h:77
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:71
#define WINAPI
Definition: msvc.h:8
virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
virtual HRESULT WINAPI GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
unsigned short WORD
Definition: ntddk_ex.h:93
#define PRINTER_ENUM_LOCAL
Definition: winspool.h:803
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint num
Definition: glext.h:9618
WINBOOL WINAPI EnumPrintersW(DWORD Flags, LPWSTR Name, DWORD Level, LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned)
static DWORD pi
Definition: protocol.c:150
int ret
virtual HRESULT WINAPI BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static const WCHAR L[]
Definition: oid.c:1250
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
virtual HRESULT WINAPI GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut)
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
HRESULT WINAPI Initialize(HWND hwndOwner, DWORD dwFlags)
HRESULT WINAPI SHCreateDefaultExtractIcon(REFIID riid, void **ppv)
virtual HRESULT WINAPI GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid)
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:561
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:248
#define E_NOTIMPL
Definition: ddrawi.h:99
unsigned int UINT
Definition: ndis.h:50
virtual HRESULT WINAPI BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
virtual HRESULT WINAPI ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes)
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:331
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
unsigned int ULONG
Definition: retypes.h:1
virtual HRESULT WINAPI GetCurFolder(PIDLIST_ABSOLUTE *pidl)
#define IDI_SHELL_PRINTER
Definition: shresdef.h:480
#define IDS_SHV_COLUMN_DOCUMENTS
Definition: shresdef.h:59
#define END_COM_MAP()
Definition: atlcom.h:552
#define IDS_SHV_COLUMN_NAME
Definition: resource.h:74
GLfloat GLfloat p
Definition: glext.h:8902
UINT uType
Definition: shtypes.idl:93
virtual HRESULT WINAPI GetClassID(CLSID *lpClassId)
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
LPARAM lParam
Definition: combotst.c:139
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:309
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:394
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define SUCCEEDED(hr)
Definition: intsafe.h:57