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