ReactOS 0.4.17-dev-1196-gb6224c3
shell32.cpp File Reference
#include "precomp.h"
#include "shell32_version.h"
Include dependency graph for shell32.cpp:

Go to the source code of this file.

Classes

struct  IDefClFImpl
 
class  CStartMenuDummy
 
class  CStartMenuDummy::_CreatorClass
 
class  CShell32Module
 

Typedefs

typedef HRESULT(CALLBACK * LPFNCREATEINSTANCE) (IUnknown *pUnkOuter, REFIID riid, LPVOID *ppvObject)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
EXTERN_C LPWSTR WINAPI AddCommasW (DWORD lValue, LPWSTR lpNumber)
 
EXTERN_C BOOL WINAPI RegenerateUserEnvironment (LPVOID *lpEnvironment, BOOL bUpdateSelf)
 
HRESULT IDefClF_fnConstructor (LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, const IID *riidInst, IClassFactory **theFactory)
 
HRESULT WINAPI SHCreateDefClassObject (REFIID riid, LPVOID *ppv, LPFNCREATEINSTANCE lpfnCI, LPDWORD pcRefDll, REFIID riidInst)
 
STDAPI DllGetVersion (DLLVERSIONINFO *pdvi)
 
 STDAPI_ (BOOL) DllMain(HINSTANCE hInstance
 
 if (dwReason==DLL_PROCESS_ATTACH)
 
STDAPI DllCanUnloadNow ()
 
STDAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 
static HRESULT UpdateRegistryFromResource (BOOL Register)
 
STDAPI DllRegisterServer ()
 
STDAPI DllUnregisterServer ()
 
HRESULT WINAPI DllInstall (BOOL bInstall, LPCWSTR cmdline)
 

Variables

CShell32Module gModule
 
HINSTANCE shell32_hInstance
 
DWORD dwReason
 
DWORD LPVOID fImpLoad
 
return TRUE
 

Typedef Documentation

◆ LPFNCREATEINSTANCE

typedef HRESULT(CALLBACK * LPFNCREATEINSTANCE) (IUnknown *pUnkOuter, REFIID riid, LPVOID *ppvObject)

Definition at line 176 of file shell32.cpp.

Function Documentation

◆ AddCommasW()

EXTERN_C LPWSTR WINAPI AddCommasW ( DWORD  lValue,
LPWSTR  lpNumber 
)

Definition at line 33 of file shell32.cpp.

34{
35 WCHAR szValue[MAX_PATH], szSeparator[8 + 1], szGrouping[10 + 1];
36 NUMBERFMTW numFormat;
37
40 szSeparator,
41 _countof(szSeparator));
42
43 /* Parse LOCALE_SGROUPING into NUMBERFMTW::Grouping.
44 * Accumulate the digit groups left-to-right. If there's no trailing ';0'
45 * the last group repeats, so multiply by 10. */
46 DWORD dwGrouping = 3;
49 szGrouping,
50 _countof(szGrouping)))
51 {
52 PWSTR p = szGrouping;
53 dwGrouping = 0;
54 while (*p)
55 {
56 if (*p >= L'1' && *p <= L'9')
57 dwGrouping = dwGrouping * 10 + (*p - L'0');
58 p++;
59 }
60 if (p > szGrouping && *(p - 1) != L'0')
61 dwGrouping *= 10;
62 }
63 numFormat.NumDigits = 0;
64 numFormat.LeadingZero = 0;
65 numFormat.Grouping = dwGrouping;
66 numFormat.lpDecimalSep = szSeparator;
67 numFormat.lpThousandSep = szSeparator;
68 numFormat.NegativeOrder = 0;
69
70 _swprintf(szValue, L"%lu", lValue);
71
73 0,
74 szValue,
75 &numFormat,
76 lpNumber,
77 MAX_PATH) != 0)
78 {
79 return lpNumber;
80 }
81
82 wcscpy(lpNumber, szValue);
83 return lpNumber;
84}
#define MAX_PATH
Definition: compat.h:34
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1675
#define L(x)
Definition: resources.c:13
unsigned long DWORD
Definition: ntddk_ex.h:95
GLfloat GLfloat p
Definition: glext.h:8902
INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags, LPCWSTR lpszValue, const NUMBERFMTW *lpFormat, LPWSTR lpNumberStr, int cchOut)
Definition: lcformat.c:1130
#define _swprintf(buf, format,...)
Definition: sprintf.c:56
#define LOCALE_USER_DEFAULT
short WCHAR
Definition: pedump.c:58
wcscpy
#define _countof(array)
Definition: sndvol32.h:70
UINT NumDigits
Definition: winnls.h:726
LPWSTR lpDecimalSep
Definition: winnls.h:729
UINT Grouping
Definition: winnls.h:728
UINT NegativeOrder
Definition: winnls.h:731
LPWSTR lpThousandSep
Definition: winnls.h:730
UINT LeadingZero
Definition: winnls.h:727
uint16_t * PWSTR
Definition: typedefs.h:56
#define LOCALE_SGROUPING
Definition: winnls.h:54
#define LOCALE_STHOUSAND
Definition: winnls.h:53

