ReactOS 0.4.15-dev-5669-g09dde2c
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 */
33AddCommasW(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 */
71RegenerateUserEnvironment(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 */
112HRESULT 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
127 public CComObjectRootEx<CComMultiThreadModelNoCS>,
128 public IClassFactory
129{
130private:
133 const IID *riidInst;
134 LONG *pcRefDll; /* pointer to refcounter in external dll (ugrrr...) */
135public:
136 IDefClFImpl();
138
139 // IClassFactory
141 virtual HRESULT WINAPI LockServer(BOOL fLock);
142
146};
147
149{
150 lpfnCI = NULL;
151 riidInst = NULL;
152 pcRefDll = NULL;
153 rclsid = NULL;
154}
155
156HRESULT 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{
236private:
239
240public:
242
244 {
245 public:
247 {
248 if (ppv == NULL)
249 return E_POINTER;
250 *ppv = NULL;
251 if (pv != NULL)
254 }
255 };
256};
257
258/**************************************************************************
259 * CShell32Module
260 */
262{
263public:
264 void Term()
265 {
266 CComCreatorCentralInstance< ATL::CComObject< CDrivesFolder > >::Term();
267 CComCreatorCentralInstance< ATL::CComObject< CDesktopFolder > >::Term();
269 }
270};
271
272
273BEGIN_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)
293 OBJECT_ENTRY(CLSID_CopyToMenu, CCopyToMenu)
294 OBJECT_ENTRY(CLSID_MoveToMenu, CMoveToMenu)
297 OBJECT_ENTRY(CLSID_MenuBand, CMenuBand)
298 OBJECT_ENTRY(CLSID_MenuDeskBar, CMenuDeskBar)
299 OBJECT_ENTRY(CLSID_MergedFolder, CMergedFolder)
300 OBJECT_ENTRY(CLSID_ExeDropHandler, CExeDropHandler)
301 OBJECT_ENTRY(CLSID_QueryAssociations, CQueryAssociations)
302 OBJECT_ENTRY(CLSID_UserNotification, CUserNotification)
304
306
307
308/***********************************************************************
309 * DllGetVersion [SHELL32.@]
310 *
311 * Retrieves version information of the 'SHELL32.DLL'
312 *
313 * PARAMS
314 * pdvi [O] pointer to version information structure.
315 *
316 * RETURNS
317 * Success: S_OK
318 * Failure: E_INVALIDARG
319 *
320 * NOTES
321 * Returns version of a shell32.dll from IE4.01 SP1.
322 */
323
325{
326 /* FIXME: shouldn't these values come from the version resource? */
327 if (pdvi->cbSize == sizeof(DLLVERSIONINFO) ||
328 pdvi->cbSize == sizeof(DLLVERSIONINFO2))
329 {
330 pdvi->dwMajorVersion = WINE_FILEVERSION_MAJOR;
331 pdvi->dwMinorVersion = WINE_FILEVERSION_MINOR;
332 pdvi->dwBuildNumber = WINE_FILEVERSION_BUILD;
333 pdvi->dwPlatformID = WINE_FILEVERSION_PLATFORMID;
334 if (pdvi->cbSize == sizeof(DLLVERSIONINFO2))
335 {
336 DLLVERSIONINFO2 *pdvi2 = (DLLVERSIONINFO2 *)pdvi;
337
338 pdvi2->dwFlags = 0;
339 pdvi2->ullVersion = MAKEDLLVERULL(WINE_FILEVERSION_MAJOR,
343 }
344 TRACE("%u.%u.%u.%u\n",
345 pdvi->dwMajorVersion, pdvi->dwMinorVersion,
346 pdvi->dwBuildNumber, pdvi->dwPlatformID);
347 return S_OK;
348 }
349 else
350 {
351 WARN("wrong DLLVERSIONINFO size from app\n");
352 return E_INVALIDARG;
353 }
354}
355
356/*************************************************************************
357 * global variables of the shell32.dll
358 * all are once per process
359 *
360 */
362
363/*************************************************************************
364 * SHELL32 DllMain
365 *
366 * NOTES
367 * calling oleinitialize here breaks sone apps.
368 */
370{
371 TRACE("%p 0x%x %p\n", hInstance, dwReason, fImpLoad);
373 {
375 gModule.Init(ObjectMap, hInstance, &LIBID_Shell32);
376
378
379 /* get full path to this DLL for IExtractIconW_fnGetIconLocation() */
381 swShell32Name[MAX_PATH - 1] = '\0';
382
383 /* Initialize comctl32 */
384 INITCOMMONCONTROLSEX InitCtrls;
385 InitCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);
387 InitCommonControlsEx(&InitCtrls);
388
389 /* Bad idea, initialization in DllMain! */
391 }
392 else if (dwReason == DLL_PROCESS_DETACH)
393 {
395 SIC_Destroy();
397 gModule.Term();
398 }
399 return TRUE;
400}
401
402/***********************************************************************
403 * DllCanUnloadNow (SHELL32.@)
404 */
406{
407 return gModule.DllCanUnloadNow();
408}
409
410/*************************************************************************
411 * DllGetClassObject [SHELL32.@]
412 * SHDllGetClassObject [SHELL32.128]
413 */
415{
416 HRESULT hResult;
417
418 TRACE("CLSID:%s,IID:%s\n", shdebugstr_guid(&rclsid), shdebugstr_guid(&riid));
419
420 hResult = gModule.DllGetClassObject(rclsid, riid, ppv);
421 TRACE("-- pointer to class factory: %p\n", *ppv);
422 return hResult;
423}
424
425/***********************************************************************
426 * DllRegisterServer (SHELL32.@)
427 */
429{
430 HRESULT hr;
431
433 if (FAILED(hr))
434 return hr;
435
437 if (FAILED(hr))
438 return hr;
439
441 if (FAILED(hr))
442 return hr;
443
444 return S_OK;
445}
446
447/***********************************************************************
448 * DllUnregisterServer (SHELL32.@)
449 */
451{
452 HRESULT hr;
453
455 if (FAILED(hr))
456 return hr;
457
459 if (FAILED(hr))
460 return hr;
461
462 return S_OK;
463}
464
465/*************************************************************************
466 * DllInstall [SHELL32.@]
467 *
468 * PARAMETERS
469 *
470 * BOOL bInstall - TRUE for install, FALSE for uninstall
471 * LPCWSTR pszCmdLine - command line (unused by shell32?)
472 */
473
475{
476 FIXME("%s %s: stub\n", bInstall ? "TRUE":"FALSE", debugstr_w(cmdline));
477 return S_OK; /* indicate success */
478}
const GUID CLSID_SendToMenu
Definition: CSendToMenu.h:24
#define InterlockedIncrement
Definition: armddk.h:53
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
const WCHAR * class
Definition: main.c:68
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
HANDLE hUserToken
Definition: install.c:39
HRESULT WINAPI RSHELL_CStartMenu_CreateInstance(REFIID riid, void **ppv)
Definition: CStartMenu.cpp:490
#define STDAPI_(t)
Definition: basetyps.h:42
#define STDAPI
Definition: basetyps.h:41
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHODIMP
Definition: basetyps.h:43
const GUID IID_IUnknown
const GUID IID_IClassFactory
#define FIXME(fmt,...)
Definition: debug.h:111
#define WARN(fmt,...)
Definition: debug.h:112
#define ERR(fmt,...)
Definition: debug.h:110
EXTERN_C void InitChangeNotifications(void)
EXTERN_C void FreeChangeNotifications(void)
HINSTANCE hInstance
Definition: charmap.c:19
HRESULT WINAPI UpdateRegistryFromResource(LPCTSTR lpszRes, BOOL bRegister, struct _ATL_REGMAP_ENTRY *pMapEntries=NULL)
Definition: atlbase.h:440
void Term()
Definition: atlbase.h:821
HRESULT DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: atlbase.h:936
HRESULT DllUnregisterServer(BOOL bUnRegTypeLib=TRUE)
Definition: atlbase.h:946
HRESULT Init(_ATL_OBJMAP_ENTRY *p, HINSTANCE, const GUID *plibid)
Definition: atlbase.h:798
HRESULT DllCanUnloadNow()
Definition: atlbase.h:929
HRESULT DllRegisterServer(BOOL bRegTypeLib=TRUE)
Definition: atlbase.h:941
static STDMETHODIMP CreateInstance(void *pv, REFIID riid, LPVOID *ppv)
Definition: shell32.cpp:246
virtual ~CStartMenuDummy()
virtual HRESULT WINAPI LockServer(BOOL fLock)
Definition: shell32.cpp:190
virtual HRESULT WINAPI CreateInstance(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppvObject)
Definition: shell32.cpp:172
const IID * riidInst
Definition: shell32.cpp:133
HRESULT Initialize(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, const IID *riidInstx)
Definition: shell32.cpp:156
LONG * pcRefDll
Definition: shell32.cpp:134
CLSID * rclsid
Definition: shell32.cpp:131
LPFNCREATEINSTANCE lpfnCI
Definition: shell32.cpp:132
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:893
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:427
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:296
#define CloseHandle
Definition: compat.h:739
#define wcschr
Definition: compat.h:17
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
#define GetCurrentProcess()
Definition: compat.h:759
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
BOOL WINAPI DECLSPEC_HOTPATCH SetEnvironmentVariableW(IN LPCWSTR lpName, IN LPCWSTR lpValue)
Definition: environ.c:259
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
const GUID CLSID_MenuBandSite
const GUID CLSID_FontsFolderShortcut
const GUID CLSID_AdminFolderShortcut
const GUID CLSID_StartMenu
HRESULT(CALLBACK * LPFNCREATEINSTANCE)(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppvObject)
Definition: shellole.c:52
LPFNCREATEINSTANCE lpfnCI
Definition: shellole.c:61
BOOL WINAPI CreateEnvironmentBlock(OUT LPVOID *lpEnvironment, IN HANDLE hToken, IN BOOL bInherit)
Definition: environment.c:505
#define swprintf
Definition: precomp.h:40
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
WCHAR swShell32Name[MAX_PATH]
Definition: folders.cpp:22
void SIC_Destroy(void)
Definition: iconcache.cpp:632
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
BOOL WINAPI DllMain(IN HINSTANCE hinstDLL, IN DWORD dwReason, IN LPVOID lpvReserved)
Definition: kbsdll.c:95
#define debugstr_w
Definition: kernel32.h:32
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: lang.c:1102
INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags, LPCWSTR lpszValue, const NUMBERFMTW *lpFormat, LPWSTR lpNumberStr, int cchOut)
Definition: lcformat.c:1198
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:542
#define END_OBJECT_MAP()
Definition: atlcom.h:652
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:562
#define OBJECT_ENTRY(clsid, class)
Definition: atlcom.h:654
#define DECLARE_REGISTRY_RESOURCEID(x)
Definition: atlcom.h:606
#define BEGIN_OBJECT_MAP(x)
Definition: atlcom.h:650
#define END_COM_MAP()
Definition: atlcom.h:553
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
#define WINE_FILEVERSION_MINOR
#define WINE_FILEVERSION_PLATFORMID
#define WINE_FILEVERSION_MAJOR
#define WINE_FILEVERSION_BUILD
#define LOCALE_USER_DEFAULT
#define L(x)
Definition: ntvdm.h:50
long LONG
Definition: pedump.c:60
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
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
HRESULT WINAPI SHCreateDefClassObject(REFIID riid, LPVOID *ppv, LPFNCREATEINSTANCE lpfnCI, LPDWORD pcRefDll, REFIID riidInst)
Definition: shell32.cpp:208
DWORD LPVOID fImpLoad
Definition: shell32.cpp:370
STDAPI DllGetVersion(DLLVERSIONINFO *pdvi)
Definition: shell32.cpp:324
STDAPI DllRegisterServer()
Definition: shell32.cpp:428
STDAPI DllCanUnloadNow()
Definition: shell32.cpp:405
STDAPI DllUnregisterServer()
Definition: shell32.cpp:450
HRESULT(CALLBACK * LPFNCREATEINSTANCE)(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppvObject)
Definition: shell32.cpp:111
HINSTANCE shell32_hInstance
Definition: shell32.cpp:361
EXTERN_C LPWSTR WINAPI AddCommasW(DWORD lValue, LPWSTR lpNumber)
Definition: shell32.cpp:33
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: shell32.cpp:414
HRESULT WINAPI DllInstall(BOOL bInstall, LPCWSTR cmdline)
Definition: shell32.cpp:474
return TRUE
Definition: shell32.cpp:399
DWORD dwReason
Definition: shell32.cpp:369
HRESULT IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, const IID *riidInst, IClassFactory **theFactory)
Definition: shell32.cpp:200
CShell32Module gModule
Definition: shell32.cpp:305
EXTERN_C BOOL WINAPI RegenerateUserEnvironment(LPVOID *lpEnvironment, BOOL bUpdateSelf)
Definition: shell32.cpp:71
HRESULT SHELL_RegisterShellFolders(void) DECLSPEC_HIDDEN
Definition: shellpath.c:3033
HRESULT hr
Definition: shlfolder.c:183
#define MAKEDLLVERULL(mjr, mnr, bld, qfe)
Definition: shlwapi.h:1982
#define IDR_FOLDEROPTIONS
Definition: shresdef.h:859
#define IDR_STARTMENU
Definition: shresdef.h:872
#define _countof(array)
Definition: sndvol32.h:68
#define TRACE(s)
Definition: solgame.cpp:4
TCHAR * cmdline
Definition: stretchblt.cpp:32
UINT NumDigits
Definition: winnls.h:642
LPWSTR lpDecimalSep
Definition: winnls.h:645
UINT Grouping
Definition: winnls.h:644
UINT NegativeOrder
Definition: winnls.h:647
LPWSTR lpThousandSep
Definition: winnls.h:646
UINT LeadingZero
Definition: winnls.h:643
uint32_t * LPDWORD
Definition: typedefs.h:59
int32_t * PLONG
Definition: typedefs.h:58
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:2364
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:2662
#define E_POINTER
Definition: winerror.h:2365
#define LOCALE_STHOUSAND
Definition: winnls.h:43
#define TOKEN_WRITE
Definition: setypes.h:949
#define TOKEN_READ
Definition: setypes.h:947
static void Initialize()
Definition: xlate.c:212
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185