34 #if defined(USE_WINDOWS_SSPI) || (!defined(CURL_DISABLE_TELNET) && \ 38 #if !defined(LOAD_WITH_ALTERED_SEARCH_PATH) 39 #define LOAD_WITH_ALTERED_SEARCH_PATH 0x00000008 42 #if !defined(LOAD_LIBRARY_SEARCH_SYSTEM32) 43 #define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800 47 typedef HMODULE (APIENTRY *LOADLIBRARYEX_FN)(LPCTSTR, HANDLE, DWORD);
52 # define LOADLIBARYEX L"LoadLibraryExW" 54 # define LOADLIBARYEX "LoadLibraryExW" 57 # define LOADLIBARYEX "LoadLibraryExA" 79 bool Curl_verify_windows_version(
const unsigned int majorVersion,
80 const unsigned int minorVersion,
81 const PlatformIdentifier platform,
82 const VersionCondition condition)
86 #if defined(CURL_WINDOWS_APP) 89 const WORD fullVersion = MAKEWORD(minorVersion, majorVersion);
93 case VERSION_LESS_THAN:
94 matched = targetVersion < fullVersion;
97 case VERSION_LESS_THAN_EQUAL:
98 matched = targetVersion <= fullVersion;
102 matched = targetVersion == fullVersion;
105 case VERSION_GREATER_THAN_EQUAL:
106 matched = targetVersion >= fullVersion;
109 case VERSION_GREATER_THAN:
110 matched = targetVersion > fullVersion;
114 if(matched && (platform == PLATFORM_WINDOWS)) {
118 #elif !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \ 119 (_WIN32_WINNT < _WIN32_WINNT_WIN2K) 122 memset(&osver, 0,
sizeof(osver));
123 osver.dwOSVersionInfoSize =
sizeof(osver);
126 if(GetVersionEx(&osver)) {
129 case VERSION_LESS_THAN:
130 if(osver.dwMajorVersion < majorVersion ||
131 (osver.dwMajorVersion == majorVersion &&
132 osver.dwMinorVersion < minorVersion))
136 case VERSION_LESS_THAN_EQUAL:
137 if(osver.dwMajorVersion <= majorVersion &&
138 osver.dwMinorVersion <= minorVersion)
143 if(osver.dwMajorVersion == majorVersion &&
144 osver.dwMinorVersion == minorVersion)
148 case VERSION_GREATER_THAN_EQUAL:
149 if(osver.dwMajorVersion >= majorVersion &&
150 osver.dwMinorVersion >= minorVersion)
154 case VERSION_GREATER_THAN:
155 if(osver.dwMajorVersion > majorVersion ||
156 (osver.dwMajorVersion == majorVersion &&
157 osver.dwMinorVersion > minorVersion))
165 case PLATFORM_WINDOWS:
166 if(osver.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS)
171 if(osver.dwPlatformId != VER_PLATFORM_WIN32_NT)
181 OSVERSIONINFOEX osver;
184 BYTE spMajorCondition;
185 BYTE spMinorCondition;
188 case VERSION_LESS_THAN:
189 majorCondition = VER_LESS;
190 minorCondition = VER_LESS;
191 spMajorCondition = VER_LESS_EQUAL;
192 spMinorCondition = VER_LESS_EQUAL;
195 case VERSION_LESS_THAN_EQUAL:
196 majorCondition = VER_LESS_EQUAL;
197 minorCondition = VER_LESS_EQUAL;
198 spMajorCondition = VER_LESS_EQUAL;
199 spMinorCondition = VER_LESS_EQUAL;
203 majorCondition = VER_EQUAL;
204 minorCondition = VER_EQUAL;
205 spMajorCondition = VER_GREATER_EQUAL;
206 spMinorCondition = VER_GREATER_EQUAL;
209 case VERSION_GREATER_THAN_EQUAL:
210 majorCondition = VER_GREATER_EQUAL;
211 minorCondition = VER_GREATER_EQUAL;
212 spMajorCondition = VER_GREATER_EQUAL;
213 spMinorCondition = VER_GREATER_EQUAL;
216 case VERSION_GREATER_THAN:
217 majorCondition = VER_GREATER;
218 minorCondition = VER_GREATER;
219 spMajorCondition = VER_GREATER_EQUAL;
220 spMinorCondition = VER_GREATER_EQUAL;
227 memset(&osver, 0,
sizeof(osver));
228 osver.dwOSVersionInfoSize =
sizeof(osver);
229 osver.dwMajorVersion = majorVersion;
230 osver.dwMinorVersion = minorVersion;
231 if(platform == PLATFORM_WINDOWS)
232 osver.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS;
233 else if(platform == PLATFORM_WINNT)
234 osver.dwPlatformId = VER_PLATFORM_WIN32_NT;
236 cm = VerSetConditionMask(cm, VER_MAJORVERSION, majorCondition);
237 cm = VerSetConditionMask(cm, VER_MINORVERSION, minorCondition);
238 cm = VerSetConditionMask(cm, VER_SERVICEPACKMAJOR, spMajorCondition);
239 cm = VerSetConditionMask(cm, VER_SERVICEPACKMINOR, spMinorCondition);
240 if(platform != PLATFORM_DONT_CARE)
241 cm = VerSetConditionMask(cm, VER_PLATFORMID, VER_EQUAL);
243 if(VerifyVersionInfo(&osver, (VER_MAJORVERSION | VER_MINORVERSION |
244 VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR),
252 #if defined(USE_WINDOWS_SSPI) || (!defined(CURL_DISABLE_TELNET) && \ 253 defined(USE_WINSOCK)) 269 HMODULE Curl_load_library(LPCTSTR filename)
271 HMODULE hModule = NULL;
272 LOADLIBRARYEX_FN pLoadLibraryEx = NULL;
275 HMODULE hKernel32 = GetModuleHandle(TEXT(
"kernel32"));
281 pLoadLibraryEx = (LOADLIBRARYEX_FN) GetProcAddress(hKernel32, LOADLIBARYEX);
287 if(_tcspbrk(filename, TEXT(
"\\/"))) {
289 hModule = pLoadLibraryEx ?
290 pLoadLibraryEx(filename, NULL, LOAD_WITH_ALTERED_SEARCH_PATH) :
291 LoadLibrary(filename);
296 else if(pLoadLibraryEx && GetProcAddress(hKernel32,
"AddDllDirectory")) {
298 hModule = pLoadLibraryEx(filename, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
302 UINT systemdirlen = GetSystemDirectory(NULL, 0);
306 size_t filenamelen = _tcslen(filename);
307 TCHAR *
path =
malloc(
sizeof(TCHAR) * (systemdirlen + 1 + filenamelen));
308 if(path && GetSystemDirectory(path, systemdirlen)) {
310 _tcscpy(path + _tcslen(path), TEXT(
"\\"));
311 _tcscpy(path + _tcslen(path), filename);
315 hModule = pLoadLibraryEx ?
316 pLoadLibraryEx(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH) :