Referenced by START_TEST().

◆ DllCanUnloadNow()

STDAPI DllCanUnloadNow ( void  )

Definition at line 502 of file shell32.cpp.

503{
504 return gModule.DllCanUnloadNow();
505}
HRESULT DllCanUnloadNow()
Definition: atlbase.h:1030
CShell32Module gModule
Definition: shell32.cpp:402

◆ DllGetClassObject()

STDAPI DllGetClassObject ( REFCLSID  rclsid,
REFIID  riid,
LPVOID *  ppv 
)

Definition at line 511 of file shell32.cpp.

512{
513 HRESULT hResult;
514
515 TRACE("CLSID:%s,IID:%s\n", shdebugstr_guid(&rclsid), shdebugstr_guid(&riid));
516
517 hResult = gModule.DllGetClassObject(rclsid, riid, ppv);
518 TRACE("-- pointer to class factory: %p\n", *ppv);
519 return hResult;
520}
HRESULT DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: atlbase.h:1037
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:438
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define TRACE(s)
Definition: solgame.cpp:4

◆ DllGetVersion()

STDAPI DllGetVersion ( DLLVERSIONINFO *  pdvi)

Definition at line 421 of file shell32.cpp.

422{
423 /* FIXME: shouldn't these values come from the version resource? */
424 if (pdvi->cbSize == sizeof(DLLVERSIONINFO) ||
425 pdvi->cbSize == sizeof(DLLVERSIONINFO2))
426 {
431 if (pdvi->cbSize == sizeof(DLLVERSIONINFO2))
432 {
433 DLLVERSIONINFO2 *pdvi2 = (DLLVERSIONINFO2 *)pdvi;
434
435 pdvi2->dwFlags = 0;
440 }
441 TRACE("%u.%u.%u.%u\n",
442 pdvi->dwMajorVersion, pdvi->dwMinorVersion,
443 pdvi->dwBuildNumber, pdvi->dwPlatformID);
444 return S_OK;
445 }
446 else
447 {
448 WARN("wrong DLLVERSIONINFO size from app\n");
449 return E_INVALIDARG;
450 }
451}
#define WARN(fmt,...)
Definition: precomp.h:61
#define E_INVALIDARG
Definition: ddrawi.h:101
#define S_OK
Definition: intsafe.h:52
#define WINE_FILEVERSION_MINOR
#define WINE_FILEVERSION_PLATFORMID
#define WINE_FILEVERSION_MAJOR
#define WINE_FILEVERSION_BUILD
#define MAKEDLLVERULL(major, minor, build, qfe)
Definition: shlwapi.h:113
ULONGLONG ullVersion
Definition: shlwapi.h:132
DWORD dwMajorVersion
Definition: shlwapi.h:121
DWORD dwBuildNumber
Definition: shlwapi.h:123
DWORD dwMinorVersion
Definition: shlwapi.h:122
DWORD cbSize
Definition: shlwapi.h:120
DWORD dwPlatformID
Definition: shlwapi.h:124

◆ DllInstall()

HRESULT WINAPI DllInstall ( BOOL  bInstall,
LPCWSTR  cmdline 
)

Definition at line 583 of file shell32.cpp.

584{
585 FIXME("%s %s: stub\n", bInstall ? "TRUE":"FALSE", debugstr_w(cmdline));
586 return S_OK; /* indicate success */
587}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define debugstr_w
Definition: kernel32.h:32
TCHAR * cmdline
Definition: stretchblt.cpp:32

◆ DllRegisterServer()

STDAPI DllRegisterServer ( void  )

Definition at line 539 of file shell32.cpp.

540{
541 HRESULT hr;
542
544 if (FAILED(hr))
545 return hr;
546
548 return hr;
549
551 if (FAILED(hr))
552 return hr;
553
554 return S_OK;
555}
HRESULT DllRegisterServer(BOOL bRegTypeLib=TRUE)
Definition: atlbase.h:1042
HRESULT hr
Definition: delayimp.cpp:582
#define FAILED(hr)
Definition: intsafe.h:51
return TRUE
Definition: shell32.cpp:496
static HRESULT UpdateRegistryFromResource(BOOL Register)
Definition: shell32.cpp:522
HRESULT SHELL_RegisterShellFolders(void) DECLSPEC_HIDDEN
Definition: shellpath.c:5757

