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 */ 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 */ 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