ReactOS  0.4.15-dev-4920-g5fa8403
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  SIZE_T cchPrinterName = 0;
106  SIZE_T cchServerName = 0;
107 
108  if (pi->pPrinterName)
109  cchPrinterName = wcslen(pi->pPrinterName);
110  if (pi->pServerName)
111  cchServerName = wcslen(pi->pServerName);
112  if ((cchPrinterName + cchServerName) > (MAXUSHORT - 2))
113  {
114  return NULL;
115  }
116 
117  tmp.type = 0x00;
118  tmp.u.cprinter.dummy = 0xFF;
119  if (pi->pPrinterName)
120  tmp.u.cprinter.offsServer = cchPrinterName + 1;
121  else
122  tmp.u.cprinter.offsServer = 1;
123 
124  size += tmp.u.cprinter.offsServer * sizeof(WCHAR);
125  if (pi->pServerName)
126  size += (cchServerName + 1) * sizeof(WCHAR);
127  else
128  size += sizeof(WCHAR);
129 
130  pidl = (LPITEMIDLIST)SHAlloc(size + 4);
131  if (!pidl)
132  return pidl;
133 
134  pidl->mkid.cb = size + 2;
135  memcpy(pidl->mkid.abID, &tmp, 2 + size0);
136 
137  p = &((PIDLDATA*)pidl->mkid.abID)->u.cprinter;
138 
139  p->Attributes = pi->Attributes;
140  if (pi->pPrinterName)
141  wcscpy(p->szName, pi->pPrinterName);
142  else
143  p->szName[0] = L'\0';
144 
145  if (pi->pServerName)
146  wcscpy(p->szName + p->offsServer, pi->pServerName);
147  else
148  p->szName[p->offsServer] = L'\0';
149 
150  *(WORD*)((char*)pidl + (size + 2)) = 0;
151  return pidl;
152 }
153 
154 /**************************************************************************
155  * CPrintersEnum::CreatePrintersEnumList()
156  */
158 {
159  BOOL ret = TRUE;
160 
161  TRACE("(%p)->(flags=0x%08lx) \n", this, dwFlags);
162 
163  /* enumerate the folders */
164  if (dwFlags & SHCONTF_NONFOLDERS)
165  {
166  DWORD needed = 0, num = 0, i;
168 
169  EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 4, NULL, 0, &needed, &num);
170  if (!needed)
171  return ret;
172 
173  pi = (PRINTER_INFO_4W *)HeapAlloc(GetProcessHeap(), 0, needed);
174  if(!EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 4, (LPBYTE)pi, needed, &needed, &num)) {
175  HeapFree(GetProcessHeap(), 0, pi);
176  return FALSE;
177  }
178 
179  for(i = 0; i < num; i++) {
181  if (pidl)
182  {
183  if (!AddToEnumList(pidl))
184  SHFree(pidl);
185  }
186  }
187  HeapFree(GetProcessHeap(), 0, pi);
188  }
189  return ret;
190 }
191 
193 {
194  pidlRoot = NULL;
195  dwAttributes = 0;
196  pclsid = NULL;
197 }
198 
200 {
201  TRACE("-- destroying IShellFolder(%p)\n", this);
202  if (pidlRoot)
203  SHFree(pidlRoot);
204 }
205 
206 /**************************************************************************
207  * CPrinterFolder::ParseDisplayName
208  *
209  * This is E_NOTIMPL in Windows too.
210  */
212  DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes)
213 {
214  TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n",
215  this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName),
216  pchEaten, ppidl, pdwAttributes);
217 
218  *ppidl = 0;
219  if (pchEaten)
220  *pchEaten = 0;
221 
222  return E_NOTIMPL;
223 }
224 
225 static PIDLPrinterStruct * _ILGetPrinterStruct(LPCITEMIDLIST pidl)
226 {
228 
229  if (pdata && pdata->type == 0x00)
230  return (PIDLPrinterStruct*) & (pdata->u.cfont);
231 
232  return NULL;
233 }
234 
235 /**************************************************************************
236  * CPrinterFolder::EnumObjects
237  */
238 HRESULT WINAPI CPrinterFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList)
239 {
240  return ShellObjectCreatorInit<CPrintersEnum>(hwndOwner, dwFlags, IID_PPV_ARG(IEnumIDList, ppEnumIDList));
241 }
242 
243 /**************************************************************************
244  * CPrinterFolder::BindToObject
245  */
247 {
248  return E_NOTIMPL;
249 }
250 
251 /**************************************************************************
252  * ISF_Printers_fnBindToStorage
253  */
255 {
256  FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n",
257  this, pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
258 
259  *ppvOut = NULL;
260  return E_NOTIMPL;
261 }
262 
263 /**************************************************************************
264  * CPrinterFolder::CompareIDs
265  */
267 {
268  return SHELL32_CompareDetails(this, lParam, pidl1, pidl2);
269 }
270 
271 /**************************************************************************
272  * CPrinterFolder::CreateViewObject
273  */
275 {
276  CComPtr<IShellView> pShellView;
278 
279  TRACE("(%p)->(hwnd=%p,%s,%p)\n", this,
280  hwndOwner, shdebugstr_guid (&riid), ppvOut);
281 
282  if (!ppvOut)
283  return hr;
284 
285  *ppvOut = NULL;
286 
287  if (IsEqualIID(riid, IID_IDropTarget))
288  {
289  WARN("IDropTarget not implemented\n");
290  hr = E_NOTIMPL;
291  }
292  else if(IsEqualIID(riid, IID_IContextMenu))
293  {
294  WARN("IContextMenu not implemented\n");
295  hr = E_NOTIMPL;
296  }
297  else if(IsEqualIID(riid, IID_IShellView))
298  {
299  SFV_CREATE sfvparams = {sizeof(SFV_CREATE), this};
300  hr = SHCreateShellFolderView(&sfvparams, (IShellView**)ppvOut);
301  }
302  TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut);
303  return hr;
304 }
305 
306 /**************************************************************************
307  * CPrinterFolder::GetAttributesOf
308  */
310 {
311  static const DWORD dwPrintersAttributes =
312  SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_CANRENAME | SFGAO_CANDELETE;
313  HRESULT hr = S_OK;
314 
315  FIXME ("(%p)->(cidl=%d apidl=%p mask=0x%08lx): stub\n",
316  this, cidl, apidl, *rgfInOut);
317 
318  *rgfInOut &= dwPrintersAttributes;
319 
320  *rgfInOut &= ~SFGAO_VALIDATE;
321 
322  TRACE ("-- result=0x%08x\n", *rgfInOut);
323  return hr;
324 }
325 
326 /**************************************************************************
327  * CPrinterFolder::GetUIObjectOf
328  *
329  * PARAMETERS
330  * HWND hwndOwner, //[in ] Parent window for any output
331  * UINT cidl, //[in ] array size
332  * LPCITEMIDLIST* apidl, //[in ] simple pidl array
333  * REFIID riid, //[in ] Requested Interface
334  * UINT* prgfInOut, //[ ] reserved
335  * LPVOID* ppvObject) //[out] Resulting Interface
336  *
337  */
339  REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
340 {
341  LPVOID pObj = NULL;
343 
344  TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
345  this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
346 
347  if (!ppvOut)
348  return hr;
349 
350  *ppvOut = NULL;
351 
352  if ((IsEqualIID (riid, IID_IExtractIconA) || IsEqualIID(riid, IID_IExtractIconW)) && cidl == 1)
353  hr = CPrintersExtractIconW_CreateInstane(apidl[0], riid, &pObj);
354  else
355  hr = E_NOINTERFACE;
356 
357  if (SUCCEEDED(hr) && !pObj)
358  hr = E_OUTOFMEMORY;
359 
360  *ppvOut = pObj;
361  TRACE ("(%p)->hr=0x%08lx\n", this, hr);
362  return hr;
363 }
364 
365 /**************************************************************************
366  * CPrinterFolder::GetDisplayNameOf
367  *
368  */
370 {
371  PIDLPrinterStruct * p;
372 
373  TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", this, pidl, dwFlags, strRet);
374  pdump (pidl);
375 
376  if (!strRet)
377  {
378  WARN("no strRet\n");
379  return E_INVALIDARG;
380  }
381 
382  p = _ILGetPrinterStruct(pidl);
383  if (!p)
384  {
385  ERR("no printer struct\n");
386  return E_INVALIDARG;
387  }
388 
389  return SHSetStrRet(strRet, p->szName);
390 }
391 
392 /**************************************************************************
393  * CPrinterFolder::SetNameOf
394  * Changes the name of a file object or subfolder, possibly changing its item
395  * identifier in the process.
396  *
397  * PARAMETERS
398  * HWND hwndOwner, //[in ] Owner window for output
399  * LPCITEMIDLIST pidl, //[in ] simple pidl of item to change
400  * LPCOLESTR lpszName, //[in ] the items new display name
401  * DWORD dwFlags, //[in ] SHGNO formatting flags
402  * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
403  */
404 HRESULT WINAPI CPrinterFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, /* simple pidl */
405  LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut)
406 {
407  FIXME("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", this, hwndOwner, pidl,
408  debugstr_w (lpName), dwFlags, pPidlOut);
409 
410  return E_FAIL;
411 }
412 
414 {
415  FIXME("(%p)\n", this);
416  return E_NOTIMPL;
417 }
418 
420 {
421  FIXME("(%p)\n", this);
422  return E_NOTIMPL;
423 }
424 
426 {
427  if (pSort)
428  *pSort = 0;
429  if (pDisplay)
430  *pDisplay = 0;
431 
432  return S_OK;
433 }
434 
436 {
437  if (!pcsFlags || iColumn >= PrinterSHELLVIEWCOLUMNS)
438  return E_INVALIDARG;
439  *pcsFlags = PrinterSFHeader[iColumn].pcsFlags;
440  return S_OK;
441 
442 }
443 
445 {
446  FIXME("(%p): stub\n", this);
447 
448  return E_NOTIMPL;
449 }
450 
452 {
453  TRACE("(%p)->(%p %i %p): stub\n", this, pidl, iColumn, psd);
454 
455  if (iColumn >= PrinterSHELLVIEWCOLUMNS)
456  return E_FAIL;
457 
458  psd->fmt = PrinterSFHeader[iColumn].fmt;
459  psd->cxChar = PrinterSFHeader[iColumn].cxChar;
460  if (pidl == NULL)
461  return SHSetStrRet(&psd->str, PrinterSFHeader[iColumn].colnameid);
462 
463  if (iColumn == COLUMN_NAME)
464  return GetDisplayNameOf(pidl, SHGDN_NORMAL, &psd->str);
465 
466  psd->str.uType = STRRET_CSTR;
467  psd->str.cStr[0] = '\0';
468 
469  return E_NOTIMPL;
470 }
471 
473 {
474  FIXME ("(%p): stub\n", this);
475  return E_NOTIMPL;
476 }
477 
478 /************************************************************************
479  * CPrinterFolder::GetClassID
480  */
482 {
483  TRACE ("(%p)\n", this);
484 
485  *lpClassId = CLSID_Printers;
486 
487  return S_OK;
488 }
489 
490 /************************************************************************
491  * CPrinterFolder::Initialize
492  */
494 {
495  if (pidlRoot)
497 
498  pidlRoot = ILClone(pidl);
499  return S_OK;
500 }
501 
502 /**************************************************************************
503  * CPrinterFolder::GetCurFolder
504  */
506 {
507  TRACE ("(%p)->(%p)\n", this, pidl);
508 
509  *pidl = ILClone (pidlRoot);
510  return S_OK;
511 }
#define IDS_SHV_COLUMN_COMMENTS
Definition: shresdef.h:69
BOOL CreatePrintersEnumList(DWORD dwFlags)
virtual HRESULT WINAPI Initialize(PCIDLIST_ABSOLUTE pidl)
#define IDS_SHV_COLUMN_LOCATION
Definition: shresdef.h:70
#define REFIID
Definition: guiddef.h:118
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2187
#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
#define TRUE
Definition: types.h:120
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:112
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:2773
REFIID LPVOID * ppv
Definition: atlbase.h:39
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:427
WCHAR swShell32Name[MAX_PATH]
Definition: folders.cpp:22
static LPITEMIDLIST _ILCreatePrinterItem(PRINTER_INFO_4W *pi)
#define LVCFMT_LEFT
Definition: commctrl.h:2598
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:3900
#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:71
virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
char cStr[MAX_PATH]
Definition: shtypes.idl:98
#define L(x)
Definition: ntvdm.h:50
unsigned char * LPBYTE
Definition: typedefs.h:53
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define FALSE
Definition: types.h:117
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
Definition: shtypes.idl:71
virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum)
unsigned int BOOL
Definition: ntddk_ex.h:94
if SUCCEEDED(hr)
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_INVALIDARG
Definition: ddrawi.h:101
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:158
HRESULT SHELL32_CompareDetails(IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:256
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:542
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define IDS_SHV_COLUMN_STATUS
Definition: shresdef.h:68
__wchar_t WCHAR
Definition: xmlstorage.h:180
static shvheader PrinterSFHeader[]
static refpint_t pi[]
Definition: server.c:96
LONG HRESULT
Definition: typedefs.h:79
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
#define WINAPI
Definition: msvc.h:6
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:896
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)
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)
_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:110
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define S_OK
Definition: intsafe.h:52
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
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:562
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:311
#define E_NOTIMPL
Definition: ddrawi.h:99
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
virtual HRESULT WINAPI BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
#define MAXUSHORT
Definition: typedefs.h:83
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:326
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:540
#define IDS_SHV_COLUMN_DOCUMENTS
Definition: shresdef.h:67
#define END_COM_MAP()
Definition: atlcom.h:553
#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:304
#define HeapFree(x, y, z)
Definition: compat.h:594
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95