◆ DllUnregisterServer()

STDAPI DllUnregisterServer ( void  )

Definition at line 560 of file shell32.cpp.

561{
562 HRESULT hr;
563
565 if (FAILED(hr))
566 return hr;
567
569 return hr;
570
571 return S_OK;
572}
HRESULT DllUnregisterServer(BOOL bUnRegTypeLib=TRUE)
Definition: atlbase.h:1047
#define FALSE
Definition: types.h:117

◆ IDefClF_fnConstructor()

HRESULT IDefClF_fnConstructor ( LPFNCREATEINSTANCE  lpfnCI,
PLONG  pcRefDll,
const IID *  riidInst,
IClassFactory **  theFactory 
)

Definition at line 291 of file shell32.cpp.

292{
293 return ShellObjectCreatorInit<IDefClFImpl>(lpfnCI, pcRefDll, riidInst, IID_PPV_ARG(IClassFactory, theFactory));
294}
#define IID_PPV_ARG(Itype, ppType)
LPFNCREATEINSTANCE lpfnCI
Definition: shellole.c:61

Referenced by SHCreateDefClassObject().

◆ if()

Definition at line 469 of file shell32.cpp.

470 {
472 gModule.Init(ObjectMap, hInstance, &LIBID_Shell32);
473
475
476 /* get full path to this DLL for IExtractIconW_fnGetIconLocation() */
478 swShell32Name[MAX_PATH - 1] = '\0';
479
480 /* Initialize comctl32 */
481 INITCOMMONCONTROLSEX InitCtrls;
482 InitCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);
484 InitCommonControlsEx(&InitCtrls);
485
486 /* Bad idea, initialization in DllMain! */
488 }
EXTERN_C void InitChangeNotifications(void)
HINSTANCE hInstance
Definition: charmap.c:19
HRESULT Init(_ATL_OBJMAP_ENTRY *p, HINSTANCE, const GUID *plibid)
Definition: atlbase.h:886
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:904
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
WCHAR swShell32Name[MAX_PATH]
Definition: folders.cpp:22
struct tagINITCOMMONCONTROLSEX INITCOMMONCONTROLSEX
#define ICC_USEREX_CLASSES
Definition: commctrl.h:68
#define ICC_DATE_CLASSES
Definition: commctrl.h:67
#define ICC_WIN95_CLASSES
Definition: commctrl.h:66
HINSTANCE shell32_hInstance
Definition: shell32.cpp:458

◆ RegenerateUserEnvironment()

EXTERN_C BOOL WINAPI RegenerateUserEnvironment ( LPVOID *  lpEnvironment,
BOOL  bUpdateSelf 
)

Definition at line 91 of file shell32.cpp.

92{
94 LPVOID pEnv = NULL;
95 BOOL bResult = FALSE;
96
97 if (!lpEnvironment)
98 return FALSE;
99
102 &hUserToken))
103 {
104 return FALSE;
105 }
106
108 {
110 return FALSE;
111 }
112
113 *lpEnvironment = pEnv;
114 bResult = TRUE;
115
116 if (bUpdateSelf)
117 {
118 CSimpleMap<CStringW, bool> newVarNames;
119
120 LPWSTR pszz = (LPWSTR)pEnv;
121 while (pszz && *pszz)
122 {
123 if (pszz[0] != L'=')
124 {
125 LPWSTR pchEqual = wcschr(pszz, L'=');
126 if (pchEqual)
127 {
128 *pchEqual = L'\0';
129 CStringW key(pszz);
130 key.MakeUpper();
131 newVarNames.Add(key, true);
132 SetEnvironmentVariableW(pszz, pchEqual + 1);
133 *pchEqual = L'=';
134 }
135 }
136 pszz += wcslen(pszz) + 1;
137 }
138
139 LPWCH pCurEnv = GetEnvironmentStringsW();
140 if (pCurEnv)
141 {
142 LPWSTR pCur = (LPWSTR)pCurEnv;
143 while (pCur && *pCur)
144 {
145 if (pCur[0] != L'=')
146 {
147 LPWSTR pchEqual = wcschr(pCur, L'=');
148 if (pchEqual)
149 {
150 *pchEqual = L'\0';
152 key.MakeUpper();
153 if (newVarNames.FindKey(key) < 0)
155 *pchEqual = L'=';
156 }
157 }
158 pCur += wcslen(pCur) + 1;
159 }
161 }
162
163 /* We free the environment block now that we have applied it to the process;
164 * the caller gets NULL back in *lpEnvironment in this case. */
166 *lpEnvironment = NULL;
167 }
168
170 return bResult;
171}
HANDLE hUserToken
Definition: install.c:39
int FindKey(const TKey &key) const
Definition: atlsimpcoll.h:315
BOOL Add(const TKey &key, const TVal &val)
Definition: atlsimpcoll.h:309
#define NULL
Definition: types.h:112
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:294
#define CloseHandle
Definition: compat.h:739
#define wcschr
Definition: compat.h:17
#define GetCurrentProcess()
Definition: compat.h:759
BOOL WINAPI FreeEnvironmentStringsW(IN LPWSTR EnvironmentStrings)
Definition: environ.c:362
BOOL WINAPI DECLSPEC_HOTPATCH SetEnvironmentVariableW(IN LPCWSTR lpName, IN LPCWSTR lpValue)
Definition: environ.c:232
LPWSTR WINAPI DECLSPEC_HOTPATCH GetEnvironmentStringsW(void)
Definition: process.c:1556
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
BOOL WINAPI DestroyEnvironmentBlock(IN LPVOID lpEnvironment)
Definition: environment.c:761
BOOL WINAPI CreateEnvironmentBlock(OUT LPVOID *lpEnvironment, IN HANDLE hToken, IN BOOL bInherit)
Definition: environment.c:503
unsigned int BOOL
Definition: ntddk_ex.h:94
SINGLE_LIST_ENTRY * pCur
WCHAR * LPWCH
Definition: ntbasedef.h:422
Definition: copy.c:22
uint16_t * LPWSTR
Definition: typedefs.h:56
#define TOKEN_DUPLICATE
Definition: setypes.h:938
#define TOKEN_QUERY
Definition: setypes.h:940
#define TOKEN_ASSIGN_PRIMARY
Definition: setypes.h:937

