xref: /reactos/dll/win32/shlwapi/shlwapi_main.c (revision 21925d93)
1 /*
2  * SHLWAPI initialisation
3  *
4  *  Copyright 1998 Marcus Meissner
5  *  Copyright 1998 Juergen Schmied (jsch)
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 <stdarg.h>
23 
24 #include "windef.h"
25 #include "winbase.h"
26 #define NO_SHLWAPI_REG
27 #define NO_SHLWAPI_STREAM
28 #include "shlwapi.h"
29 #include "wine/debug.h"
30 
31 WINE_DEFAULT_DEBUG_CHANNEL(shell);
32 
33 DECLSPEC_HIDDEN HINSTANCE shlwapi_hInstance = 0;
34 DECLSPEC_HIDDEN DWORD SHLWAPI_ThreadRef_index = TLS_OUT_OF_INDEXES;
35 
36 #ifdef __REACTOS__
37 extern CRITICAL_SECTION g_csBagCacheLock;
38 VOID FreeViewStatePropertyBagCache(VOID);
39 #endif
40 
41 /*************************************************************************
42  * SHLWAPI {SHLWAPI}
43  *
44  * The Shell Light-Weight API dll provides a large number of utility functions
45  * which are commonly required by Win32 programs. Originally distributed with
46  * Internet Explorer as a free download, it became a core part of Windows when
47  * Internet Explorer was 'integrated' into the O/S with the release of Win98.
48  *
49  * All functions exported by ordinal are undocumented by MS. The vast majority
50  * of these are wrappers for Unicode functions that may not exist on early 16
51  * bit platforms. The remainder perform various small tasks and presumably were
52  * added to facilitate code reuse amongst the MS developers.
53  */
54 
55 /*************************************************************************
56  * SHLWAPI DllMain
57  *
58  * NOTES
59  *  calling oleinitialize here breaks some apps.
60  */
DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID fImpLoad)61 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
62 {
63 	TRACE("%p 0x%x %p\n", hinstDLL, fdwReason, fImpLoad);
64 	switch (fdwReason)
65 	{
66 	  case DLL_PROCESS_ATTACH:
67             DisableThreadLibraryCalls(hinstDLL);
68 	    shlwapi_hInstance = hinstDLL;
69 	    SHLWAPI_ThreadRef_index = TlsAlloc();
70 #ifdef __REACTOS__
71 	    InitializeCriticalSection(&g_csBagCacheLock);
72 #endif
73 	    break;
74 	  case DLL_PROCESS_DETACH:
75             if (fImpLoad) break;
76 #ifdef __REACTOS__
77 	    FreeViewStatePropertyBagCache();
78 	    DeleteCriticalSection(&g_csBagCacheLock);
79 #endif
80 	    if (SHLWAPI_ThreadRef_index != TLS_OUT_OF_INDEXES) TlsFree(SHLWAPI_ThreadRef_index);
81 	    break;
82 	}
83 	return TRUE;
84 }
85 
86 /***********************************************************************
87  * DllGetVersion [SHLWAPI.@]
88  *
89  * Retrieve "shlwapi.dll" version information.
90  *
91  * PARAMS
92  *     pdvi [O] pointer to version information structure.
93  *
94  * RETURNS
95  *     Success: S_OK. pdvi is updated with the version information
96  *     Failure: E_INVALIDARG, if pdvi->cbSize is not set correctly.
97  *
98  * NOTES
99  *     You may pass either a DLLVERSIONINFO of DLLVERSIONINFO2 structure
100  *     as pdvi, provided that the size is set correctly.
101  *     Returns version as shlwapi.dll from IE5.01.
102  */
DllGetVersion(DLLVERSIONINFO * pdvi)103 HRESULT WINAPI DllGetVersion (DLLVERSIONINFO *pdvi)
104 {
105   DLLVERSIONINFO2 *pdvi2 = (DLLVERSIONINFO2*)pdvi;
106 
107   TRACE("(%p)\n",pdvi);
108 
109   if (!pdvi)
110     return E_INVALIDARG;
111 
112   switch (pdvi2->info1.cbSize)
113   {
114   case sizeof(DLLVERSIONINFO2):
115     pdvi2->dwFlags = 0;
116     pdvi2->ullVersion = MAKEDLLVERULL(6, 0, 2800, 1612);
117     /* Fall through */
118   case sizeof(DLLVERSIONINFO):
119     pdvi2->info1.dwMajorVersion = 6;
120     pdvi2->info1.dwMinorVersion = 0;
121     pdvi2->info1.dwBuildNumber = 2800;
122     pdvi2->info1.dwPlatformID = DLLVER_PLATFORM_WINDOWS;
123     return S_OK;
124  }
125 
126  WARN("pdvi->cbSize = %d, unhandled\n", pdvi2->info1.cbSize);
127  return E_INVALIDARG;
128 }
129