ReactOS  0.4.14-dev-608-gd495a4f
shell32.cpp
Go to the documentation of this file.
1 /*
2  * Shell basics
3  *
4  * Copyright 1998 Marcus Meissner
5  * Copyright 1998 Juergen Schmied (jsch) * <juergen.schmied@metronet.de>
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 
22 #include "precomp.h"
23 
24 #include "shell32_version.h"
25 
27 
28 /*
29  * Implemented
30  */
32 WINAPI
33 AddCommasW(DWORD lValue, LPWSTR lpNumber)
34 {
35  WCHAR szValue[MAX_PATH], szSeparator[8 + 1];
36  NUMBERFMTW numFormat;
37 
40  szSeparator,
41  _countof(szSeparator));
42 
43  numFormat.NumDigits = 0;
44  numFormat.LeadingZero = 0;
45  numFormat.Grouping = 3; // FIXME! Use GetLocaleInfoW with LOCALE_SGROUPING and interpret the result.
46  numFormat.lpDecimalSep = szSeparator;
47  numFormat.lpThousandSep = szSeparator;
48  numFormat.NegativeOrder = 0;
49 
50  swprintf(szValue, L"%lu", lValue);
51 
53  0,
54  szValue,
55  &numFormat,
56  lpNumber,
57  MAX_PATH) != 0)
58  {
59  return lpNumber;
60  }
61 
62  wcscpy(lpNumber, szValue);
63  return lpNumber;
64 }
65 
66 /*
67  * Implemented
68  */
70 WINAPI
71 RegenerateUserEnvironment(LPVOID *lpEnvironment, BOOL bUpdateSelf)
72 {
75  return FALSE;
76 
77  BOOL bResult = CreateEnvironmentBlock(lpEnvironment, hUserToken, TRUE);
78  if (!bResult || !lpEnvironment)
79  {
81  return FALSE;
82  }
83 
84  if (bUpdateSelf)
85  {
86  LPWSTR pszz = (LPWSTR)*lpEnvironment;
87  if (!pszz)
88  return FALSE;
89 
90  while (*pszz)
91  {
92  size_t cch = wcslen(pszz);
93  LPWSTR pchEqual = wcschr(pszz, L'=');
94  if (pchEqual)
95  {
96  CStringW strName(pszz, pchEqual - pszz);
97  SetEnvironmentVariableW(strName, pchEqual + 1);
98  }
99  pszz += cch + 1;
100  }
101  }
102 
104 
105  return bResult;
106 }
107 
108 /**************************************************************************
109  * Default ClassFactory types
110  */
112 HRESULT IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, const IID *riidInst, IClassFactory **theFactory);
113 
114 
115 /**************************************************************************
116  * Default ClassFactory Implementation
117  *
118  * SHCreateDefClassObject
119  *
120  * NOTES
121  * Helper function for dlls without their own classfactory.
122  * A generic classfactory is returned.
123  * When the CreateInstance of the cf is called the callback is executed.
124  */
125 
126 class IDefClFImpl :
127  public CComObjectRootEx<CComMultiThreadModelNoCS>,
128  public IClassFactory
129 {
130 private:
133  const IID *riidInst;
134  LONG *pcRefDll; /* pointer to refcounter in external dll (ugrrr...) */
135 public:
136  IDefClFImpl();
138 
139  // IClassFactory
141  virtual HRESULT WINAPI LockServer(BOOL fLock);
142 
145 END_COM_MAP()
146 };
147 
149 {
150  lpfnCI = NULL;
151  riidInst = NULL;
152  pcRefDll = NULL;
153  rclsid = NULL;
154 }
155 
156 HRESULT IDefClFImpl::Initialize(LPFNCREATEINSTANCE lpfnCIx, PLONG pcRefDllx, const IID *riidInstx)
157 {
158  lpfnCI = lpfnCIx;
159  riidInst = riidInstx;
160  pcRefDll = pcRefDllx;
161 
162  if (pcRefDll)
164 
165  TRACE("(%p)%s\n", this, shdebugstr_guid(riidInst));
166  return S_OK;
167 }
168 
169 /******************************************************************************
170  * IDefClF_fnCreateInstance
171  */
173 {
174  TRACE("%p->(%p,%s,%p)\n", this, pUnkOuter, shdebugstr_guid(&riid), ppvObject);
175 
176  *ppvObject = NULL;
177 
179  {
180  return lpfnCI(pUnkOuter, riid, ppvObject);
181  }
182 
183  ERR("unknown IID requested %s\n", shdebugstr_guid(&riid));
184  return E_NOINTERFACE;
185 }
186 
187 /******************************************************************************
188  * IDefClF_fnLockServer
189  */
191 {
192  TRACE("%p->(0x%x), not implemented\n", this, fLock);
193  return E_NOTIMPL;
194 }
195 
196 /**************************************************************************
197  * IDefClF_fnConstructor
198  */
199 
201 {
202  return ShellObjectCreatorInit<IDefClFImpl>(lpfnCI, pcRefDll, riidInst, IID_PPV_ARG(IClassFactory, theFactory));
203 }
204 
205 /******************************************************************************
206  * SHCreateDefClassObject [SHELL32.70]
207  */
209  REFIID riid,
210  LPVOID* ppv,
211  LPFNCREATEINSTANCE lpfnCI, /* [in] create instance callback entry */
212  LPDWORD pcRefDll, /* [in/out] ref count of the dll */
213  REFIID riidInst) /* [in] optional interface to the instance */
214 {
215  IClassFactory *pcf;
216  HRESULT hResult;
217 
218  TRACE("%s %p %p %p %s\n", shdebugstr_guid(&riid), ppv, lpfnCI, pcRefDll, shdebugstr_guid(&riidInst));
219 
221  return E_NOINTERFACE;
222  hResult = IDefClF_fnConstructor(lpfnCI, (PLONG)pcRefDll, &riidInst, &pcf);
223  if (FAILED(hResult))
224  return hResult;
225  *ppv = pcf;
226  return S_OK;
227 }
228 
229 /**************************************************************************
230  * CStartMenuDummy
231  */
233  public CComCoClass<CStartMenuDummy, &CLSID_StartMenu>,
234  public CComObjectRootEx<CComMultiThreadModelNoCS>
235 {
236 private:
237  CStartMenuDummy();
238  virtual ~CStartMenuDummy();
239 
240 public:
242 
244  {
245  public:
247  {
248  if (ppv == NULL)
249  return E_POINTER;
250  *ppv = NULL;
251  if (pv != NULL)
252  return CLASS_E_NOAGGREGATION;
254  }
255  };
256 };
257 
258 /**************************************************************************
259  * CShell32Module
260  */
262 {
263 public:
264  void Term()
265  {
266  CComCreatorCentralInstance< ATL::CComObject< CDrivesFolder > >::Term();
267  CComCreatorCentralInstance< ATL::CComObject< CDesktopFolder > >::Term();
268  CComModule::Term();
269  }
270 };
271 
272 
273 BEGIN_OBJECT_MAP(ObjectMap)
274  OBJECT_ENTRY(CLSID_ActiveDesktop, CActiveDesktop)
275  OBJECT_ENTRY(CLSID_ShellFSFolder, CFSFolder)
276  OBJECT_ENTRY(CLSID_MyComputer, CDrivesFolder)
277  OBJECT_ENTRY(CLSID_ShellDesktop, CDesktopFolder)
278  OBJECT_ENTRY(CLSID_ShellItem, CShellItem)
279  OBJECT_ENTRY(CLSID_ShellLink, CShellLink)
280  OBJECT_ENTRY(CLSID_Shell, CShellDispatch)
281  OBJECT_ENTRY(CLSID_DragDropHelper, CDropTargetHelper)
282  OBJECT_ENTRY(CLSID_ControlPanel, CControlPanelFolder)
283  OBJECT_ENTRY(CLSID_MyDocuments, CMyDocsFolder)
284  OBJECT_ENTRY(CLSID_NetworkPlaces, CNetFolder)
286  OBJECT_ENTRY(CLSID_Printers, CPrinterFolder)
288  OBJECT_ENTRY(CLSID_ShellFldSetExt, CFolderOptions)
289  OBJECT_ENTRY(CLSID_RecycleBin, CRecycleBin)
290  OBJECT_ENTRY(CLSID_OpenWithMenu, COpenWithMenu)
291  OBJECT_ENTRY(CLSID_NewMenu, CNewMenu)
295  OBJECT_ENTRY(CLSID_MenuBand, CMenuBand)
296  OBJECT_ENTRY(CLSID_MenuDeskBar, CMenuDeskBar)
297  OBJECT_ENTRY(CLSID_MergedFolder, CMergedFolder)
298  OBJECT_ENTRY(CLSID_ExeDropHandler, CExeDropHandler)
299  OBJECT_ENTRY(CLSID_QueryAssociations, CQueryAssociations)
300  OBJECT_ENTRY(CLSID_UserNotification, CUserNotification)
302 
304 
305 
306 /***********************************************************************
307  * DllGetVersion [SHELL32.@]
308  *
309  * Retrieves version information of the 'SHELL32.DLL'
310  *
311  * PARAMS
312  * pdvi [O] pointer to version information structure.
313  *
314  * RETURNS
315  * Success: S_OK
316  * Failure: E_INVALIDARG
317  *
318  * NOTES
319  * Returns version of a shell32.dll from IE4.01 SP1.
320  */
321 
323 {
324  /* FIXME: shouldn't these values come from the version resource? */
325  if (pdvi->cbSize == sizeof(DLLVERSIONINFO) ||
326  pdvi->cbSize == sizeof(DLLVERSIONINFO2))
327  {
328  pdvi->dwMajorVersion = WINE_FILEVERSION_MAJOR;
329  pdvi->dwMinorVersion = WINE_FILEVERSION_MINOR;
330  pdvi->dwBuildNumber = WINE_FILEVERSION_BUILD;
331  pdvi->dwPlatformID = WINE_FILEVERSION_PLATFORMID;
332  if (pdvi->cbSize == sizeof(DLLVERSIONINFO2))
333  {
334  DLLVERSIONINFO2 *pdvi2 = (DLLVERSIONINFO2 *)pdvi;
335 
336  pdvi2->dwFlags = 0;
337  pdvi2->ullVersion = MAKEDLLVERULL(WINE_FILEVERSION_MAJOR,
341  }
342  TRACE("%u.%u.%u.%u\n",
343  pdvi->dwMajorVersion, pdvi->dwMinorVersion,
344  pdvi->dwBuildNumber, pdvi->dwPlatformID);
345  return S_OK;
346  }
347  else
348  {
349  WARN("wrong DLLVERSIONINFO size from app\n");
350  return E_INVALIDARG;
351  }
352 }
353 
354 /*************************************************************************
355  * global variables of the shell32.dll
356  * all are once per process
357  *
358  */
360 
361 /*************************************************************************
362  * SHELL32 DllMain
363  *
364  * NOTES
365  * calling oleinitialize here breaks sone apps.
366  */
368 {
369  TRACE("%p 0x%x %p\n", hInstance, dwReason, fImpLoad);
371  {
373  gModule.Init(ObjectMap, hInstance, &LIBID_Shell32);
374 
376 
377  /* get full path to this DLL for IExtractIconW_fnGetIconLocation() */
379  swShell32Name[MAX_PATH - 1] = '\0';
380 
381  /* Initialize comctl32 */
382  INITCOMMONCONTROLSEX InitCtrls;
383  InitCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);
385  InitCommonControlsEx(&InitCtrls);
386 
387  /* Bad idea, initialization in DllMain! */
389  }
390  else if (dwReason == DLL_PROCESS_DETACH)
391  {
393  SIC_Destroy();
395  gModule.Term();
396  }
397  return TRUE;
398 }
399 
400 /***********************************************************************
401  * DllCanUnloadNow (SHELL32.@)
402  */
404 {
405  return gModule.DllCanUnloadNow();
406 }
407 
408 /*************************************************************************
409  * DllGetClassObject [SHELL32.@]
410  * SHDllGetClassObject [SHELL32.128]
411  */
413 {
414  HRESULT hResult;
415 
416  TRACE("CLSID:%s,IID:%s\n", shdebugstr_guid(&rclsid), shdebugstr_guid(&riid));
417 
418  hResult = gModule.DllGetClassObject(rclsid, riid, ppv);
419  TRACE("-- pointer to class factory: %p\n", *ppv);
420  return hResult;
421 }
422 
423 /***********************************************************************
424  * DllRegisterServer (SHELL32.@)
425  */
427 {
428  HRESULT hr;
429 
431  if (FAILED(hr))
432  return hr;
433 
435  if (FAILED(hr))
436  return hr;
437 
439  if (FAILED(hr))
440  return hr;
441 
442  return S_OK;
443 }
444 
445 /***********************************************************************
446  * DllUnregisterServer (SHELL32.@)
447  */
449 {
450  HRESULT hr;
451 
453  if (FAILED(hr))
454  return hr;
455 
457  if (FAILED(hr))
458  return hr;
459 
460  return S_OK;
461 }
462 
463 /*************************************************************************
464  * DllInstall [SHELL32.@]
465  *
466  * PARAMETERS
467  *
468  * BOOL bInstall - TRUE for install, FALSE for uninstall
469  * LPCWSTR pszCmdLine - command line (unused by shell32?)
470  */
471 
473 {
474  FIXME("%s %s: stub\n", bInstall ? "TRUE":"FALSE", debugstr_w(cmdline));
475  return S_OK; /* indicate success */
476 }
LPWSTR lpThousandSep
Definition: winnls.h:643
const GUID CLSID_AdminFolderShortcut
#define STDAPI
Definition: basetyps.h:41
HRESULT DllCanUnloadNow()
Definition: atlbase.h:928
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:609
#define HRESULT
Definition: msvc.h:7
virtual HRESULT WINAPI LockServer(BOOL fLock)
Definition: shell32.cpp:190
#define REFIID
Definition: guiddef.h:118
HRESULT DllRegisterServer(BOOL bRegTypeLib=TRUE)
Definition: atlbase.h:940
#define CloseHandle
Definition: compat.h:406
#define E_NOINTERFACE
Definition: winerror.h:2364
LPWSTR lpDecimalSep
Definition: winnls.h:642
HRESULT hr
Definition: shlfolder.c:183
#define TOKEN_WRITE
Definition: setypes.h:899
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
static STDMETHODIMP CreateInstance(void *pv, REFIID riid, LPVOID *ppv)
Definition: shell32.cpp:246
STDAPI DllRegisterServer()
Definition: shell32.cpp:426
#define OBJECT_ENTRY(clsid, class)
Definition: atlcom.h:653
void FreeChangeNotifications(void)
Definition: changenotify.c:190
REFIID riid
Definition: precomp.h:44
#define REFCLSID
Definition: guiddef.h:117
#define _countof(array)
Definition: fontsub.cpp:30
#define LOCALE_USER_DEFAULT
#define WARN(fmt,...)
Definition: debug.h:111
#define CALLBACK
Definition: compat.h:27
LONG * pcRefDll
Definition: shell32.cpp:134
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
UINT Grouping
Definition: winnls.h:641
LPFNCREATEINSTANCE lpfnCI
Definition: shellole.c:61
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
STDAPI_(BOOL) DllMain(HINSTANCE hInstance
#define DLL_PROCESS_ATTACH
Definition: compat.h:120
TCHAR * cmdline
Definition: stretchblt.cpp:32
EXTERN_C LPWSTR WINAPI AddCommasW(DWORD lValue, LPWSTR lpNumber)
Definition: shell32.cpp:33
BOOL WINAPI CreateEnvironmentBlock(OUT LPVOID *lpEnvironment, IN HANDLE hToken, IN BOOL bInherit)
Definition: environment.c:505
#define IID_PPV_ARG(Itype, ppType)
struct tagINITCOMMONCONTROLSEX INITCOMMONCONTROLSEX
HRESULT WINAPI DllInstall(BOOL bInstall, LPCWSTR cmdline)
Definition: shell32.cpp:472
UINT NegativeOrder
Definition: winnls.h:644
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: lang.c:1098
HRESULT Init(_ATL_OBJMAP_ENTRY *p, HINSTANCE, const GUID *plibid)
Definition: atlbase.h:797
HINSTANCE hInstance
Definition: charmap.c:20
const GUID CLSID_FontsFolderShortcut
#define ICC_WIN95_CLASSES
Definition: commctrl.h:66
#define LOCALE_STHOUSAND
Definition: winnls.h:43
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
#define debugstr_w
Definition: kernel32.h:32
UINT NumDigits
Definition: winnls.h:639
#define FIXME(fmt,...)
Definition: debug.h:110
STDAPI DllGetVersion(DLLVERSIONINFO *pdvi)
Definition: shell32.cpp:322
#define STDMETHODIMP
Definition: basetyps.h:43
#define E_INVALIDARG
Definition: ddrawi.h:101
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:201
HRESULT DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: atlbase.h:935
smooth NULL
Definition: ftsmooth.c:416
STDAPI DllUnregisterServer()
Definition: shell32.cpp:448
BOOL WINAPI DllMain(IN HINSTANCE hinstDLL, IN DWORD dwReason, IN LPVOID lpvReserved)
Definition: kbsdll.c:83
WINE_DEFAULT_DEBUG_CHANNEL(shell)
#define ICC_USEREX_CLASSES
Definition: commctrl.h:68
#define WINE_FILEVERSION_MINOR
virtual ~CStartMenuDummy()
HRESULT WINAPI SHCreateDefClassObject(REFIID riid, LPVOID *ppv, LPFNCREATEINSTANCE lpfnCI, LPDWORD pcRefDll, REFIID riidInst)
Definition: shell32.cpp:208
#define DLL_PROCESS_DETACH
Definition: compat.h:119
HRESULT Initialize(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, const IID *riidInstx)
Definition: shell32.cpp:156
#define MAKEDLLVERULL(mjr, mnr, bld, qfe)
Definition: shlwapi.h:1982
HANDLE hUserToken
Definition: install.c:39
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:541
EXTERN_C BOOL WINAPI RegenerateUserEnvironment(LPVOID *lpEnvironment, BOOL bUpdateSelf)
Definition: shell32.cpp:71
#define ICC_DATE_CLASSES
Definition: commctrl.h:67
#define TRACE(s)
Definition: solgame.cpp:4
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
const GUID CLSID_StartMenu
__wchar_t WCHAR
Definition: xmlstorage.h:180
HRESULT WINAPI UpdateRegistryFromResource(LPCTSTR lpszRes, BOOL bRegister, struct _ATL_REGMAP_ENTRY *pMapEntries=NULL)
Definition: atlbase.h:439
LONG HRESULT
Definition: typedefs.h:77
const GUID IID_IUnknown
HANDLE WINAPI GetCurrentProcess(VOID)
Definition: proc.c:1138
#define MAX_PATH
Definition: compat.h:26
#define swprintf(buf, format,...)
Definition: sprintf.c:56
#define WINAPI
Definition: msvc.h:6
return TRUE
Definition: shell32.cpp:397
DWORD dwReason
Definition: shell32.cpp:367
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD LPVOID fImpLoad
Definition: shell32.cpp:368
BOOL WINAPI DECLSPEC_HOTPATCH SetEnvironmentVariableW(IN LPCWSTR lpName, IN LPCWSTR lpValue)
Definition: environ.c:259
HRESULT WINAPI RSHELL_CStartMenu_CreateInstance(REFIID riid, void **ppv)
Definition: CStartMenu.cpp:418
HRESULT(CALLBACK * LPFNCREATEINSTANCE)(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppvObject)
Definition: shell32.cpp:111
const GUID CLSID_SendToMenu
Definition: CSendToMenu.h:24
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
void InitChangeNotifications(void)
Definition: changenotify.c:183
static const WCHAR L[]
Definition: oid.c:1250
#define TOKEN_READ
Definition: setypes.h:897
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:893
const IID * riidInst
Definition: shell32.cpp:133
REFIID LPVOID * ppvObject
Definition: precomp.h:44
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:2662
#define DECLARE_REGISTRY_RESOURCEID(x)
Definition: atlcom.h:605
#define WINE_FILEVERSION_BUILD
const GUID CLSID_MenuBandSite
#define ERR(fmt,...)
Definition: debug.h:109
#define WINE_FILEVERSION_PLATFORMID
#define S_OK
Definition: intsafe.h:59
#define InterlockedIncrement
Definition: armddk.h:53
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:561
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: shell32.cpp:412
#define E_NOTIMPL
Definition: ddrawi.h:99
HRESULT IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, const IID *riidInst, IClassFactory **theFactory)
Definition: shell32.cpp:200
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:296
STDAPI DllCanUnloadNow()
Definition: shell32.cpp:403
const WCHAR * class
Definition: main.c:68
uint32_t * LPDWORD
Definition: typedefs.h:57
void SIC_Destroy(void)
Definition: iconcache.cpp:632
CShell32Module gModule
Definition: shell32.cpp:303
UINT LeadingZero
Definition: winnls.h:640
#define IDR_FOLDEROPTIONS
Definition: shresdef.h:800
LPFNCREATEINSTANCE lpfnCI
Definition: shell32.cpp:132
#define BEGIN_OBJECT_MAP(x)
Definition: atlcom.h:649
HRESULT DllUnregisterServer(BOOL bUnRegTypeLib=TRUE)
Definition: atlbase.h:945
#define WINE_FILEVERSION_MAJOR
#define END_COM_MAP()
Definition: atlcom.h:552
INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags, LPCWSTR lpszValue, const NUMBERFMTW *lpFormat, LPWSTR lpNumberStr, int cchOut)
Definition: lcformat.c:1198
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define E_POINTER
Definition: winerror.h:2365
#define EXTERN_C
Definition: basetyps.h:12
const GUID IID_IClassFactory
signed int * PLONG
Definition: retypes.h:5
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
virtual HRESULT WINAPI CreateInstance(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppvObject)
Definition: shell32.cpp:172
HINSTANCE shell32_hInstance
Definition: shell32.cpp:359
#define END_OBJECT_MAP()
Definition: atlcom.h:651
#define IDR_STARTMENU
Definition: shresdef.h:813
CLSID * rclsid
Definition: shell32.cpp:131
HRESULT SHELL_RegisterShellFolders(void) DECLSPEC_HIDDEN
Definition: shellpath.c:2546