Referenced by CDesktopBrowser::OnSettingChange().

◆ SHCreateDefClassObject()

HRESULT WINAPI SHCreateDefClassObject ( REFIID  riid,
LPVOID *  ppv,
LPFNCREATEINSTANCE  lpfnCI,
LPDWORD  pcRefDll,
REFIID  riidInst 
)

Definition at line 299 of file shell32.cpp.

305{
306 IClassFactory *pcf;
307 HRESULT hResult;
308
309 TRACE("%s %p %p %p %s\n", shdebugstr_guid(&riid), ppv, lpfnCI, pcRefDll, shdebugstr_guid(&riidInst));
310
312 return E_NOINTERFACE;
313 hResult = IDefClF_fnConstructor(lpfnCI, (PLONG)pcRefDll, &riidInst, &pcf);
314 if (FAILED(hResult))
315 return hResult;
316 *ppv = pcf;
317 return S_OK;
318}
const GUID IID_IClassFactory
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
HRESULT IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, const IID *riidInst, IClassFactory **theFactory)
Definition: shell32.cpp:291
int32_t * PLONG
Definition: typedefs.h:58
#define E_NOINTERFACE
Definition: winerror.h:3479

Referenced by test_LockServer().

◆ STDAPI_()

STDAPI_ ( BOOL  )

◆ UpdateRegistryFromResource()

static HRESULT UpdateRegistryFromResource ( BOOL  Register)
static

Definition at line 522 of file shell32.cpp.

523{
524 static const BYTE resid[] =
525 {
529 };
530 HRESULT hr = S_OK;
531 for (SIZE_T i = 0; i < _countof(resid) && SUCCEEDED(hr); ++i)
533 return hr;
534}
HRESULT WINAPI UpdateRegistryFromResource(LPCTSTR lpszRes, BOOL bRegister, struct _ATL_REGMAP_ENTRY *pMapEntries=NULL)
Definition: atlbase.h:489
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
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define IDR_EXPLORER
Definition: shresdef.h:960
#define IDR_FOLDEROPTIONS
Definition: shresdef.h:929
#define IDR_SYSTEMFILEASSOC
Definition: shresdef.h:961
ULONG_PTR SIZE_T
Definition: typedefs.h:80
unsigned char BYTE
Definition: xxhash.c:193

Referenced by DllRegisterServer(), and DllUnregisterServer().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )

Variable Documentation

◆ dwReason

DWORD dwReason

Definition at line 466 of file shell32.cpp.

◆ fImpLoad

DWORD LPVOID fImpLoad
Initial value:
{
TRACE("%p 0x%x %p\n", hInstance, dwReason, fImpLoad)
DWORD LPVOID fImpLoad
Definition: shell32.cpp:467
DWORD dwReason
Definition: shell32.cpp:466

Definition at line 466 of file shell32.cpp.

◆ gModule

◆ shell32_hInstance

HINSTANCE shell32_hInstance

Definition at line 458 of file shell32.cpp.

Referenced by if().

◆ TRUE

return TRUE

Definition at line 496 of file shell32.cpp.

Referenced by DllRegisterServer(), DllUnregisterServer(), and RegenerateUserEnvironment().