ReactOS 0.4.17-dev-243-g1369312
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:
77
79 COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
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)) {
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 }
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)
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
225static 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 */
238HRESULT 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
327{
328 IQueryAssociations *pAssoc;
329 HRESULT hr = ::AssocCreate(CLSID_QueryAssociations, IID_PPV_ARG(IQueryAssociations, &pAssoc));
331 return hr;
332
333 hr = pAssoc->Init(ASSOCF_NONE, L"Printers", NULL, NULL);
334 if (SUCCEEDED(hr))
335 hr = pAssoc->QueryInterface(riid, ppvObj);
336
337 pAssoc->Release();
338 return hr;
339}
340
341/**************************************************************************
342 * CPrinterFolder::GetUIObjectOf
343 *
344 * PARAMETERS
345 * HWND hwndOwner, //[in ] Parent window for any output
346 * UINT cidl, //[in ] array size
347 * LPCITEMIDLIST* apidl, //[in ] simple pidl array
348 * REFIID riid, //[in ] Requested Interface
349 * UINT* prgfInOut, //[ ] reserved
350 * LPVOID* ppvObject) //[out] Resulting Interface
351 *
352 */
354 REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
355{
356 LPVOID pObj = NULL;
358
359 TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
360 this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
361
362 if (!ppvOut)
363 return hr;
364
365 *ppvOut = NULL;
366
367 if ((IsEqualIID (riid, IID_IExtractIconA) || IsEqualIID(riid, IID_IExtractIconW)) && cidl == 1)
368 hr = CPrintersExtractIconW_CreateInstane(apidl[0], riid, &pObj);
369 else if (IsEqualIID(riid, IID_IQueryAssociations))
370 hr = _AssocCreate(riid, &pObj);
371 else
373
374 if (SUCCEEDED(hr) && !pObj)
376
377 *ppvOut = pObj;
378 TRACE ("(%p)->hr=0x%08lx\n", this, hr);
379 return hr;
380}
381
382/**************************************************************************
383 * CPrinterFolder::GetDisplayNameOf
384 *
385 */
387{
388 PIDLPrinterStruct * p;
389
390 TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", this, pidl, dwFlags, strRet);
391 pdump (pidl);
392
393 if (!strRet)
394 {
395 WARN("no strRet\n");
396 return E_INVALIDARG;
397 }
398
399 p = _ILGetPrinterStruct(pidl);
400 if (!p)
401 {
402 ERR("no printer struct\n");
403 return E_INVALIDARG;
404 }
405
406 return SHSetStrRet(strRet, p->szName);
407}
408
409/**************************************************************************
410 * CPrinterFolder::SetNameOf
411 * Changes the name of a file object or subfolder, possibly changing its item
412 * identifier in the process.
413 *
414 * PARAMETERS
415 * HWND hwndOwner, //[in ] Owner window for output
416 * LPCITEMIDLIST pidl, //[in ] simple pidl of item to change
417 * LPCOLESTR lpszName, //[in ] the items new display name
418 * DWORD dwFlags, //[in ] SHGNO formatting flags
419 * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
420 */
422 LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut)
423{
424 FIXME("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", this, hwndOwner, pidl,
425 debugstr_w (lpName), dwFlags, pPidlOut);
426
427 return E_FAIL;
428}
429
431{
432 FIXME("(%p)\n", this);
433 return E_NOTIMPL;
434}
435
437{
438 FIXME("(%p)\n", this);
439 return E_NOTIMPL;
440}
441
443{
444 if (pSort)
445 *pSort = 0;
446 if (pDisplay)
447 *pDisplay = 0;
448
449 return S_OK;
450}
451
453{
454 if (!pcsFlags || iColumn >= PrinterSHELLVIEWCOLUMNS)
455 return E_INVALIDARG;
456 *pcsFlags = PrinterSFHeader[iColumn].colstate;
457 return S_OK;
458
459}
460
462{
463 FIXME("(%p): stub\n", this);
464
465 return E_NOTIMPL;
466}
467
469{
470 TRACE("(%p)->(%p %i %p): stub\n", this, pidl, iColumn, psd);
471
472 if (iColumn >= PrinterSHELLVIEWCOLUMNS)
473 return E_FAIL;
474
475 psd->fmt = PrinterSFHeader[iColumn].fmt;
476 psd->cxChar = PrinterSFHeader[iColumn].cxChar;
477 if (pidl == NULL)
478 return SHSetStrRet(&psd->str, PrinterSFHeader[iColumn].colnameid);
479
480 if (iColumn == COLUMN_NAME)
481 return GetDisplayNameOf(pidl, SHGDN_NORMAL, &psd->str);
482
483 psd->str.uType = STRRET_CSTR;
484 psd->str.cStr[0] = '\0';
485
486 return E_NOTIMPL;
487}
488
490{
491 FIXME ("(%p): stub\n", this);
492 return E_NOTIMPL;
493}
494
495/************************************************************************
496 * CPrinterFolder::GetClassID
497 */
499{
500 TRACE ("(%p)\n", this);
501
502 *lpClassId = CLSID_Printers;
503
504 return S_OK;
505}
506
507/************************************************************************
508 * CPrinterFolder::Initialize
509 */
511{
512 if (pidlRoot)
514
515 pidlRoot = ILClone(pidl);
516 return S_OK;
517}
518
519/**************************************************************************
520 * CPrinterFolder::GetCurFolder
521 */
523{
524 TRACE ("(%p)->(%p)\n", this, pidl);
525
526 *pidl = ILClone (pidlRoot);
527 return S_OK;
528}
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4824
HRESULT WINAPI SHCreateDefaultExtractIcon(REFIID riid, void **ppv)
static PIDLPrinterStruct * _ILGetPrinterStruct(LPCITEMIDLIST pidl)
#define PrinterSHELLVIEWCOLUMNS
HRESULT WINAPI CPrintersExtractIconW_CreateInstane(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv)
static shvheader PrinterSFHeader[]
static LPITEMIDLIST _ILCreatePrinterItem(PRINTER_INFO_4W *pi)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
BOOL AddToEnumList(LPITEMIDLIST pidl)
STDMETHOD() EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override
STDMETHOD() GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv) override
HRESULT _AssocCreate(REFIID riid, PVOID *ppvObj)
STDMETHOD() GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
STDMETHOD() GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
STDMETHOD() MapColumnToSCID(UINT column, SHCOLUMNID *pscid) override
STDMETHOD() GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
STDMETHOD() ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override
STDMETHOD() CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() EnumSearches(IEnumExtraSearch **ppenum) override
STDMETHOD() Initialize(PCIDLIST_ABSOLUTE pidl) override
STDMETHOD() SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut) override
STDMETHOD() BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() GetCurFolder(PIDLIST_ABSOLUTE *pidl) override
STDMETHOD() CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
STDMETHOD() GetClassID(CLSID *lpClassId) override
STDMETHOD() GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) override
STDMETHOD() GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
LPITEMIDLIST pidlRoot
STDMETHOD() GetDefaultSearchGUID(GUID *pguid) override
STDMETHOD() GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) override
HRESULT WINAPI Initialize(HWND hwndOwner, DWORD dwFlags)
BOOL CreatePrintersEnumList(DWORD dwFlags)
LPARAM lParam
Definition: combotst.c:139
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:322
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:438
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define IDS_SHV_COLUMN_NAME
Definition: resource.h:88
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2983
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:370
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:348
HRESULT WINAPI AssocCreate(CLSID clsid, REFIID refiid, void **lpInterface)
Definition: assoc.c:99
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:31
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
WCHAR swShell32Name[MAX_PATH]
Definition: folders.cpp:22
GLsizeiptr size
Definition: glext.h:5919
GLfloat GLfloat p
Definition: glext.h:8902
GLuint GLuint num
Definition: glext.h:9618
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
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define debugstr_w
Definition: kernel32.h:32
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define END_COM_MAP()
Definition: atlcom.h:592
LONG_PTR LPARAM
Definition: minwindef.h:175
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static PROCESS_INFORMATION pi
Definition: debugger.c:2303
static BSTR *static LPOLESTR
Definition: varformat.c:44
static PROTOCOLDATA * pdata
Definition: protocol.c:158
unsigned int UINT
Definition: ndis.h:50
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
interface IBindCtx * LPBC
Definition: objfwd.h:18
short WCHAR
Definition: pedump.c:58
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2278
#define LVCFMT_LEFT
Definition: commctrl.h:2603
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
@ ASSOCF_NONE
Definition: shlwapi.h:858
wcscpy
HRESULT SHELL32_CompareDetails(IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:372
#define COLUMN_NAME
struct _SFV_CREATE SFV_CREATE
#define IDS_SHV_COLUMN_DOCUMENTS
Definition: shresdef.h:65
#define IDI_SHELL_PRINTER
Definition: shresdef.h:610
#define IDS_SHV_COLUMN_STATUS
Definition: shresdef.h:66
#define IDS_SHV_COLUMN_LOCATION
Definition: shresdef.h:68
#define IDS_SHV_COLUMN_COMMENTS
Definition: shresdef.h:67
#define IDS_SHV_COLUMN_MODEL
Definition: shresdef.h:69
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
@ STRRET_CSTR
Definition: shtypes.idl:87
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
Definition: shtypes.idl:71
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
@ SHCOLSTATE_ONBYDEFAULT
Definition: shtypes.idl:125
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
DWORD SHCOLSTATEF
Definition: shtypes.idl:142
#define TRACE(s)
Definition: solgame.cpp:4
STRRET str
Definition: shtypes.idl:108
char cStr[MAX_PATH]
Definition: shtypes.idl:98
UINT uType
Definition: shtypes.idl:93
WORD colstate
Definition: shfldr.h:32
PIDLTYPE type
Definition: pidl.h:230
union tagPIDLDATA::@586 u
WORD dummy
Definition: pidl.h:237
CHAR szName[1]
Definition: pidl.h:243
unsigned char * LPBYTE
Definition: typedefs.h:53
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define MAXUSHORT
Definition: typedefs.h:83
uint32_t ULONG
Definition: typedefs.h:59
DWORD dwAttributes
Definition: vdmdbg.h:34
_In_ LPCSTR lpName
Definition: winbase.h:2543
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479
#define PRINTER_ENUM_LOCAL
Definition: winspool.h:896
WINBOOL WINAPI EnumPrintersW(DWORD Flags, LPWSTR Name, DWORD Level, LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned)
static void Initialize()
Definition: xlate.c:212
#define IID_PPV_ARG(Itype, ppType)