Reactos

[WINESYNC] wininet: Add support for detecting the proxy config URL.

Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id a4357043ff9aa14f086207c239f0fc29c0a24b83 by Hans Leidekker <hans@codeweavers.com>

authored by

winesync and committed by
Jérôme Gardou
33fde115 3e234803

+336 -100
+7 -3
dll/win32/wininet/CMakeLists.txt
··· 1 1 2 - remove_definitions(-DWINVER=0x502) 3 - add_definitions(-DWINVER=0x600) 2 + remove_definitions( 3 + -DWINVER=0x502 4 + -D_WIN32_WINNT=0x502) 5 + add_definitions( 6 + -DWINVER=0x600 7 + -D_WIN32_WINNT=0x600) 4 8 5 9 add_definitions( 6 10 -D__WINESRC__ ··· 34 38 35 39 set_module_type(wininet win32dll) 36 40 target_link_libraries(wininet wine ${PSEH_LIB} zlib) 37 - add_delay_importlibs(wininet secur32 crypt32 cryptui) 41 + add_delay_importlibs(wininet secur32 crypt32 cryptui iphlpapi dhcpcsvc) 38 42 add_importlibs(wininet mpr shlwapi shell32 user32 advapi32 ws2_32 normaliz kernel32_vista msvcrt kernel32 ntdll) 39 43 add_pch(wininet precomp.h "${PCH_SKIP_SOURCE}") 40 44 add_cd_file(TARGET wininet DESTINATION reactos/system32 FOR all)
+7 -2
dll/win32/wininet/inet_ntop.c
··· 49 49 * author: 50 50 * Paul Vixie, 1996. 51 51 */ 52 - const char * 53 - inet_ntop(int af, const void *src, char *dst, socklen_t size) 52 + PCSTR 53 + WSAAPI 54 + inet_ntop( 55 + _In_ INT af, 56 + _In_ PVOID src, 57 + _Out_writes_(StringBufSize) PSTR dst, 58 + _In_ size_t size) 54 59 { 55 60 56 61 switch (af) {
+190 -45
dll/win32/wininet/internet.c
··· 1 + #ifdef __REACTOS__ 2 + #include "precomp.h" 3 + #else 1 4 /* 2 5 * Wininet 3 6 * ··· 28 31 29 32 #include "config.h" 30 33 31 - #ifdef HAVE_CORESERVICES_CORESERVICES_H 32 - #define GetCurrentThread MacGetCurrentThread 33 - #define LoadResource MacLoadResource 34 - #include <CoreServices/CoreServices.h> 35 - #undef GetCurrentThread 36 - #undef LoadResource 37 - #endif 38 - 39 34 #include "winsock2.h" 40 35 #include "ws2ipdef.h" 41 36 ··· 56 51 #include "winerror.h" 57 52 #define NO_SHLWAPI_STREAM 58 53 #include "shlwapi.h" 54 + #include "ws2tcpip.h" 55 + #include "winternl.h" 56 + #include "iphlpapi.h" 57 + #include "dhcpcsdk.h" 59 58 60 59 #include "wine/exception.h" 61 60 ··· 63 62 #include "resource.h" 64 63 65 64 #include "wine/unicode.h" 65 + #endif /* defined(__REACTOS__) */ 66 66 67 67 WINE_DEFAULT_DEBUG_CHANNEL(wininet); 68 68 ··· 76 76 HMODULE WININET_hModule; 77 77 78 78 static CRITICAL_SECTION WININET_cs; 79 - static CRITICAL_SECTION_DEBUG WININET_cs_debug = 79 + static CRITICAL_SECTION_DEBUG WININET_cs_debug = 80 80 { 81 81 0, 0, &WININET_cs, 82 82 { &WININET_cs_debug.ProcessLocksList, &WININET_cs_debug.ProcessLocksList }, ··· 740 740 * None 741 741 * 742 742 */ 743 - static void dump_INTERNET_FLAGS(DWORD dwFlags) 743 + static void dump_INTERNET_FLAGS(DWORD dwFlags) 744 744 { 745 745 #define FE(x) { x, #x } 746 746 static const wininet_flag_info flag[] = { ··· 781 781 TRACE(" %s", flag[i].name); 782 782 dwFlags &= ~flag[i].val; 783 783 } 784 - } 784 + } 785 785 if (dwFlags) 786 786 TRACE(" Unknown flags (%08x)\n", dwFlags); 787 787 else ··· 1017 1017 #undef FE 1018 1018 DWORD i; 1019 1019 const char *access_type_str = "Unknown"; 1020 - 1020 + 1021 1021 TRACE("(%s, %i, %s, %s, %i)\n", debugstr_w(lpszAgent), dwAccessType, 1022 1022 debugstr_w(lpszProxy), debugstr_w(lpszProxyBypass), dwFlags); 1023 1023 for (i = 0; i < ARRAY_SIZE(access_type); i++) { ··· 1378 1378 { 1379 1379 BOOL ret; 1380 1380 WIN32_FIND_DATAW fd; 1381 - 1381 + 1382 1382 ret = InternetFindNextFileW(hFind, lpvFindData?&fd:NULL); 1383 1383 if(lpvFindData) 1384 1384 WININET_find_data_WtoA(&fd, (LPWIN32_FIND_DATAA)lpvFindData); ··· 1436 1436 BOOL WINAPI InternetCloseHandle(HINTERNET hInternet) 1437 1437 { 1438 1438 object_header_t *obj; 1439 - 1439 + 1440 1440 TRACE("%p\n", hInternet); 1441 1441 1442 1442 obj = get_handle_object( hInternet ); ··· 1697 1697 return ret; 1698 1698 } 1699 1699 lpszap = lpszUrl; 1700 - 1700 + 1701 1701 /* Determine if the URI is absolute. */ 1702 1702 while (lpszap - lpszUrl < dwUrlLength) 1703 1703 { ··· 2298 2298 return res == ERROR_SUCCESS; 2299 2299 } 2300 2300 2301 - static WCHAR *get_proxy_autoconfig_url(void) 2301 + static IP_ADAPTER_ADDRESSES *get_adapters(void) 2302 + { 2303 + ULONG err, size = 1024, flags = GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST | 2304 + GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_SKIP_FRIENDLY_NAME; 2305 + IP_ADAPTER_ADDRESSES *tmp, *ret; 2306 + 2307 + if (!(ret = heap_alloc( size ))) return NULL; 2308 + err = GetAdaptersAddresses( AF_UNSPEC, flags, NULL, ret, &size ); 2309 + while (err == ERROR_BUFFER_OVERFLOW) 2310 + { 2311 + if (!(tmp = heap_realloc( ret, size ))) break; 2312 + ret = tmp; 2313 + err = GetAdaptersAddresses( AF_UNSPEC, flags, NULL, ret, &size ); 2314 + } 2315 + if (err == ERROR_SUCCESS) return ret; 2316 + heap_free( ret ); 2317 + return NULL; 2318 + } 2319 + 2320 + static WCHAR *detect_proxy_autoconfig_url_dhcp(void) 2321 + { 2322 + IP_ADAPTER_ADDRESSES *adapters, *ptr; 2323 + DHCPCAPI_PARAMS_ARRAY send_params, recv_params; 2324 + DHCPCAPI_PARAMS param; 2325 + WCHAR name[MAX_ADAPTER_NAME_LENGTH + 1], *ret = NULL; 2326 + DWORD err, size; 2327 + BYTE *tmp, *buf = NULL; 2328 + 2329 + if (!(adapters = get_adapters())) return NULL; 2330 + 2331 + memset( &send_params, 0, sizeof(send_params) ); 2332 + memset( &param, 0, sizeof(param) ); 2333 + param.OptionId = OPTION_MSFT_IE_PROXY; 2334 + recv_params.nParams = 1; 2335 + recv_params.Params = &param; 2336 + 2337 + for (ptr = adapters; ptr; ptr = ptr->Next) 2338 + { 2339 + MultiByteToWideChar( CP_ACP, 0, ptr->AdapterName, -1, name, ARRAY_SIZE(name) ); 2340 + TRACE( "adapter '%s' type %u dhcpv4 enabled %d\n", wine_dbgstr_w(name), ptr->IfType, ptr->Dhcpv4Enabled ); 2341 + 2342 + if (ptr->IfType == IF_TYPE_SOFTWARE_LOOPBACK) continue; 2343 + /* FIXME: also skip adapters where DHCP is disabled */ 2344 + 2345 + size = 256; 2346 + if (!(buf = heap_alloc( size ))) goto done; 2347 + err = DhcpRequestParams( DHCPCAPI_REQUEST_SYNCHRONOUS, NULL, name, NULL, send_params, recv_params, 2348 + buf, &size, NULL ); 2349 + while (err == ERROR_MORE_DATA) 2350 + { 2351 + if (!(tmp = heap_realloc( buf, size ))) goto done; 2352 + buf = tmp; 2353 + err = DhcpRequestParams( DHCPCAPI_REQUEST_SYNCHRONOUS, NULL, name, NULL, send_params, recv_params, 2354 + buf, &size, NULL ); 2355 + } 2356 + if (err == ERROR_SUCCESS && param.nBytesData) 2357 + { 2358 + int len = MultiByteToWideChar( CP_ACP, 0, (const char *)param.Data, param.nBytesData, NULL, 0 ); 2359 + if ((ret = heap_alloc( (len + 1) * sizeof(WCHAR) ))) 2360 + { 2361 + MultiByteToWideChar( CP_ACP, 0, (const char *)param.Data, param.nBytesData, ret, len ); 2362 + ret[len] = 0; 2363 + } 2364 + TRACE("returning %s\n", debugstr_w(ret)); 2365 + break; 2366 + } 2367 + } 2368 + 2369 + done: 2370 + heap_free( buf ); 2371 + heap_free( adapters ); 2372 + return ret; 2373 + } 2374 + 2375 + static char *get_computer_name( COMPUTER_NAME_FORMAT format ) 2376 + { 2377 + char *ret; 2378 + DWORD size = 0; 2379 + 2380 + GetComputerNameExA( format, NULL, &size ); 2381 + if (GetLastError() != ERROR_MORE_DATA) return NULL; 2382 + if (!(ret = heap_alloc( size ))) return NULL; 2383 + if (!GetComputerNameExA( format, ret, &size )) 2384 + { 2385 + heap_free( ret ); 2386 + return NULL; 2387 + } 2388 + return ret; 2389 + } 2390 + 2391 + static BOOL is_domain_suffix( const char *domain, const char *suffix ) 2392 + { 2393 + int len_domain = strlen( domain ), len_suffix = strlen( suffix ); 2394 + 2395 + if (len_suffix > len_domain) return FALSE; 2396 + if (!_strnicmp( domain + len_domain - len_suffix, suffix, -1 )) return TRUE; 2397 + return FALSE; 2398 + } 2399 + 2400 + static int reverse_lookup( const struct addrinfo *ai, char *hostname, size_t len ) 2302 2401 { 2303 - #if defined(MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 2402 + return getnameinfo( ai->ai_addr, ai->ai_addrlen, hostname, len, NULL, 0, 0 ); 2403 + } 2404 + 2405 + static WCHAR *build_wpad_url( const char *hostname, const struct addrinfo *ai ) 2406 + { 2407 + static const WCHAR httpW[] = {'h','t','t','p',':','/','/',0}; 2408 + static const WCHAR wpadW[] = {'/','w','p','a','d','.','d','a','t',0}; 2409 + char name[NI_MAXHOST]; 2410 + WCHAR *ret, *p; 2411 + int len; 2412 + 2413 + while (ai && ai->ai_family != AF_INET && ai->ai_family != AF_INET6) ai = ai->ai_next; 2414 + if (!ai) return NULL; 2304 2415 2305 - CFDictionaryRef settings = CFNetworkCopySystemProxySettings(); 2306 - WCHAR *ret = NULL; 2307 - SIZE_T len; 2308 - const void *ref; 2416 + if (!reverse_lookup( ai, name, sizeof(name) )) hostname = name; 2417 + 2418 + len = lstrlenW( httpW ) + strlen( hostname ) + lstrlenW( wpadW ); 2419 + if (!(ret = p = GlobalAlloc( 0, (len + 1) * sizeof(WCHAR) ))) return NULL; 2420 + lstrcpyW( p, httpW ); 2421 + p += lstrlenW( httpW ); 2422 + while (*hostname) { *p++ = *hostname++; } 2423 + lstrcpyW( p, wpadW ); 2424 + return ret; 2425 + } 2309 2426 2310 - if (!settings) return NULL; 2427 + static WCHAR *detect_proxy_autoconfig_url_dns(void) 2428 + { 2429 + char *fqdn, *domain, *p; 2430 + WCHAR *ret; 2311 2431 2312 - if (!(ref = CFDictionaryGetValue( settings, kCFNetworkProxiesProxyAutoConfigURLString ))) 2432 + if (!(fqdn = get_computer_name( ComputerNamePhysicalDnsFullyQualified ))) return NULL; 2433 + if (!(domain = get_computer_name( ComputerNamePhysicalDnsDomain ))) 2313 2434 { 2314 - CFRelease( settings ); 2435 + heap_free( fqdn ); 2315 2436 return NULL; 2316 2437 } 2317 - len = CFStringGetLength( ref ); 2318 - if (len) 2319 - ret = heap_alloc( (len+1) * sizeof(WCHAR) ); 2320 - if (ret) 2438 + p = fqdn; 2439 + while ((p = strchr( p, '.' )) && is_domain_suffix( p + 1, domain )) 2321 2440 { 2322 - CFStringGetCharacters( ref, CFRangeMake(0, len), ret ); 2323 - ret[len] = 0; 2441 + char *name; 2442 + struct addrinfo *ai; 2443 + int res; 2444 + 2445 + if (!(name = heap_alloc( sizeof("wpad") + strlen(p) ))) 2446 + { 2447 + heap_free( fqdn ); 2448 + heap_free( domain ); 2449 + return NULL; 2450 + } 2451 + strcpy( name, "wpad" ); 2452 + strcat( name, p ); 2453 + res = getaddrinfo( name, NULL, NULL, &ai ); 2454 + if (!res) 2455 + { 2456 + ret = build_wpad_url( name, ai ); 2457 + freeaddrinfo( ai ); 2458 + if (ret) 2459 + { 2460 + TRACE("returning %s\n", debugstr_w(ret)); 2461 + heap_free( name ); 2462 + break; 2463 + } 2464 + } 2465 + heap_free( name ); 2466 + p++; 2324 2467 } 2325 - TRACE( "returning %s\n", debugstr_w(ret) ); 2326 - CFRelease( settings ); 2468 + heap_free( domain ); 2469 + heap_free( fqdn ); 2470 + return ret; 2471 + } 2472 + 2473 + static WCHAR *get_proxy_autoconfig_url(void) 2474 + { 2475 + WCHAR *ret = detect_proxy_autoconfig_url_dhcp(); 2476 + if (!ret) ret = detect_proxy_autoconfig_url_dns(); 2327 2477 return ret; 2328 - #else 2329 - static int once; 2330 - if (!once++) FIXME( "no support on this platform\n" ); 2331 - return NULL; 2332 - #endif 2333 2478 } 2334 2479 2335 2480 static DWORD query_global_option(DWORD option, void *buffer, DWORD *size, BOOL unicode) ··· 3489 3634 WCHAR *host, *user = NULL, *pass = NULL, *path; 3490 3635 HINTERNET client = NULL, client1 = NULL; 3491 3636 DWORD res; 3492 - 3637 + 3493 3638 TRACE("(%p, %s, %s, %08x, %08x, %08lx)\n", hIC, debugstr_w(lpszUrl), debugstr_w(lpszHeaders), 3494 3639 dwHeadersLength, dwFlags, dwContext); 3495 - 3640 + 3496 3641 urlComponents.dwHostNameLength = 1; 3497 3642 urlComponents.dwUserNameLength = 1; 3498 3643 urlComponents.dwPasswordLength = 1; ··· 3527 3672 break; 3528 3673 } 3529 3674 break; 3530 - 3675 + 3531 3676 case INTERNET_SCHEME_HTTP: 3532 3677 case INTERNET_SCHEME_HTTPS: { 3533 3678 static const WCHAR szStars[] = { '*','/','*', 0 }; ··· 3626 3771 SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE); 3627 3772 goto lend; 3628 3773 } 3629 - 3774 + 3630 3775 if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC) { 3631 3776 open_url_task_t *task; 3632 3777 ··· 3636 3781 task->headers_len = dwHeadersLength; 3637 3782 task->flags = dwFlags; 3638 3783 task->context = dwContext; 3639 - 3784 + 3640 3785 INTERNET_AsyncCall(&task->hdr); 3641 3786 SetLastError(ERROR_IO_PENDING); 3642 3787 } else { 3643 3788 ret = INTERNET_InternetOpenUrlW(hIC, lpszUrl, lpszHeaders, dwHeadersLength, dwFlags, dwContext); 3644 3789 } 3645 - 3790 + 3646 3791 lend: 3647 3792 if( hIC ) 3648 3793 WININET_Release( &hIC->hdr ); 3649 3794 TRACE(" %p <--\n", ret); 3650 - 3795 + 3651 3796 return ret; 3652 3797 } 3653 3798 ··· 3681 3826 return NULL; 3682 3827 } 3683 3828 } 3684 - 3829 + 3685 3830 rc = InternetOpenUrlW(hInternet, szUrl, headers, dwHeadersLength, dwFlags, dwContext); 3686 3831 3687 3832 heap_free(szUrl);
+3 -7
dll/win32/wininet/precomp.h
··· 1 1 2 - #ifndef _WININET_PRECOMP_H_ 3 - #define _WININET_PRECOMP_H_ 2 + #pragma once 4 3 5 4 #include <wine/config.h> 6 5 ··· 9 8 10 9 #define _INC_WINDOWS 11 10 #define COM_NO_WINDOWS_H 12 - 13 - #define NONAMELESSUNION 14 - #define NONAMELESSSTRUCT 15 11 16 12 #include <windef.h> 17 13 #include <winbase.h> ··· 57 53 #define closesocket close 58 54 #define ioctlsocket ioctl 59 55 #endif /* __MINGW32__ */ 56 + #include <iphlpapi.h> 57 + #include <dhcpcsdk.h> 60 58 61 59 #include "internet.h" 62 60 #include "resource.h" 63 - 64 - #endif /* !_WININET_PRECOMP_H_ */
+7 -7
dll/win32/wininet/utility.c
··· 1 + #ifdef __REACTOS__ 2 + #include "precomp.h" 3 + #include "inet_ntop.c" 4 + #else 1 5 /* 2 6 * Wininet - Utility functions 3 7 * ··· 36 40 37 41 #include "wine/debug.h" 38 42 #include "internet.h" 39 - 40 - #ifdef __REACTOS__ 41 - #include <stdio.h> 42 - #include "inet_ntop.c" 43 - #endif 43 + #endif /* defined(__REACTOS__) */ 44 44 45 45 WINE_DEFAULT_DEBUG_CHANNEL(wininet); 46 46 ··· 268 268 break; 269 269 } 270 270 } 271 - 271 + 272 272 TRACE(" callback(%p) (%p (%p), %08lx, %d (%s), %s, %d)\n", 273 273 hdr->lpfnStatusCB, hdr->hInternet, hdr, context, status, get_callback_name(status), 274 274 debugstr_status_info(status, new_info), info_len); 275 - 275 + 276 276 hdr->lpfnStatusCB(hdr->hInternet, context, status, new_info, info_len); 277 277 278 278 TRACE(" end callback().\n");
+121 -35
sdk/include/psdk/dhcpcsdk.h
··· 1 - #ifndef _DHCPCDSK_H 2 - #define _DHCPCDSK_H 1 + /* 2 + * Copyright (C) 2017 Alistair Leslie-Hughes 3 + * 4 + * This library is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU Lesser General Public 6 + * License as published by the Free Software Foundation; either 7 + * version 2.1 of the License, or (at your option) any later version. 8 + * 9 + * This library is distributed in the hope that it will be useful, 10 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 + * Lesser General Public License for more details. 13 + * 14 + * You should have received a copy of the GNU Lesser General Public 15 + * License along with this library; if not, write to the Free Software 16 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 + */ 18 + #ifndef _DHCPCSDK_ 19 + #define _DHCPCSDK_ 3 20 4 - #ifdef __cplusplus 5 - extern "C" { 6 - #endif 21 + #define OPTION_PAD 0 22 + #define OPTION_SUBNET_MASK 1 23 + #define OPTION_TIME_OFFSET 2 24 + #define OPTION_ROUTER_ADDRESS 3 25 + #define OPTION_TIME_SERVERS 4 26 + #define OPTION_IEN116_NAME_SERVERS 5 27 + #define OPTION_DOMAIN_NAME_SERVERS 6 28 + #define OPTION_LOG_SERVERS 7 29 + #define OPTION_COOKIE_SERVERS 8 30 + #define OPTION_LPR_SERVERS 9 31 + #define OPTION_IMPRESS_SERVERS 10 32 + #define OPTION_RLP_SERVERS 11 33 + #define OPTION_HOST_NAME 12 34 + #define OPTION_BOOT_FILE_SIZE 13 35 + #define OPTION_MERIT_DUMP_FILE 14 36 + #define OPTION_DOMAIN_NAME 15 37 + #define OPTION_SWAP_SERVER 16 38 + #define OPTION_ROOT_DISK 17 39 + #define OPTION_EXTENSIONS_PATH 18 40 + #define OPTION_BE_A_ROUTER 19 41 + #define OPTION_NON_LOCAL_SOURCE_ROUTING 20 42 + #define OPTION_POLICY_FILTER_FOR_NLSR 21 43 + #define OPTION_MAX_REASSEMBLY_SIZE 22 44 + #define OPTION_DEFAULT_TTL 23 45 + #define OPTION_PMTU_AGING_TIMEOUT 24 46 + #define OPTION_PMTU_PLATEAU_TABLE 25 47 + #define OPTION_MTU 26 48 + #define OPTION_ALL_SUBNETS_MTU 27 49 + #define OPTION_BROADCAST_ADDRESS 28 50 + #define OPTION_PERFORM_MASK_DISCOVERY 29 51 + #define OPTION_BE_A_MASK_SUPPLIER 30 52 + #define OPTION_PERFORM_ROUTER_DISCOVERY 31 53 + #define OPTION_ROUTER_SOLICITATION_ADDR 32 54 + #define OPTION_STATIC_ROUTES 33 55 + #define OPTION_TRAILERS 34 56 + #define OPTION_ARP_CACHE_TIMEOUT 35 57 + #define OPTION_ETHERNET_ENCAPSULATION 36 58 + #define OPTION_TTL 37 59 + #define OPTION_KEEP_ALIVE_INTERVAL 38 60 + #define OPTION_KEEP_ALIVE_DATA_SIZE 39 61 + #define OPTION_NETWORK_INFO_SERVICE_DOM 40 62 + #define OPTION_NETWORK_INFO_SERVERS 41 63 + #define OPTION_NETWORK_TIME_SERVERS 42 64 + #define OPTION_VENDOR_SPEC_INFO 43 65 + #define OPTION_NETBIOS_NAME_SERVER 44 66 + #define OPTION_NETBIOS_DATAGRAM_SERVER 45 67 + #define OPTION_NETBIOS_NODE_TYPE 46 68 + #define OPTION_NETBIOS_SCOPE_OPTION 47 69 + #define OPTION_XWINDOW_FONT_SERVER 48 70 + #define OPTION_XWINDOW_DISPLAY_MANAGER 49 71 + #define OPTION_REQUESTED_ADDRESS 50 72 + #define OPTION_LEASE_TIME 51 73 + #define OPTION_OK_TO_OVERLAY 52 74 + #define OPTION_MESSAGE_TYPE 53 75 + #define OPTION_SERVER_IDENTIFIER 54 76 + #define OPTION_PARAMETER_REQUEST_LIST 55 77 + #define OPTION_MESSAGE 56 78 + #define OPTION_MESSAGE_LENGTH 57 79 + #define OPTION_RENEWAL_TIME 58 80 + #define OPTION_REBIND_TIME 59 81 + #define OPTION_CLIENT_CLASS_INFO 60 82 + #define OPTION_CLIENT_ID 61 7 83 8 - #if (_WIN32_WINNT >= 0x0500) 9 - #define DHCPCAPI_REGISTER_HANDLE_EVENT 0x00000001 10 - #define DHCPCAPI_REQUEST_PERSISTENT 0x00000001 11 - #define DHCPCAPI_REQUEST_SYNCHRONOUS 0x00000002 12 - typedef struct _DHCPAPI_CLASSID { 13 - ULONG Flags; 14 - LPBYTE Data; 15 - ULONG nBytesData; 16 - } DHCPCAPI_CLASSID,*PDHCPCAPI_CLASSID,*LPDHCPCAPI_CLASSID; 17 - typedef struct _DHCPAPI_PARAMS { 18 - ULONG Flags; 19 - ULONG OptionId; 20 - BOOL IsVendor; 21 - LPBYTE Data; 22 - DWORD nBytesData; 23 - } DHCPAPI_PARAMS,*PDHCPAPI_PARAMS,*LPDHCPAPI_PARAMS; 24 - typedef struct _DHCPAPI_PARAMS_ARRAY { 25 - ULONG nParams; 26 - LPDHCPAPI_PARAMS Params; 27 - } DHCPCAPI_PARAMS_ARRAY,*PDHCPCAPI_PARAMS_ARRAY,*LPDHCPCAPI_PARAMS_ARRAY; 28 - VOID WINAPI DhcpCApiCleanup(void); 29 - DWORD WINAPI DhcpCApiInitialize(LPDWORD); 30 - DWORD WINAPI DhcpDeRegisterParamChange(DWORD,LPVOID,LPVOID); 31 - DWORD WINAPI DhcpRegisterParamChange(DWORD,LPVOID,PWSTR,LPDHCPCAPI_CLASSID,DHCPCAPI_PARAMS_ARRAY,LPVOID); 32 - DWORD WINAPI DhcpRemoveDNSRegistrations(void); 33 - DWORD WINAPI DhcpUndoRequestParams(DWORD,LPVOID,LPWSTR,LPWSTR); 34 - #endif /* (_WIN32_WINNT >= 0x0500) */ 84 + #define OPTION_TFTP_SERVER_NAME 66 85 + #define OPTION_BOOTFILE_NAME 67 35 86 36 - #ifdef __cplusplus 37 - } 38 - #endif 87 + #define OPTION_MSFT_IE_PROXY 252 88 + #define OPTION_END 255 89 + 90 + typedef struct _DHCPAPI_PARAMS 91 + { 92 + ULONG Flags; 93 + ULONG OptionId; 94 + BOOL IsVendor; 95 + BYTE *Data; 96 + DWORD nBytesData; 97 + } DHCPAPI_PARAMS, *PDHCPAPI_PARAMS, *LPDHCPAPI_PARAMS; 98 + 99 + typedef struct _DHCPAPI_PARAMS DHCPCAPI_PARAMS, *PDHCPCAPI_PARAMS, *LPDHCPCAPI_PARAMS; 100 + 101 + typedef struct _DHCPCAPI_PARAMS_ARARAY 102 + { 103 + ULONG nParams; 104 + LPDHCPCAPI_PARAMS Params; 105 + } DHCPCAPI_PARAMS_ARRAY, *PDHCPCAPI_PARAMS_ARRAY, *LPDHCPCAPI_PARAMS_ARRAY; 106 + 107 + typedef struct _DHCPCAPI_CLASSID 108 + { 109 + ULONG Flags; 110 + BYTE *Data; 111 + ULONG nBytesData; 112 + } DHCPCAPI_CLASSID, *PDHCPCAPI_CLASSID, *LPDHCPCAPI_CLASSID; 113 + 114 + #define DHCPCAPI_REQUEST_PERSISTENT 0x1 115 + #define DHCPCAPI_REQUEST_SYNCHRONOUS 0x2 116 + #define DHCPCAPI_REQUEST_ASYNCHRONOUS 0x4 117 + #define DHCPCAPI_REQUEST_CANCEL 0x8 118 + #define DHCPCAPI_REQUEST_MASK 0xf 119 + 120 + void WINAPI DhcpCApiCleanup(void); 121 + DWORD WINAPI DhcpCApiInitialize(DWORD *); 122 + DWORD WINAPI DhcpRequestParams(DWORD, void *, WCHAR *, DHCPCAPI_CLASSID *, DHCPCAPI_PARAMS_ARRAY, 123 + DHCPCAPI_PARAMS_ARRAY, BYTE *, DWORD *, WCHAR *); 124 + 39 125 #endif
+1 -1
sdk/tools/winesync/wininet.cfg
··· 5 5 include/wininet.h: sdk/include/psdk/wininet.h 6 6 include/winineti.h: sdk/include/psdk/winineti.h 7 7 tags: 8 - wine: 237d5636271a1a78b02a0eb7feaab7dfb9dfed57 8 + wine: a4357043ff9aa14f086207c239f0fc29c0a24b83