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