1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Windows Internet Services API procedure declarations, types and constants.
7 use ctypes::c_int;
8 use shared::basetsd::DWORD_PTR;
9 use shared::minwindef::{
10     BOOL, DWORD, FALSE, FILETIME, INT, LPBYTE,
11     LPCVOID, LPDWORD, LPVOID, PBYTE, PDWORD, TRUE, WORD,
12 };
13 use shared::ntdef::{LONG, LONGLONG, PLONG};
14 use shared::windef::HWND;
15 use um::minwinbase::{LPWIN32_FIND_DATAA, LPWIN32_FIND_DATAW, SYSTEMTIME};
16 use um::winineti::INTERNET_FLAG_BGUPDATE;
17 use um::winnt::{
18     CHAR, DWORDLONG, HANDLE, LPCSTR, LPCWSTR,
19     LPSTR, LPWSTR, PCWSTR, PSTR, PWSTR, WCHAR,
20 };
21 pub type HINTERNET = LPVOID;
22 pub type LPHINTERNET = *mut HINTERNET;
23 pub type INTERNET_PORT = WORD;
24 pub type LPINTERNET_PORT = *mut INTERNET_PORT;
25 pub const INTERNET_INVALID_PORT_NUMBER: DWORD = 0;
26 pub const INTERNET_DEFAULT_FTP_PORT: DWORD = 21;
27 pub const INTERNET_DEFAULT_GOPHER_PORT: DWORD = 70;
28 pub const INTERNET_DEFAULT_HTTP_PORT: DWORD = 80;
29 pub const INTERNET_DEFAULT_HTTPS_PORT: DWORD = 443;
30 pub const INTERNET_DEFAULT_SOCKS_PORT: DWORD = 1080;
31 pub const INTERNET_MAX_HOST_NAME_LENGTH: usize = 256;
32 pub const INTERNET_MAX_USER_NAME_LENGTH: usize = 128;
33 pub const INTERNET_MAX_PASSWORD_LENGTH: usize = 128;
34 pub const INTERNET_MAX_PORT_NUMBER_LENGTH: usize = 5;
35 pub const INTERNET_MAX_PORT_NUMBER_VALUE: DWORD = 65535;
36 pub const INTERNET_MAX_PATH_LENGTH: usize = 2048;
37 pub const INTERNET_MAX_SCHEME_LENGTH: usize = 32;
38 pub const INTERNET_MAX_URL_LENGTH: usize = INTERNET_MAX_SCHEME_LENGTH + 3
39     + INTERNET_MAX_PATH_LENGTH;
40 pub const INTERNET_KEEP_ALIVE_UNKNOWN: DWORD = -1i32 as u32;
41 pub const INTERNET_KEEP_ALIVE_ENABLED: DWORD = 1;
42 pub const INTERNET_KEEP_ALIVE_DISABLED: DWORD = 0;
43 pub const INTERNET_REQFLAG_FROM_CACHE: DWORD = 0x00000001;
44 pub const INTERNET_REQFLAG_ASYNC: DWORD = 0x00000002;
45 pub const INTERNET_REQFLAG_VIA_PROXY: DWORD = 0x00000004;
46 pub const INTERNET_REQFLAG_NO_HEADERS: DWORD = 0x00000008;
47 pub const INTERNET_REQFLAG_PASSIVE: DWORD = 0x00000010;
48 pub const INTERNET_REQFLAG_CACHE_WRITE_DISABLED: DWORD = 0x00000040;
49 pub const INTERNET_REQFLAG_NET_TIMEOUT: DWORD = 0x00000080;
50 pub const INTERNET_FLAG_IDN_DIRECT: DWORD = 0x00000001;
51 pub const INTERNET_FLAG_IDN_PROXY: DWORD = 0x00000002;
52 pub const INTERNET_FLAG_RELOAD: DWORD = 0x80000000;
53 pub const INTERNET_FLAG_RAW_DATA: DWORD = 0x40000000;
54 pub const INTERNET_FLAG_EXISTING_CONNECT: DWORD = 0x20000000;
55 pub const INTERNET_FLAG_ASYNC: DWORD = 0x10000000;
56 pub const INTERNET_FLAG_PASSIVE: DWORD = 0x08000000;
57 pub const INTERNET_FLAG_NO_CACHE_WRITE: DWORD = 0x04000000;
58 pub const INTERNET_FLAG_DONT_CACHE: DWORD = INTERNET_FLAG_NO_CACHE_WRITE;
59 pub const INTERNET_FLAG_MAKE_PERSISTENT: DWORD = 0x02000000;
disconnect_atexit(void)60 pub const INTERNET_FLAG_FROM_CACHE: DWORD = 0x01000000;
61 pub const INTERNET_FLAG_OFFLINE: DWORD = INTERNET_FLAG_FROM_CACHE;
62 pub const INTERNET_FLAG_SECURE: DWORD = 0x00800000;
63 pub const INTERNET_FLAG_KEEP_CONNECTION: DWORD = 0x00400000;
64 pub const INTERNET_FLAG_NO_AUTO_REDIRECT: DWORD = 0x00200000;
65 pub const INTERNET_FLAG_READ_PREFETCH: DWORD = 0x00100000;
66 pub const INTERNET_FLAG_NO_COOKIES: DWORD = 0x00080000;
67 pub const INTERNET_FLAG_NO_AUTH: DWORD = 0x00040000;
68 pub const INTERNET_FLAG_RESTRICTED_ZONE: DWORD = 0x00020000;
69 pub const INTERNET_FLAG_CACHE_IF_NET_FAIL: DWORD = 0x00010000;
70 pub const INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP: DWORD = 0x00008000;
71 pub const INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS: DWORD = 0x00004000;
72 pub const INTERNET_FLAG_IGNORE_CERT_DATE_INVALID: DWORD = 0x00002000;
73 pub const INTERNET_FLAG_IGNORE_CERT_CN_INVALID: DWORD = 0x00001000;
74 pub const INTERNET_FLAG_RESYNCHRONIZE: DWORD = 0x00000800;
75 pub const INTERNET_FLAG_HYPERLINK: DWORD = 0x00000400;
76 pub const INTERNET_FLAG_NO_UI: DWORD = 0x00000200;
usage(void)77 pub const INTERNET_FLAG_PRAGMA_NOCACHE: DWORD = 0x00000100;
78 pub const INTERNET_FLAG_CACHE_ASYNC: DWORD = 0x00000080;
79 pub const INTERNET_FLAG_FORMS_SUBMIT: DWORD = 0x00000040;
80 pub const INTERNET_FLAG_FWD_BACK: DWORD = 0x00000020;
81 pub const INTERNET_FLAG_NEED_FILE: DWORD = 0x00000010;
82 pub const INTERNET_FLAG_MUST_CACHE_REQUEST: DWORD = INTERNET_FLAG_NEED_FILE;
83 pub const INTERNET_FLAG_TRANSFER_ASCII: DWORD = FTP_TRANSFER_TYPE_ASCII;
84 pub const INTERNET_FLAG_TRANSFER_BINARY: DWORD = FTP_TRANSFER_TYPE_BINARY;
85 pub const SECURITY_INTERNET_MASK: DWORD = INTERNET_FLAG_IGNORE_CERT_CN_INVALID
86     | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS
87     | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;
88 pub const SECURITY_IGNORE_ERROR_MASK: DWORD = INTERNET_FLAG_IGNORE_CERT_CN_INVALID
89     | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_UNKNOWN_CA
90     | SECURITY_FLAG_IGNORE_REVOCATION;
91 pub const INTERNET_FLAGS_MASK: DWORD = INTERNET_FLAG_RELOAD | INTERNET_FLAG_RAW_DATA
92     | INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_ASYNC | INTERNET_FLAG_PASSIVE
93     | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_MAKE_PERSISTENT | INTERNET_FLAG_FROM_CACHE
94     | INTERNET_FLAG_SECURE | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_AUTO_REDIRECT
95     | INTERNET_FLAG_READ_PREFETCH | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_AUTH
96     | INTERNET_FLAG_CACHE_IF_NET_FAIL | SECURITY_INTERNET_MASK | INTERNET_FLAG_RESYNCHRONIZE
97     | INTERNET_FLAG_HYPERLINK | INTERNET_FLAG_NO_UI | INTERNET_FLAG_PRAGMA_NOCACHE
98     | INTERNET_FLAG_CACHE_ASYNC | INTERNET_FLAG_FORMS_SUBMIT | INTERNET_FLAG_NEED_FILE
99     | INTERNET_FLAG_RESTRICTED_ZONE | INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_TRANSFER_ASCII
100     | INTERNET_FLAG_FWD_BACK | INTERNET_FLAG_BGUPDATE;
101 pub const INTERNET_ERROR_MASK_INSERT_CDROM: DWORD = 0x1;
102 pub const INTERNET_ERROR_MASK_COMBINED_SEC_CERT: DWORD = 0x2;
103 pub const INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG: DWORD = 0x4;
104 pub const INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY: DWORD = 0x8;
105 pub const INTERNET_OPTIONS_MASK: DWORD = !INTERNET_FLAGS_MASK;
106 pub const WININET_API_FLAG_ASYNC: DWORD = 0x00000001;
107 pub const WININET_API_FLAG_SYNC: DWORD = 0x00000004;
108 pub const WININET_API_FLAG_USE_CONTEXT: DWORD = 0x00000008;
109 pub const INTERNET_NO_CALLBACK: DWORD = 0;
110 ENUM!{enum INTERNET_SCHEME {
stop_streaming(XLogRecPtr xlogpos,uint32 timeline,bool segment_finished)111     INTERNET_SCHEME_PARTIAL = -2i32 as u32,
112     INTERNET_SCHEME_UNKNOWN = -1i32 as u32,
113     INTERNET_SCHEME_DEFAULT = 0,
114     INTERNET_SCHEME_FTP,
115     INTERNET_SCHEME_GOPHER,
116     INTERNET_SCHEME_HTTP,
117     INTERNET_SCHEME_HTTPS,
118     INTERNET_SCHEME_FILE,
119     INTERNET_SCHEME_NEWS,
120     INTERNET_SCHEME_MAILTO,
121     INTERNET_SCHEME_SOCKS,
122     INTERNET_SCHEME_JAVASCRIPT,
123     INTERNET_SCHEME_VBSCRIPT,
124     INTERNET_SCHEME_RES,
125     INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP,
126     INTERNET_SCHEME_LAST = INTERNET_SCHEME_RES,
127 }}
128 pub type LPINTERNET_SCHEME = *mut INTERNET_SCHEME;
129 STRUCT!{struct INTERNET_ASYNC_RESULT {
130     dwResult: DWORD_PTR,
131     dwError: DWORD,
132 }}
133 pub type LPINTERNET_ASYNC_RESULT = *mut INTERNET_ASYNC_RESULT;
134 STRUCT!{struct INTERNET_DIAGNOSTIC_SOCKET_INFO {
135     Socket: DWORD_PTR,
136     SourcePort: DWORD,
137     DestPort: DWORD,
138     Flags: DWORD,
139 }}
140 pub type LPINTERNET_DIAGNOSTIC_SOCKET_INFO = *mut INTERNET_DIAGNOSTIC_SOCKET_INFO;
141 pub const IDSI_FLAG_KEEP_ALIVE: DWORD = 0x00000001;
142 pub const IDSI_FLAG_SECURE: DWORD = 0x00000002;
143 pub const IDSI_FLAG_PROXY: DWORD = 0x00000004;
144 pub const IDSI_FLAG_TUNNEL: DWORD = 0x00000008;
145 STRUCT!{struct INTERNET_PROXY_INFO {
146     dwAccessType: DWORD,
147     lpszProxy: LPCWSTR,
148     lpszProxyBypass: LPCWSTR,
149 }}
150 pub type LPINTERNET_PROXY_INFO = *mut INTERNET_PROXY_INFO;
151 UNION!{union INTERNET_PER_CONN_OPTIONA_Value {
152     [u32; 2] [u64; 1],
153     dwValue dwValue_mut: DWORD,
154     pszValue pszValue_mut: LPSTR,
155     ftValue ftValue_mut: FILETIME,
156 }}
157 STRUCT!{struct INTERNET_PER_CONN_OPTIONA {
158     dwOption: DWORD,
159     Value: INTERNET_PER_CONN_OPTIONA_Value,
160 }}
161 pub type LPINTERNET_PER_CONN_OPTIONA = *mut INTERNET_PER_CONN_OPTIONA;
get_destination_dir(char * dest_folder)162 UNION!{union INTERNET_PER_CONN_OPTIONW_Value {
163     [u32; 2] [u64; 1],
164     dwValue dwValue_mut: DWORD,
165     pszValue pszValue_mut: LPWSTR,
166     ftValue ftValue_mut: FILETIME,
167 }}
168 STRUCT!{struct INTERNET_PER_CONN_OPTIONW {
169     dwOption: DWORD,
170     Value: INTERNET_PER_CONN_OPTIONW_Value,
171 }}
172 pub type LPINTERNET_PER_CONN_OPTIONW = *mut INTERNET_PER_CONN_OPTIONW;
173 STRUCT!{struct INTERNET_PER_CONN_OPTION_LISTA {
174     dwSize: DWORD,
175     pszConnection: LPSTR,
176     dwOptionCount: DWORD,
177     dwOptionError: DWORD,
178     pOptions: LPINTERNET_PER_CONN_OPTIONA,
179 }}
180 pub type LPINTERNET_PER_CONN_OPTION_LISTA = *mut INTERNET_PER_CONN_OPTION_LISTA;
181 STRUCT!{struct INTERNET_PER_CONN_OPTION_LISTW {
close_destination_dir(DIR * dest_dir,char * dest_folder)182     dwSize: DWORD,
183     pszConnection: LPWSTR,
184     dwOptionCount: DWORD,
185     dwOptionError: DWORD,
186     pOptions: LPINTERNET_PER_CONN_OPTIONW,
187 }}
188 pub type LPINTERNET_PER_CONN_OPTION_LISTW = *mut INTERNET_PER_CONN_OPTION_LISTW;
189 pub const INTERNET_PER_CONN_FLAGS: DWORD = 1;
190 pub const INTERNET_PER_CONN_PROXY_SERVER: DWORD = 2;
191 pub const INTERNET_PER_CONN_PROXY_BYPASS: DWORD = 3;
192 pub const INTERNET_PER_CONN_AUTOCONFIG_URL: DWORD = 4;
193 pub const INTERNET_PER_CONN_AUTODISCOVERY_FLAGS: DWORD = 5;
194 pub const INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL: DWORD = 6;
195 pub const INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS: DWORD = 7;
196 pub const INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME: DWORD = 8;
197 pub const INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_URL: DWORD = 9;
198 pub const INTERNET_PER_CONN_FLAGS_UI: DWORD = 10;
199 pub const PROXY_TYPE_DIRECT: DWORD = 0x00000001;
200 pub const PROXY_TYPE_PROXY: DWORD = 0x00000002;
FindStreamingStart(uint32 * tli)201 pub const PROXY_TYPE_AUTO_PROXY_URL: DWORD = 0x00000004;
202 pub const PROXY_TYPE_AUTO_DETECT: DWORD = 0x00000008;
203 pub const AUTO_PROXY_FLAG_USER_SET: DWORD = 0x00000001;
204 pub const AUTO_PROXY_FLAG_ALWAYS_DETECT: DWORD = 0x00000002;
205 pub const AUTO_PROXY_FLAG_DETECTION_RUN: DWORD = 0x00000004;
206 pub const AUTO_PROXY_FLAG_MIGRATED: DWORD = 0x00000008;
207 pub const AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT: DWORD = 0x00000010;
208 pub const AUTO_PROXY_FLAG_CACHE_INIT_RUN: DWORD = 0x00000020;
209 pub const AUTO_PROXY_FLAG_DETECTION_SUSPECT: DWORD = 0x00000040;
210 STRUCT!{struct INTERNET_VERSION_INFO {
211     dwMajorVersion: DWORD,
212     dwMinorVersion: DWORD,
213 }}
214 pub type LPINTERNET_VERSION_INFO = *mut INTERNET_VERSION_INFO;
215 STRUCT!{struct HTTP_VERSION_INFO {
216     dwMajorVersion: DWORD,
217     dwMinorVersion: DWORD,
218 }}
219 pub type LPHTTP_VERSION_INFO = *mut HTTP_VERSION_INFO;
220 STRUCT!{struct INTERNET_CONNECTED_INFO {
221     dwConnectedState: DWORD,
222     dwFlags: DWORD,
223 }}
224 pub type LPINTERNET_CONNECTED_INFO = *mut INTERNET_CONNECTED_INFO;
225 pub const ISO_FORCE_DISCONNECTED: DWORD = 0x00000001;
226 STRUCT!{struct URL_COMPONENTSA {
227     dwStructSize: DWORD,
228     lpszScheme: LPSTR,
229     dwSchemeLength: DWORD,
230     nScheme: INTERNET_SCHEME,
231     lpszHostName: LPSTR,
232     dwHostNameLength: DWORD,
233     nPort: INTERNET_PORT,
234     lpszUserName: LPSTR,
235     dwUserNameLength: DWORD,
236     lpszPassword: LPSTR,
237     dwPasswordLength: DWORD,
238     lpszUrlPath: LPSTR,
239     dwUrlPathLength: DWORD,
240     lpszExtraInfo: LPSTR,
241     dwExtraInfoLength: DWORD,
242 }}
243 pub type LPURL_COMPONENTSA = *mut URL_COMPONENTSA;
244 STRUCT!{struct URL_COMPONENTSW {
245     dwStructSize: DWORD,
246     lpszScheme: LPWSTR,
247     dwSchemeLength: DWORD,
248     nScheme: INTERNET_SCHEME,
249     lpszHostName: LPWSTR,
250     dwHostNameLength: DWORD,
251     nPort: INTERNET_PORT,
252     lpszUserName: LPWSTR,
253     dwUserNameLength: DWORD,
254     lpszPassword: LPWSTR,
255     dwPasswordLength: DWORD,
256     lpszUrlPath: LPWSTR,
257     dwUrlPathLength: DWORD,
258     lpszExtraInfo: LPWSTR,
259     dwExtraInfoLength: DWORD,
260 }}
261 pub type LPURL_COMPONENTSW = *mut URL_COMPONENTSW;
262 STRUCT!{struct INTERNET_CERTIFICATE_INFO {
263     ftExpiry: FILETIME,
264     ftStart: FILETIME,
265     lpszSubjectInfo: LPWSTR,
266     lpszIssuerInfo: LPWSTR,
267     lpszProtocolName: LPWSTR,
268     lpszSignatureAlgName: LPWSTR,
269     lpszEncryptionAlgName: LPWSTR,
270     dwKeySize: DWORD,
271 }}
272 pub type LPINTERNET_CERTIFICATE_INFO = *mut INTERNET_CERTIFICATE_INFO;
273 STRUCT!{struct INTERNET_BUFFERSA {
274     dwStructSize: DWORD,
275     Next: *mut INTERNET_BUFFERSA,
276     lpcszHeader: LPCSTR,
277     dwHeadersLength: DWORD,
278     dwHeadersTotal: DWORD,
279     lpvBuffer: LPVOID,
280     dwBufferLength: DWORD,
281     dwBufferTotal: DWORD,
282     dwOffsetLow: DWORD,
283     dwOffsetHigh: DWORD,
284 }}
285 pub type LPINTERNET_BUFFERSA = *mut INTERNET_BUFFERSA;
286 STRUCT!{struct INTERNET_BUFFERSW {
287     dwStructSize: DWORD,
288     Next: *mut INTERNET_BUFFERSW,
289     lpcszHeader: LPCWSTR,
290     dwHeadersLength: DWORD,
291     dwHeadersTotal: DWORD,
292     lpvBuffer: LPVOID,
293     dwBufferLength: DWORD,
294     dwBufferTotal: DWORD,
295     dwOffsetLow: DWORD,
296     dwOffsetHigh: DWORD,
297 }}
298 pub type LPINTERNET_BUFFERSW = *mut INTERNET_BUFFERSW;
299 pub const INTERNET_RFC1123_FORMAT: DWORD = 0;
300 pub const INTERNET_RFC1123_BUFSIZE: DWORD = 30;
301 pub const ICU_ESCAPE: DWORD = 0x80000000;
302 pub const ICU_USERNAME: DWORD = 0x40000000;
303 pub const ICU_NO_ENCODE: DWORD = 0x20000000;
304 pub const ICU_DECODE: DWORD = 0x10000000;
305 pub const ICU_NO_META: DWORD = 0x08000000;
306 pub const ICU_ENCODE_SPACES_ONLY: DWORD = 0x04000000;
307 pub const ICU_BROWSER_MODE: DWORD = 0x02000000;
308 pub const ICU_ENCODE_PERCENT: DWORD = 0x00001000;
309 pub const INTERNET_OPEN_TYPE_PRECONFIG: DWORD = 0;
310 pub const INTERNET_OPEN_TYPE_DIRECT: DWORD = 1;
311 pub const INTERNET_OPEN_TYPE_PROXY: DWORD = 3;
312 pub const INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY: DWORD = 4;
313 pub const PRE_CONFIG_INTERNET_ACCESS: DWORD = INTERNET_OPEN_TYPE_PRECONFIG;
314 pub const LOCAL_INTERNET_ACCESS: DWORD = INTERNET_OPEN_TYPE_DIRECT;
315 pub const CERN_PROXY_INTERNET_ACCESS: DWORD = INTERNET_OPEN_TYPE_PROXY;
316 pub const INTERNET_SERVICE_FTP: DWORD = 1;
317 pub const INTERNET_SERVICE_GOPHER: DWORD = 2;
318 pub const INTERNET_SERVICE_HTTP: DWORD = 3;
319 pub const IRF_ASYNC: DWORD = WININET_API_FLAG_ASYNC;
320 pub const IRF_SYNC: DWORD = WININET_API_FLAG_SYNC;
321 pub const IRF_USE_CONTEXT: DWORD = WININET_API_FLAG_USE_CONTEXT;
322 pub const IRF_NO_WAIT: DWORD = 0x00000008;
323 pub const ISO_GLOBAL: DWORD = 0x00000001;
324 pub const ISO_REGISTRY: DWORD = 0x00000002;
325 pub const ISO_VALID_FLAGS: DWORD = ISO_GLOBAL | ISO_REGISTRY;
326 pub const INTERNET_OPTION_CALLBACK: DWORD = 1;
327 pub const INTERNET_OPTION_CONNECT_TIMEOUT: DWORD = 2;
328 pub const INTERNET_OPTION_CONNECT_RETRIES: DWORD = 3;
329 pub const INTERNET_OPTION_CONNECT_BACKOFF: DWORD = 4;
330 pub const INTERNET_OPTION_SEND_TIMEOUT: DWORD = 5;
331 pub const INTERNET_OPTION_CONTROL_SEND_TIMEOUT: DWORD = INTERNET_OPTION_SEND_TIMEOUT;
332 pub const INTERNET_OPTION_RECEIVE_TIMEOUT: DWORD = 6;
333 pub const INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT: DWORD = INTERNET_OPTION_RECEIVE_TIMEOUT;
334 pub const INTERNET_OPTION_DATA_SEND_TIMEOUT: DWORD = 7;
335 pub const INTERNET_OPTION_DATA_RECEIVE_TIMEOUT: DWORD = 8;
336 pub const INTERNET_OPTION_HANDLE_TYPE: DWORD = 9;
337 pub const INTERNET_OPTION_LISTEN_TIMEOUT: DWORD = 11;
338 pub const INTERNET_OPTION_READ_BUFFER_SIZE: DWORD = 12;
339 pub const INTERNET_OPTION_WRITE_BUFFER_SIZE: DWORD = 13;
340 pub const INTERNET_OPTION_ASYNC_ID: DWORD = 15;
341 pub const INTERNET_OPTION_ASYNC_PRIORITY: DWORD = 16;
342 pub const INTERNET_OPTION_PARENT_HANDLE: DWORD = 21;
343 pub const INTERNET_OPTION_KEEP_CONNECTION: DWORD = 22;
344 pub const INTERNET_OPTION_REQUEST_FLAGS: DWORD = 23;
345 pub const INTERNET_OPTION_EXTENDED_ERROR: DWORD = 24;
346 pub const INTERNET_OPTION_OFFLINE_MODE: DWORD = 26;
347 pub const INTERNET_OPTION_CACHE_STREAM_HANDLE: DWORD = 27;
348 pub const INTERNET_OPTION_USERNAME: DWORD = 28;
349 pub const INTERNET_OPTION_PASSWORD: DWORD = 29;
350 pub const INTERNET_OPTION_ASYNC: DWORD = 30;
351 pub const INTERNET_OPTION_SECURITY_FLAGS: DWORD = 31;
352 pub const INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT: DWORD = 32;
353 pub const INTERNET_OPTION_DATAFILE_NAME: DWORD = 33;
354 pub const INTERNET_OPTION_URL: DWORD = 34;
355 pub const INTERNET_OPTION_SECURITY_CERTIFICATE: DWORD = 35;
356 pub const INTERNET_OPTION_SECURITY_KEY_BITNESS: DWORD = 36;
357 pub const INTERNET_OPTION_REFRESH: DWORD = 37;
358 pub const INTERNET_OPTION_PROXY: DWORD = 38;
359 pub const INTERNET_OPTION_SETTINGS_CHANGED: DWORD = 39;
360 pub const INTERNET_OPTION_VERSION: DWORD = 40;
361 pub const INTERNET_OPTION_USER_AGENT: DWORD = 41;
362 pub const INTERNET_OPTION_END_BROWSER_SESSION: DWORD = 42;
363 pub const INTERNET_OPTION_PROXY_USERNAME: DWORD = 43;
364 pub const INTERNET_OPTION_PROXY_PASSWORD: DWORD = 44;
365 pub const INTERNET_OPTION_CONTEXT_VALUE: DWORD = 45;
366 pub const INTERNET_OPTION_CONNECT_LIMIT: DWORD = 46;
367 pub const INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT: DWORD = 47;
368 pub const INTERNET_OPTION_POLICY: DWORD = 48;
StreamLog(void)369 pub const INTERNET_OPTION_DISCONNECTED_TIMEOUT: DWORD = 49;
370 pub const INTERNET_OPTION_CONNECTED_STATE: DWORD = 50;
371 pub const INTERNET_OPTION_IDLE_STATE: DWORD = 51;
372 pub const INTERNET_OPTION_OFFLINE_SEMANTICS: DWORD = 52;
373 pub const INTERNET_OPTION_SECONDARY_CACHE_KEY: DWORD = 53;
374 pub const INTERNET_OPTION_CALLBACK_FILTER: DWORD = 54;
375 pub const INTERNET_OPTION_CONNECT_TIME: DWORD = 55;
376 pub const INTERNET_OPTION_SEND_THROUGHPUT: DWORD = 56;
377 pub const INTERNET_OPTION_RECEIVE_THROUGHPUT: DWORD = 57;
378 pub const INTERNET_OPTION_REQUEST_PRIORITY: DWORD = 58;
379 pub const INTERNET_OPTION_HTTP_VERSION: DWORD = 59;
380 pub const INTERNET_OPTION_RESET_URLCACHE_SESSION: DWORD = 60;
381 pub const INTERNET_OPTION_ERROR_MASK: DWORD = 62;
382 pub const INTERNET_OPTION_FROM_CACHE_TIMEOUT: DWORD = 63;
383 pub const INTERNET_OPTION_BYPASS_EDITED_ENTRY: DWORD = 64;
384 pub const INTERNET_OPTION_HTTP_DECODING: DWORD = 65;
385 pub const INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO: DWORD = 67;
386 pub const INTERNET_OPTION_CODEPAGE: DWORD = 68;
387 pub const INTERNET_OPTION_CACHE_TIMESTAMPS: DWORD = 69;
388 pub const INTERNET_OPTION_DISABLE_AUTODIAL: DWORD = 70;
389 pub const INTERNET_OPTION_MAX_CONNS_PER_SERVER: DWORD = 73;
390 pub const INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER: DWORD = 74;
391 pub const INTERNET_OPTION_PER_CONNECTION_OPTION: DWORD = 75;
392 pub const INTERNET_OPTION_DIGEST_AUTH_UNLOAD: DWORD = 76;
393 pub const INTERNET_OPTION_IGNORE_OFFLINE: DWORD = 77;
394 pub const INTERNET_OPTION_IDENTITY: DWORD = 78;
395 pub const INTERNET_OPTION_REMOVE_IDENTITY: DWORD = 79;
396 pub const INTERNET_OPTION_ALTER_IDENTITY: DWORD = 80;
397 pub const INTERNET_OPTION_SUPPRESS_BEHAVIOR: DWORD = 81;
398 pub const INTERNET_OPTION_AUTODIAL_MODE: DWORD = 82;
399 pub const INTERNET_OPTION_AUTODIAL_CONNECTION: DWORD = 83;
400 pub const INTERNET_OPTION_CLIENT_CERT_CONTEXT: DWORD = 84;
401 pub const INTERNET_OPTION_AUTH_FLAGS: DWORD = 85;
402 pub const INTERNET_OPTION_COOKIES_3RD_PARTY: DWORD = 86;
403 pub const INTERNET_OPTION_DISABLE_PASSPORT_AUTH: DWORD = 87;
404 pub const INTERNET_OPTION_SEND_UTF8_SERVERNAME_TO_PROXY: DWORD = 88;
405 pub const INTERNET_OPTION_EXEMPT_CONNECTION_LIMIT: DWORD = 89;
406 pub const INTERNET_OPTION_ENABLE_PASSPORT_AUTH: DWORD = 90;
407 pub const INTERNET_OPTION_HIBERNATE_INACTIVE_WORKER_THREADS: DWORD = 91;
408 pub const INTERNET_OPTION_ACTIVATE_WORKER_THREADS: DWORD = 92;
409 pub const INTERNET_OPTION_RESTORE_WORKER_THREAD_DEFAULTS: DWORD = 93;
410 pub const INTERNET_OPTION_SOCKET_SEND_BUFFER_LENGTH: DWORD = 94;
411 pub const INTERNET_OPTION_PROXY_SETTINGS_CHANGED: DWORD = 95;
412 pub const INTERNET_OPTION_DATAFILE_EXT: DWORD = 96;
413 pub const INTERNET_OPTION_CODEPAGE_PATH: DWORD = 100;
414 pub const INTERNET_OPTION_CODEPAGE_EXTRA: DWORD = 101;
415 pub const INTERNET_OPTION_IDN: DWORD = 102;
416 pub const INTERNET_OPTION_MAX_CONNS_PER_PROXY: DWORD = 103;
417 pub const INTERNET_OPTION_SUPPRESS_SERVER_AUTH: DWORD = 104;
418 pub const INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT: DWORD = 105;
419 pub const INTERNET_OPTION_ENABLE_REDIRECT_CACHE_READ: DWORD = 122;
420 pub const INTERNET_OPTION_ENCODE_EXTRA: DWORD = 155;
421 pub const INTERNET_FIRST_OPTION: DWORD = INTERNET_OPTION_CALLBACK;
422 pub const INTERNET_LAST_OPTION: DWORD = INTERNET_OPTION_ENCODE_EXTRA;
423 pub const INTERNET_PRIORITY_FOREGROUND: DWORD = 1000;
424 pub const INTERNET_HANDLE_TYPE_INTERNET: DWORD = 1;
425 pub const INTERNET_HANDLE_TYPE_CONNECT_FTP: DWORD = 2;
426 pub const INTERNET_HANDLE_TYPE_CONNECT_GOPHER: DWORD = 3;
427 pub const INTERNET_HANDLE_TYPE_CONNECT_HTTP: DWORD = 4;
428 pub const INTERNET_HANDLE_TYPE_FTP_FIND: DWORD = 5;
429 pub const INTERNET_HANDLE_TYPE_FTP_FIND_HTML: DWORD = 6;
430 pub const INTERNET_HANDLE_TYPE_FTP_FILE: DWORD = 7;
431 pub const INTERNET_HANDLE_TYPE_FTP_FILE_HTML: DWORD = 8;
432 pub const INTERNET_HANDLE_TYPE_GOPHER_FIND: DWORD = 9;
433 pub const INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML: DWORD = 10;
434 pub const INTERNET_HANDLE_TYPE_GOPHER_FILE: DWORD = 11;
435 pub const INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML: DWORD = 12;
436 pub const INTERNET_HANDLE_TYPE_HTTP_REQUEST: DWORD = 13;
437 pub const INTERNET_HANDLE_TYPE_FILE_REQUEST: DWORD = 14;
438 pub const AUTH_FLAG_DISABLE_NEGOTIATE: DWORD = 0x00000001;
439 pub const AUTH_FLAG_ENABLE_NEGOTIATE: DWORD = 0x00000002;
440 pub const AUTH_FLAG_DISABLE_BASIC_CLEARCHANNEL: DWORD = 0x00000004;
441 pub const AUTH_FLAG_DISABLE_SERVER_AUTH: DWORD = 0x00000008;
442 pub const SECURITY_FLAG_SECURE: DWORD = 0x00000001;
443 pub const SECURITY_FLAG_STRENGTH_WEAK: DWORD = 0x10000000;
444 pub const SECURITY_FLAG_STRENGTH_MEDIUM: DWORD = 0x40000000;
445 pub const SECURITY_FLAG_STRENGTH_STRONG: DWORD = 0x20000000;
446 pub const SECURITY_FLAG_UNKNOWNBIT: DWORD = 0x80000000;
447 pub const SECURITY_FLAG_FORTEZZA: DWORD = 0x08000000;
448 pub const SECURITY_FLAG_NORMALBITNESS: DWORD = SECURITY_FLAG_STRENGTH_WEAK;
449 pub const SECURITY_FLAG_SSL: DWORD = 0x00000002;
450 pub const SECURITY_FLAG_SSL3: DWORD = 0x00000004;
451 pub const SECURITY_FLAG_PCT: DWORD = 0x00000008;
452 pub const SECURITY_FLAG_PCT4: DWORD = 0x00000010;
453 pub const SECURITY_FLAG_IETFSSL4: DWORD = 0x00000020;
454 pub const SECURITY_FLAG_40BIT: DWORD = SECURITY_FLAG_STRENGTH_WEAK;
455 pub const SECURITY_FLAG_128BIT: DWORD = SECURITY_FLAG_STRENGTH_STRONG;
456 pub const SECURITY_FLAG_56BIT: DWORD = SECURITY_FLAG_STRENGTH_MEDIUM;
457 pub const SECURITY_FLAG_IGNORE_REVOCATION: DWORD = 0x00000080;
458 pub const SECURITY_FLAG_IGNORE_UNKNOWN_CA: DWORD = 0x00000100;
459 pub const SECURITY_FLAG_IGNORE_WRONG_USAGE: DWORD = 0x00000200;
460 pub const SECURITY_FLAG_IGNORE_CERT_CN_INVALID: DWORD = INTERNET_FLAG_IGNORE_CERT_CN_INVALID;
461 pub const SECURITY_FLAG_IGNORE_CERT_DATE_INVALID: DWORD = INTERNET_FLAG_IGNORE_CERT_DATE_INVALID;
sigint_handler(int signum)462 pub const SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS: DWORD = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS;
463 pub const SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP: DWORD = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;
464 pub const SECURITY_SET_MASK: DWORD = SECURITY_FLAG_IGNORE_REVOCATION
465     | SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_CN_INVALID
466     | SECURITY_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_WRONG_USAGE;
467 pub const AUTODIAL_MODE_NEVER: DWORD = 1;
468 pub const AUTODIAL_MODE_ALWAYS: DWORD = 2;
main(int argc,char ** argv)469 pub const AUTODIAL_MODE_NO_NETWORK_PRESENT: DWORD = 4;
470 FN!{stdcall INTERNET_STATUS_CALLBACK(
471     HINTERNET,
472     DWORD_PTR,
473     DWORD,
474     LPVOID,
475     DWORD,
476 ) -> ()}
477 pub type LPINTERNET_STATUS_CALLBACK = *mut INTERNET_STATUS_CALLBACK;
478 pub const INTERNET_STATUS_RESOLVING_NAME: DWORD = 10;
479 pub const INTERNET_STATUS_NAME_RESOLVED: DWORD = 11;
480 pub const INTERNET_STATUS_CONNECTING_TO_SERVER: DWORD = 20;
481 pub const INTERNET_STATUS_CONNECTED_TO_SERVER: DWORD = 21;
482 pub const INTERNET_STATUS_SENDING_REQUEST: DWORD = 30;
483 pub const INTERNET_STATUS_REQUEST_SENT: DWORD = 31;
484 pub const INTERNET_STATUS_RECEIVING_RESPONSE: DWORD = 40;
485 pub const INTERNET_STATUS_RESPONSE_RECEIVED: DWORD = 41;
486 pub const INTERNET_STATUS_CTL_RESPONSE_RECEIVED: DWORD = 42;
487 pub const INTERNET_STATUS_PREFETCH: DWORD = 43;
488 pub const INTERNET_STATUS_CLOSING_CONNECTION: DWORD = 50;
489 pub const INTERNET_STATUS_CONNECTION_CLOSED: DWORD = 51;
490 pub const INTERNET_STATUS_HANDLE_CREATED: DWORD = 60;
491 pub const INTERNET_STATUS_HANDLE_CLOSING: DWORD = 70;
492 pub const INTERNET_STATUS_DETECTING_PROXY: DWORD = 80;
493 pub const INTERNET_STATUS_REQUEST_COMPLETE: DWORD = 100;
494 pub const INTERNET_STATUS_REDIRECT: DWORD = 110;
495 pub const INTERNET_STATUS_INTERMEDIATE_RESPONSE: DWORD = 120;
496 pub const INTERNET_STATUS_USER_INPUT_REQUIRED: DWORD = 140;
497 pub const INTERNET_STATUS_STATE_CHANGE: DWORD = 200;
498 pub const INTERNET_STATUS_COOKIE_SENT: DWORD = 320;
499 pub const INTERNET_STATUS_COOKIE_RECEIVED: DWORD = 321;
500 pub const INTERNET_STATUS_PRIVACY_IMPACTED: DWORD = 324;
501 pub const INTERNET_STATUS_P3P_HEADER: DWORD = 325;
502 pub const INTERNET_STATUS_P3P_POLICYREF: DWORD = 326;
503 pub const INTERNET_STATUS_COOKIE_HISTORY: DWORD = 327;
504 pub const INTERNET_STATE_CONNECTED: DWORD = 0x00000001;
505 pub const INTERNET_STATE_DISCONNECTED: DWORD = 0x00000002;
506 pub const INTERNET_STATE_DISCONNECTED_BY_USER: DWORD = 0x00000010;
507 pub const INTERNET_STATE_IDLE: DWORD = 0x00000100;
508 pub const INTERNET_STATE_BUSY: DWORD = 0x00000200;
509 ENUM!{enum InternetCookieState {
510     COOKIE_STATE_UNKNOWN = 0x0,
511     COOKIE_STATE_ACCEPT = 0x1,
512     COOKIE_STATE_PROMPT = 0x2,
513     COOKIE_STATE_LEASH = 0x3,
514     COOKIE_STATE_DOWNGRADE = 0x4,
515     COOKIE_STATE_REJECT = 0x5,
516     COOKIE_STATE_MAX = COOKIE_STATE_REJECT,
517 }}
518 STRUCT!{struct IncomingCookieState {
519     cSession: c_int,
520     cPersistent: c_int,
521     cAccepted: c_int,
522     cLeashed: c_int,
523     cDowngraded: c_int,
524     cBlocked: c_int,
525     pszLocation: LPCSTR,
526 }}
527 STRUCT!{struct OutgoingCookieState {
528     cSent: c_int,
529     cSuppressed: c_int,
530     pszLocation: LPCSTR,
531 }}
532 STRUCT!{struct InternetCookieHistory {
533     fAccepted: BOOL,
534     fLeashed: BOOL,
535     fDowngraded: BOOL,
536     fRejected: BOOL,
537 }}
538 STRUCT!{struct CookieDecision {
539     dwCookieState: DWORD,
540     fAllowSession: BOOL,
541 }}
542 pub const INTERNET_INVALID_STATUS_CALLBACK: usize = -1isize as usize;
543 pub const FTP_TRANSFER_TYPE_UNKNOWN: DWORD = 0x00000000;
544 pub const FTP_TRANSFER_TYPE_ASCII: DWORD = 0x00000001;
545 pub const FTP_TRANSFER_TYPE_BINARY: DWORD = 0x00000002;
546 pub const FTP_TRANSFER_TYPE_MASK: DWORD = FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY;
547 pub const MAX_GOPHER_DISPLAY_TEXT: usize = 128;
548 pub const MAX_GOPHER_SELECTOR_TEXT: usize = 256;
549 pub const MAX_GOPHER_HOST_NAME: usize = INTERNET_MAX_HOST_NAME_LENGTH;
550 pub const MAX_GOPHER_LOCATOR_LENGTH: usize = 1 + MAX_GOPHER_DISPLAY_TEXT + 1
551     + MAX_GOPHER_SELECTOR_TEXT + 1 + MAX_GOPHER_HOST_NAME + 1 + INTERNET_MAX_PORT_NUMBER_LENGTH
552     + 1 + 1 + 2;
553 STRUCT!{struct GOPHER_FIND_DATAA {
554     DisplayString: [CHAR; MAX_GOPHER_DISPLAY_TEXT+ 1],
555     GopherType: DWORD,
556     SizeLow: DWORD,
557     SizeHigh: DWORD,
558     LastModificationTime: FILETIME,
559     Locator: [CHAR; MAX_GOPHER_LOCATOR_LENGTH + 1],
560 }}
561 pub type LPGOPHER_FIND_DATAA = *mut GOPHER_FIND_DATAA;
562 STRUCT!{struct GOPHER_FIND_DATAW {
563     DisplayString: [WCHAR; MAX_GOPHER_DISPLAY_TEXT+ 1],
564     GopherType: DWORD,
565     SizeLow: DWORD,
566     SizeHigh: DWORD,
567     LastModificationTime: FILETIME,
568     Locator: [WCHAR; MAX_GOPHER_LOCATOR_LENGTH + 1],
569 }}
570 pub type LPGOPHER_FIND_DATAW = *mut GOPHER_FIND_DATAW;
571 pub const GOPHER_TYPE_TEXT_FILE: DWORD = 0x00000001;
572 pub const GOPHER_TYPE_DIRECTORY: DWORD = 0x00000002;
573 pub const GOPHER_TYPE_CSO: DWORD = 0x00000004;
574 pub const GOPHER_TYPE_ERROR: DWORD = 0x00000008;
575 pub const GOPHER_TYPE_MAC_BINHEX: DWORD = 0x00000010;
576 pub const GOPHER_TYPE_DOS_ARCHIVE: DWORD = 0x00000020;
577 pub const GOPHER_TYPE_UNIX_UUENCODED: DWORD = 0x00000040;
578 pub const GOPHER_TYPE_INDEX_SERVER: DWORD = 0x00000080;
579 pub const GOPHER_TYPE_TELNET: DWORD = 0x00000100;
580 pub const GOPHER_TYPE_BINARY: DWORD = 0x00000200;
581 pub const GOPHER_TYPE_REDUNDANT: DWORD = 0x00000400;
582 pub const GOPHER_TYPE_TN3270: DWORD = 0x00000800;
583 pub const GOPHER_TYPE_GIF: DWORD = 0x00001000;
584 pub const GOPHER_TYPE_IMAGE: DWORD = 0x00002000;
585 pub const GOPHER_TYPE_BITMAP: DWORD = 0x00004000;
586 pub const GOPHER_TYPE_MOVIE: DWORD = 0x00008000;
587 pub const GOPHER_TYPE_SOUND: DWORD = 0x00010000;
588 pub const GOPHER_TYPE_HTML: DWORD = 0x00020000;
589 pub const GOPHER_TYPE_PDF: DWORD = 0x00040000;
590 pub const GOPHER_TYPE_CALENDAR: DWORD = 0x00080000;
591 pub const GOPHER_TYPE_INLINE: DWORD = 0x00100000;
592 pub const GOPHER_TYPE_UNKNOWN: DWORD = 0x20000000;
593 pub const GOPHER_TYPE_ASK: DWORD = 0x40000000;
594 pub const GOPHER_TYPE_GOPHER_PLUS: DWORD = 0x80000000;
595 #[inline]
596 pub fn IS_GOPHER_FILE(type_: DWORD) -> BOOL {
597     if (type_ & GOPHER_TYPE_FILE_MASK) != 0 { TRUE } else { FALSE }
598 }
599 #[inline]
600 pub fn IS_GOPHER_DIRECTORY(type_: DWORD) -> BOOL {
601     if (type_ & GOPHER_TYPE_DIRECTORY) != 0 { TRUE } else { FALSE }
602 }
603 #[inline]
604 pub fn IS_GOPHER_PHONE_SERVER(type_: DWORD) -> BOOL {
605     if (type_ & GOPHER_TYPE_CSO) != 0 { TRUE } else { FALSE }
606 }
607 #[inline]
608 pub fn IS_GOPHER_ERROR(type_: DWORD) -> BOOL {
609     if (type_ & GOPHER_TYPE_ERROR) != 0 { TRUE } else { FALSE }
610 }
611 #[inline]
612 pub fn IS_GOPHER_INDEX_SERVER(type_: DWORD) -> BOOL {
613     if (type_ & GOPHER_TYPE_INDEX_SERVER) != 0 { TRUE } else { FALSE }
614 }
615 #[inline]
616 pub fn IS_GOPHER_TELNET_SESSION(type_: DWORD) -> BOOL {
617     if (type_ & GOPHER_TYPE_TELNET) != 0 { TRUE } else { FALSE }
618 }
619 #[inline]
620 pub fn IS_GOPHER_BACKUP_SERVER(type_: DWORD) -> BOOL {
621     if (type_ & GOPHER_TYPE_REDUNDANT) != 0 { TRUE } else { FALSE }
622 }
623 #[inline]
624 pub fn IS_GOPHER_TN3270_SESSION(type_: DWORD) -> BOOL {
625     if (type_ & GOPHER_TYPE_TN3270) != 0 { TRUE } else { FALSE }
626 }
627 #[inline]
628 pub fn IS_GOPHER_ASK(type_: DWORD) -> BOOL {
629     if (type_ & GOPHER_TYPE_ASK) != 0 { TRUE } else { FALSE }
630 }
631 #[inline]
632 pub fn IS_GOPHER_PLUS(type_: DWORD) -> BOOL {
633     if (type_ & GOPHER_TYPE_GOPHER_PLUS) != 0 { TRUE } else { FALSE }
634 }
635 #[inline]
636 pub fn IS_GOPHER_TYPE_KNOWN(type_: DWORD) -> BOOL {
637     if (type_ & GOPHER_TYPE_UNKNOWN) != 0 { FALSE } else { TRUE }
638 }
639 pub const GOPHER_TYPE_FILE_MASK: DWORD = GOPHER_TYPE_TEXT_FILE | GOPHER_TYPE_MAC_BINHEX
640     | GOPHER_TYPE_DOS_ARCHIVE | GOPHER_TYPE_UNIX_UUENCODED | GOPHER_TYPE_BINARY | GOPHER_TYPE_GIF
641     | GOPHER_TYPE_IMAGE | GOPHER_TYPE_BITMAP | GOPHER_TYPE_MOVIE | GOPHER_TYPE_SOUND
642     | GOPHER_TYPE_HTML | GOPHER_TYPE_PDF | GOPHER_TYPE_CALENDAR | GOPHER_TYPE_INLINE;
643 STRUCT!{struct GOPHER_ADMIN_ATTRIBUTE_TYPE {
644     Comment: LPCWSTR,
645     EmailAddress: LPCWSTR,
646 }}
647 pub type LPGOPHER_ADMIN_ATTRIBUTE_TYPE = *mut GOPHER_ADMIN_ATTRIBUTE_TYPE;
648 STRUCT!{struct GOPHER_MOD_DATE_ATTRIBUTE_TYPE {
649     DateAndTime: FILETIME,
650 }}
651 pub type LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE = *mut GOPHER_MOD_DATE_ATTRIBUTE_TYPE;
652 STRUCT!{struct GOPHER_TTL_ATTRIBUTE_TYPE {
653     Ttl: DWORD,
654 }}
655 pub type LPGOPHER_TTL_ATTRIBUTE_TYPE = *mut GOPHER_TTL_ATTRIBUTE_TYPE;
656 STRUCT!{struct GOPHER_SCORE_ATTRIBUTE_TYPE {
657     Score: INT,
658 }}
659 pub type LPGOPHER_SCORE_ATTRIBUTE_TYPE = *mut GOPHER_SCORE_ATTRIBUTE_TYPE;
660 STRUCT!{struct GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE {
661     LowerBound: INT,
662     UpperBound: INT,
663 }}
664 pub type LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE = *mut GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
665 STRUCT!{struct GOPHER_SITE_ATTRIBUTE_TYPE {
666     Site: LPCWSTR,
667 }}
668 pub type LPGOPHER_SITE_ATTRIBUTE_TYPE = *mut GOPHER_SITE_ATTRIBUTE_TYPE;
669 STRUCT!{struct GOPHER_ORGANIZATION_ATTRIBUTE_TYPE {
670     Organization: LPCWSTR,
671 }}
672 pub type LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE = *mut GOPHER_ORGANIZATION_ATTRIBUTE_TYPE;
673 STRUCT!{struct GOPHER_LOCATION_ATTRIBUTE_TYPE {
674     Location: LPCWSTR,
675 }}
676 pub type LPGOPHER_LOCATION_ATTRIBUTE_TYPE = *mut GOPHER_LOCATION_ATTRIBUTE_TYPE;
677 STRUCT!{struct GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE {
678     DegreesNorth: INT,
679     MinutesNorth: INT,
680     SecondsNorth: INT,
681     DegreesEast: INT,
682     MinutesEast: INT,
683     SecondsEast: INT,
684 }}
685 pub type LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE =
686     *mut GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
687 STRUCT!{struct GOPHER_TIMEZONE_ATTRIBUTE_TYPE {
688     Zone: INT,
689 }}
690 pub type LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE = *mut GOPHER_TIMEZONE_ATTRIBUTE_TYPE;
691 STRUCT!{struct GOPHER_PROVIDER_ATTRIBUTE_TYPE {
692     Provider: LPCWSTR,
693 }}
694 pub type LPGOPHER_PROVIDER_ATTRIBUTE_TYPE = *mut GOPHER_PROVIDER_ATTRIBUTE_TYPE;
695 STRUCT!{struct GOPHER_VERSION_ATTRIBUTE_TYPE {
696     Version: LPCWSTR,
697 }}
698 pub type LPGOPHER_VERSION_ATTRIBUTE_TYPE = *mut GOPHER_VERSION_ATTRIBUTE_TYPE;
699 STRUCT!{struct GOPHER_ABSTRACT_ATTRIBUTE_TYPE {
700     ShortAbstract: LPCWSTR,
701     AbstractFile: LPCWSTR,
702 }}
703 pub type LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE = *mut GOPHER_ABSTRACT_ATTRIBUTE_TYPE;
704 STRUCT!{struct GOPHER_VIEW_ATTRIBUTE_TYPE {
705     ContentType: LPCWSTR,
706     Language: LPCWSTR,
707     Size: DWORD,
708 }}
709 pub type LPGOPHER_VIEW_ATTRIBUTE_TYPE = *mut GOPHER_VIEW_ATTRIBUTE_TYPE;
710 STRUCT!{struct GOPHER_VERONICA_ATTRIBUTE_TYPE {
711     TreeWalk: BOOL,
712 }}
713 pub type LPGOPHER_VERONICA_ATTRIBUTE_TYPE = *mut GOPHER_VERONICA_ATTRIBUTE_TYPE;
714 STRUCT!{struct GOPHER_ASK_ATTRIBUTE_TYPE {
715     QuestionType: LPCWSTR,
716     QuestionText: LPCWSTR,
717 }}
718 pub type LPGOPHER_ASK_ATTRIBUTE_TYPE = *mut GOPHER_ASK_ATTRIBUTE_TYPE;
719 STRUCT!{struct GOPHER_UNKNOWN_ATTRIBUTE_TYPE {
720     Text: LPCWSTR,
721 }}
722 pub type LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE = *mut GOPHER_UNKNOWN_ATTRIBUTE_TYPE;
723 UNION!{union GOPHER_ATTRIBUTE_TYPE_AttributeType {
724     [u32; 6] [u64; 3],
725     Admin Admin_mut: GOPHER_ADMIN_ATTRIBUTE_TYPE,
726     ModDate ModDate_mut: GOPHER_MOD_DATE_ATTRIBUTE_TYPE,
727     Ttl Ttl_mut: GOPHER_TTL_ATTRIBUTE_TYPE,
728     Score Score_mut: GOPHER_SCORE_ATTRIBUTE_TYPE,
729     ScoreRange ScoreRange_mut: GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE,
730     Site Site_mut: GOPHER_SITE_ATTRIBUTE_TYPE,
731     Organization Organization_mut: GOPHER_ORGANIZATION_ATTRIBUTE_TYPE,
732     Location Location_mut: GOPHER_LOCATION_ATTRIBUTE_TYPE,
733     GeographicalLocation GeographicalLocation_mut: GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE,
734     TimeZone TimeZone_mut: GOPHER_TIMEZONE_ATTRIBUTE_TYPE,
735     Provider Provider_mut: GOPHER_PROVIDER_ATTRIBUTE_TYPE,
736     Version Version_mut: GOPHER_VERSION_ATTRIBUTE_TYPE,
737     Abstract Abstract_mut: GOPHER_ABSTRACT_ATTRIBUTE_TYPE,
738     View View_mut: GOPHER_VIEW_ATTRIBUTE_TYPE,
739     Veronica Veronica_mut: GOPHER_VERONICA_ATTRIBUTE_TYPE,
740     Ask Ask_mut: GOPHER_ASK_ATTRIBUTE_TYPE,
741     Unknown Unknown_mut: GOPHER_UNKNOWN_ATTRIBUTE_TYPE,
742 }}
743 STRUCT!{struct GOPHER_ATTRIBUTE_TYPE {
744     CategoryId: DWORD,
745     AttributeId: DWORD,
746     AttributeType: GOPHER_ATTRIBUTE_TYPE_AttributeType,
747 }}
748 pub type LPGOPHER_ATTRIBUTE_TYPE = *mut GOPHER_ATTRIBUTE_TYPE;
749 pub const MAX_GOPHER_CATEGORY_NAME: DWORD = 128;
750 pub const MAX_GOPHER_ATTRIBUTE_NAME: DWORD = 128;
751 pub const MIN_GOPHER_ATTRIBUTE_LENGTH: DWORD = 256;
752 pub const GOPHER_INFO_CATEGORY: &'static str = " + INFO";
753 pub const GOPHER_ADMIN_CATEGORY: &'static str = " + ADMIN";
754 pub const GOPHER_VIEWS_CATEGORY: &'static str = " + VIEWS";
755 pub const GOPHER_ABSTRACT_CATEGORY: &'static str = " + ABSTRACT";
756 pub const GOPHER_VERONICA_CATEGORY: &'static str = " + VERONICA";
757 pub const GOPHER_ADMIN_ATTRIBUTE: &'static str = "Admin";
758 pub const GOPHER_MOD_DATE_ATTRIBUTE: &'static str = "Mod-Date";
759 pub const GOPHER_TTL_ATTRIBUTE: &'static str = "TTL";
760 pub const GOPHER_SCORE_ATTRIBUTE: &'static str = "Score";
761 pub const GOPHER_RANGE_ATTRIBUTE: &'static str = "Score-range";
762 pub const GOPHER_SITE_ATTRIBUTE: &'static str = "Site";
763 pub const GOPHER_ORG_ATTRIBUTE: &'static str = "Org";
764 pub const GOPHER_LOCATION_ATTRIBUTE: &'static str = "Loc";
765 pub const GOPHER_GEOG_ATTRIBUTE: &'static str = "Geog";
766 pub const GOPHER_TIMEZONE_ATTRIBUTE: &'static str = "TZ";
767 pub const GOPHER_PROVIDER_ATTRIBUTE: &'static str = "Provider";
768 pub const GOPHER_VERSION_ATTRIBUTE: &'static str = "Version";
769 pub const GOPHER_ABSTRACT_ATTRIBUTE: &'static str = "Abstract";
770 pub const GOPHER_VIEW_ATTRIBUTE: &'static str = "View";
771 pub const GOPHER_TREEWALK_ATTRIBUTE: &'static str = "treewalk";
772 pub const GOPHER_ATTRIBUTE_ID_BASE: DWORD = 0xabcccc00;
773 pub const GOPHER_CATEGORY_ID_ALL: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 1;
774 pub const GOPHER_CATEGORY_ID_INFO: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 2;
775 pub const GOPHER_CATEGORY_ID_ADMIN: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 3;
776 pub const GOPHER_CATEGORY_ID_VIEWS: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 4;
777 pub const GOPHER_CATEGORY_ID_ABSTRACT: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 5;
778 pub const GOPHER_CATEGORY_ID_VERONICA: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 6;
779 pub const GOPHER_CATEGORY_ID_ASK: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 7;
780 pub const GOPHER_CATEGORY_ID_UNKNOWN: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 8;
781 pub const GOPHER_ATTRIBUTE_ID_ALL: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 9;
782 pub const GOPHER_ATTRIBUTE_ID_ADMIN: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 10;
783 pub const GOPHER_ATTRIBUTE_ID_MOD_DATE: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 11;
784 pub const GOPHER_ATTRIBUTE_ID_TTL: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 12;
785 pub const GOPHER_ATTRIBUTE_ID_SCORE: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 13;
786 pub const GOPHER_ATTRIBUTE_ID_RANGE: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 14;
787 pub const GOPHER_ATTRIBUTE_ID_SITE: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 15;
788 pub const GOPHER_ATTRIBUTE_ID_ORG: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 16;
789 pub const GOPHER_ATTRIBUTE_ID_LOCATION: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 17;
790 pub const GOPHER_ATTRIBUTE_ID_GEOG: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 18;
791 pub const GOPHER_ATTRIBUTE_ID_TIMEZONE: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 19;
792 pub const GOPHER_ATTRIBUTE_ID_PROVIDER: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 20;
793 pub const GOPHER_ATTRIBUTE_ID_VERSION: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 21;
794 pub const GOPHER_ATTRIBUTE_ID_ABSTRACT: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 22;
795 pub const GOPHER_ATTRIBUTE_ID_VIEW: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 23;
796 pub const GOPHER_ATTRIBUTE_ID_TREEWALK: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 24;
797 pub const GOPHER_ATTRIBUTE_ID_UNKNOWN: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 25;
798 FN!{stdcall GOPHER_ATTRIBUTE_ENUMERATOR(
799     LPGOPHER_ATTRIBUTE_TYPE,
800     DWORD,
801 ) -> BOOL}
802 pub const HTTP_MAJOR_VERSION: DWORD = 1;
803 pub const HTTP_MINOR_VERSION: DWORD = 0;
804 pub const HTTP_VERSION: &'static str = "HTTP/1.0";
805 pub const HTTP_QUERY_MIME_VERSION: DWORD = 0;
806 pub const HTTP_QUERY_CONTENT_TYPE: DWORD = 1;
807 pub const HTTP_QUERY_CONTENT_TRANSFER_ENCODING: DWORD = 2;
808 pub const HTTP_QUERY_CONTENT_ID: DWORD = 3;
809 pub const HTTP_QUERY_CONTENT_DESCRIPTION: DWORD = 4;
810 pub const HTTP_QUERY_CONTENT_LENGTH: DWORD = 5;
811 pub const HTTP_QUERY_CONTENT_LANGUAGE: DWORD = 6;
812 pub const HTTP_QUERY_ALLOW: DWORD = 7;
813 pub const HTTP_QUERY_PUBLIC: DWORD = 8;
814 pub const HTTP_QUERY_DATE: DWORD = 9;
815 pub const HTTP_QUERY_EXPIRES: DWORD = 10;
816 pub const HTTP_QUERY_LAST_MODIFIED: DWORD = 11;
817 pub const HTTP_QUERY_MESSAGE_ID: DWORD = 12;
818 pub const HTTP_QUERY_URI: DWORD = 13;
819 pub const HTTP_QUERY_DERIVED_FROM: DWORD = 14;
820 pub const HTTP_QUERY_COST: DWORD = 15;
821 pub const HTTP_QUERY_LINK: DWORD = 16;
822 pub const HTTP_QUERY_PRAGMA: DWORD = 17;
823 pub const HTTP_QUERY_VERSION: DWORD = 18;
824 pub const HTTP_QUERY_STATUS_CODE: DWORD = 19;
825 pub const HTTP_QUERY_STATUS_TEXT: DWORD = 20;
826 pub const HTTP_QUERY_RAW_HEADERS: DWORD = 21;
827 pub const HTTP_QUERY_RAW_HEADERS_CRLF: DWORD = 22;
828 pub const HTTP_QUERY_CONNECTION: DWORD = 23;
829 pub const HTTP_QUERY_ACCEPT: DWORD = 24;
830 pub const HTTP_QUERY_ACCEPT_CHARSET: DWORD = 25;
831 pub const HTTP_QUERY_ACCEPT_ENCODING: DWORD = 26;
832 pub const HTTP_QUERY_ACCEPT_LANGUAGE: DWORD = 27;
833 pub const HTTP_QUERY_AUTHORIZATION: DWORD = 28;
834 pub const HTTP_QUERY_CONTENT_ENCODING: DWORD = 29;
835 pub const HTTP_QUERY_FORWARDED: DWORD = 30;
836 pub const HTTP_QUERY_FROM: DWORD = 31;
837 pub const HTTP_QUERY_IF_MODIFIED_SINCE: DWORD = 32;
838 pub const HTTP_QUERY_LOCATION: DWORD = 33;
839 pub const HTTP_QUERY_ORIG_URI: DWORD = 34;
840 pub const HTTP_QUERY_REFERER: DWORD = 35;
841 pub const HTTP_QUERY_RETRY_AFTER: DWORD = 36;
842 pub const HTTP_QUERY_SERVER: DWORD = 37;
843 pub const HTTP_QUERY_TITLE: DWORD = 38;
844 pub const HTTP_QUERY_USER_AGENT: DWORD = 39;
845 pub const HTTP_QUERY_WWW_AUTHENTICATE: DWORD = 40;
846 pub const HTTP_QUERY_PROXY_AUTHENTICATE: DWORD = 41;
847 pub const HTTP_QUERY_ACCEPT_RANGES: DWORD = 42;
848 pub const HTTP_QUERY_SET_COOKIE: DWORD = 43;
849 pub const HTTP_QUERY_COOKIE: DWORD = 44;
850 pub const HTTP_QUERY_REQUEST_METHOD: DWORD = 45;
851 pub const HTTP_QUERY_REFRESH: DWORD = 46;
852 pub const HTTP_QUERY_CONTENT_DISPOSITION: DWORD = 47;
853 pub const HTTP_QUERY_AGE: DWORD = 48;
854 pub const HTTP_QUERY_CACHE_CONTROL: DWORD = 49;
855 pub const HTTP_QUERY_CONTENT_BASE: DWORD = 50;
856 pub const HTTP_QUERY_CONTENT_LOCATION: DWORD = 51;
857 pub const HTTP_QUERY_CONTENT_MD5: DWORD = 52;
858 pub const HTTP_QUERY_CONTENT_RANGE: DWORD = 53;
859 pub const HTTP_QUERY_ETAG: DWORD = 54;
860 pub const HTTP_QUERY_HOST: DWORD = 55;
861 pub const HTTP_QUERY_IF_MATCH: DWORD = 56;
862 pub const HTTP_QUERY_IF_NONE_MATCH: DWORD = 57;
863 pub const HTTP_QUERY_IF_RANGE: DWORD = 58;
864 pub const HTTP_QUERY_IF_UNMODIFIED_SINCE: DWORD = 59;
865 pub const HTTP_QUERY_MAX_FORWARDS: DWORD = 60;
866 pub const HTTP_QUERY_PROXY_AUTHORIZATION: DWORD = 61;
867 pub const HTTP_QUERY_RANGE: DWORD = 62;
868 pub const HTTP_QUERY_TRANSFER_ENCODING: DWORD = 63;
869 pub const HTTP_QUERY_UPGRADE: DWORD = 64;
870 pub const HTTP_QUERY_VARY: DWORD = 65;
871 pub const HTTP_QUERY_VIA: DWORD = 66;
872 pub const HTTP_QUERY_WARNING: DWORD = 67;
873 pub const HTTP_QUERY_EXPECT: DWORD = 68;
874 pub const HTTP_QUERY_PROXY_CONNECTION: DWORD = 69;
875 pub const HTTP_QUERY_UNLESS_MODIFIED_SINCE: DWORD = 70;
876 pub const HTTP_QUERY_ECHO_REQUEST: DWORD = 71;
877 pub const HTTP_QUERY_ECHO_REPLY: DWORD = 72;
878 pub const HTTP_QUERY_ECHO_HEADERS: DWORD = 73;
879 pub const HTTP_QUERY_ECHO_HEADERS_CRLF: DWORD = 74;
880 pub const HTTP_QUERY_PROXY_SUPPORT: DWORD = 75;
881 pub const HTTP_QUERY_AUTHENTICATION_INFO: DWORD = 76;
882 pub const HTTP_QUERY_PASSPORT_URLS: DWORD = 77;
883 pub const HTTP_QUERY_PASSPORT_CONFIG: DWORD = 78;
884 pub const HTTP_QUERY_X_CONTENT_TYPE_OPTIONS: DWORD = 79;
885 pub const HTTP_QUERY_P3P: DWORD = 80;
886 pub const HTTP_QUERY_X_P2P_PEERDIST: DWORD = 81;
887 pub const HTTP_QUERY_TRANSLATE: DWORD = 82;
888 pub const HTTP_QUERY_X_UA_COMPATIBLE: DWORD = 83;
889 pub const HTTP_QUERY_DEFAULT_STYLE: DWORD = 84;
890 pub const HTTP_QUERY_X_FRAME_OPTIONS: DWORD = 85;
891 pub const HTTP_QUERY_X_XSS_PROTECTION: DWORD = 86;
892 pub const HTTP_QUERY_SET_COOKIE2: DWORD = 87;
893 pub const HTTP_QUERY_DO_NOT_TRACK: DWORD = 88;
894 pub const HTTP_QUERY_KEEP_ALIVE: DWORD = 89;
895 pub const HTTP_QUERY_MAX: DWORD = 89;
896 pub const HTTP_QUERY_CUSTOM: DWORD = 65535;
897 pub const HTTP_QUERY_FLAG_REQUEST_HEADERS: DWORD = 0x80000000;
898 pub const HTTP_QUERY_FLAG_SYSTEMTIME: DWORD = 0x40000000;
899 pub const HTTP_QUERY_FLAG_NUMBER: DWORD = 0x20000000;
900 pub const HTTP_QUERY_FLAG_COALESCE: DWORD = 0x10000000;
901 pub const HTTP_QUERY_FLAG_NUMBER64: DWORD = 0x08000000;
902 pub const HTTP_QUERY_MODIFIER_FLAGS_MASK: DWORD = HTTP_QUERY_FLAG_REQUEST_HEADERS
903     | HTTP_QUERY_FLAG_SYSTEMTIME | HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_FLAG_COALESCE
904     | HTTP_QUERY_FLAG_NUMBER64;
905 pub const HTTP_QUERY_HEADER_MASK: DWORD = !HTTP_QUERY_MODIFIER_FLAGS_MASK;
906 pub const HTTP_STATUS_CONTINUE: DWORD = 100;
907 pub const HTTP_STATUS_SWITCH_PROTOCOLS: DWORD = 101;
908 pub const HTTP_STATUS_OK: DWORD = 200;
909 pub const HTTP_STATUS_CREATED: DWORD = 201;
910 pub const HTTP_STATUS_ACCEPTED: DWORD = 202;
911 pub const HTTP_STATUS_PARTIAL: DWORD = 203;
912 pub const HTTP_STATUS_NO_CONTENT: DWORD = 204;
913 pub const HTTP_STATUS_RESET_CONTENT: DWORD = 205;
914 pub const HTTP_STATUS_PARTIAL_CONTENT: DWORD = 206;
915 pub const HTTP_STATUS_AMBIGUOUS: DWORD = 300;
916 pub const HTTP_STATUS_MOVED: DWORD = 301;
917 pub const HTTP_STATUS_REDIRECT: DWORD = 302;
918 pub const HTTP_STATUS_REDIRECT_METHOD: DWORD = 303;
919 pub const HTTP_STATUS_NOT_MODIFIED: DWORD = 304;
920 pub const HTTP_STATUS_USE_PROXY: DWORD = 305;
921 pub const HTTP_STATUS_REDIRECT_KEEP_VERB: DWORD = 307;
922 pub const HTTP_STATUS_BAD_REQUEST: DWORD = 400;
923 pub const HTTP_STATUS_DENIED: DWORD = 401;
924 pub const HTTP_STATUS_PAYMENT_REQ: DWORD = 402;
925 pub const HTTP_STATUS_FORBIDDEN: DWORD = 403;
926 pub const HTTP_STATUS_NOT_FOUND: DWORD = 404;
927 pub const HTTP_STATUS_BAD_METHOD: DWORD = 405;
928 pub const HTTP_STATUS_NONE_ACCEPTABLE: DWORD = 406;
929 pub const HTTP_STATUS_PROXY_AUTH_REQ: DWORD = 407;
930 pub const HTTP_STATUS_REQUEST_TIMEOUT: DWORD = 408;
931 pub const HTTP_STATUS_CONFLICT: DWORD = 409;
932 pub const HTTP_STATUS_GONE: DWORD = 410;
933 pub const HTTP_STATUS_LENGTH_REQUIRED: DWORD = 411;
934 pub const HTTP_STATUS_PRECOND_FAILED: DWORD = 412;
935 pub const HTTP_STATUS_REQUEST_TOO_LARGE: DWORD = 413;
936 pub const HTTP_STATUS_URI_TOO_LONG: DWORD = 414;
937 pub const HTTP_STATUS_UNSUPPORTED_MEDIA: DWORD = 415;
938 pub const HTTP_STATUS_RETRY_WITH: DWORD = 449;
939 pub const HTTP_STATUS_SERVER_ERROR: DWORD = 500;
940 pub const HTTP_STATUS_NOT_SUPPORTED: DWORD = 501;
941 pub const HTTP_STATUS_BAD_GATEWAY: DWORD = 502;
942 pub const HTTP_STATUS_SERVICE_UNAVAIL: DWORD = 503;
943 pub const HTTP_STATUS_GATEWAY_TIMEOUT: DWORD = 504;
944 pub const HTTP_STATUS_VERSION_NOT_SUP: DWORD = 505;
945 pub const HTTP_STATUS_FIRST: DWORD = HTTP_STATUS_CONTINUE;
946 pub const HTTP_STATUS_LAST: DWORD = HTTP_STATUS_VERSION_NOT_SUP;
947 pub const HTTP_ADDREQ_INDEX_MASK: DWORD = 0x0000FFFF;
948 pub const HTTP_ADDREQ_FLAGS_MASK: DWORD = 0xFFFF0000;
949 pub const HTTP_ADDREQ_FLAG_ADD_IF_NEW: DWORD = 0x10000000;
950 pub const HTTP_ADDREQ_FLAG_ADD: DWORD = 0x20000000;
951 pub const HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA: DWORD = 0x40000000;
952 pub const HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON: DWORD = 0x01000000;
953 pub const HTTP_ADDREQ_FLAG_COALESCE: DWORD = HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA;
954 pub const HTTP_ADDREQ_FLAG_REPLACE: DWORD = 0x80000000;
955 pub const HSR_ASYNC: DWORD = WININET_API_FLAG_ASYNC;
956 pub const HSR_SYNC: DWORD = WININET_API_FLAG_SYNC;
957 pub const HSR_USE_CONTEXT: DWORD = WININET_API_FLAG_USE_CONTEXT;
958 pub const HSR_INITIATE: DWORD = 0x00000008;
959 pub const HSR_DOWNLOAD: DWORD = 0x00000010;
960 pub const HSR_CHUNKED: DWORD = 0x00000020;
961 STRUCT!{struct INTERNET_COOKIE2 {
962     pwszName: PWSTR,
963     pwszValue: PWSTR,
964     pwszDomain: PWSTR,
965     pwszPath: PWSTR,
966     dwFlags: DWORD,
967     ftExpires: FILETIME,
968     fExpiresSet: BOOL,
969 }}
970 pub const INTERNET_COOKIE_IS_SECURE: DWORD = 0x01;
971 pub const INTERNET_COOKIE_IS_SESSION: DWORD = 0x02;
972 pub const INTERNET_COOKIE_THIRD_PARTY: DWORD = 0x10;
973 pub const INTERNET_COOKIE_PROMPT_REQUIRED: DWORD = 0x20;
974 pub const INTERNET_COOKIE_EVALUATE_P3P: DWORD = 0x40;
975 pub const INTERNET_COOKIE_APPLY_P3P: DWORD = 0x80;
976 pub const INTERNET_COOKIE_P3P_ENABLED: DWORD = 0x100;
977 pub const INTERNET_COOKIE_IS_RESTRICTED: DWORD = 0x200;
978 pub const INTERNET_COOKIE_IE6: DWORD = 0x400;
979 pub const INTERNET_COOKIE_IS_LEGACY: DWORD = 0x800;
980 pub const INTERNET_COOKIE_NON_SCRIPT: DWORD = 0x00001000;
981 pub const INTERNET_COOKIE_HTTPONLY: DWORD = 0x00002000;
982 pub const FLAG_ICC_FORCE_CONNECTION: DWORD = 0x00000001;
983 pub const FLAGS_ERROR_UI_FILTER_FOR_ERRORS: DWORD = 0x01;
984 pub const FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS: DWORD = 0x02;
985 pub const FLAGS_ERROR_UI_FLAGS_GENERATE_DATA: DWORD = 0x04;
986 pub const FLAGS_ERROR_UI_FLAGS_NO_UI: DWORD = 0x08;
987 pub const FLAGS_ERROR_UI_SERIALIZE_DIALOGS: DWORD = 0x10;
988 FN!{stdcall PFN_AUTH_NOTIFY(
989     DWORD_PTR,
990     DWORD,
991     LPVOID,
992 ) -> DWORD}
993 STRUCT!{struct INTERNET_AUTH_NOTIFY_DATA {
994     cbStruct: DWORD,
995     dwOptions: DWORD,
996     pfnNotify: PFN_AUTH_NOTIFY,
997     dwContext: DWORD_PTR,
998 }}
999 pub const INTERNET_ERROR_BASE: DWORD = 12000;
1000 pub const ERROR_INTERNET_OUT_OF_HANDLES: DWORD = INTERNET_ERROR_BASE + 1;
1001 pub const ERROR_INTERNET_TIMEOUT: DWORD = INTERNET_ERROR_BASE + 2;
1002 pub const ERROR_INTERNET_EXTENDED_ERROR: DWORD = INTERNET_ERROR_BASE + 3;
1003 pub const ERROR_INTERNET_INTERNAL_ERROR: DWORD = INTERNET_ERROR_BASE + 4;
1004 pub const ERROR_INTERNET_INVALID_URL: DWORD = INTERNET_ERROR_BASE + 5;
1005 pub const ERROR_INTERNET_UNRECOGNIZED_SCHEME: DWORD = INTERNET_ERROR_BASE + 6;
1006 pub const ERROR_INTERNET_NAME_NOT_RESOLVED: DWORD = INTERNET_ERROR_BASE + 7;
1007 pub const ERROR_INTERNET_PROTOCOL_NOT_FOUND: DWORD = INTERNET_ERROR_BASE + 8;
1008 pub const ERROR_INTERNET_INVALID_OPTION: DWORD = INTERNET_ERROR_BASE + 9;
1009 pub const ERROR_INTERNET_BAD_OPTION_LENGTH: DWORD = INTERNET_ERROR_BASE + 10;
1010 pub const ERROR_INTERNET_OPTION_NOT_SETTABLE: DWORD = INTERNET_ERROR_BASE + 11;
1011 pub const ERROR_INTERNET_SHUTDOWN: DWORD = INTERNET_ERROR_BASE + 12;
1012 pub const ERROR_INTERNET_INCORRECT_USER_NAME: DWORD = INTERNET_ERROR_BASE + 13;
1013 pub const ERROR_INTERNET_INCORRECT_PASSWORD: DWORD = INTERNET_ERROR_BASE + 14;
1014 pub const ERROR_INTERNET_LOGIN_FAILURE: DWORD = INTERNET_ERROR_BASE + 15;
1015 pub const ERROR_INTERNET_INVALID_OPERATION: DWORD = INTERNET_ERROR_BASE + 16;
1016 pub const ERROR_INTERNET_OPERATION_CANCELLED: DWORD = INTERNET_ERROR_BASE + 17;
1017 pub const ERROR_INTERNET_INCORRECT_HANDLE_TYPE: DWORD = INTERNET_ERROR_BASE + 18;
1018 pub const ERROR_INTERNET_INCORRECT_HANDLE_STATE: DWORD = INTERNET_ERROR_BASE + 19;
1019 pub const ERROR_INTERNET_NOT_PROXY_REQUEST: DWORD = INTERNET_ERROR_BASE + 20;
1020 pub const ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND: DWORD = INTERNET_ERROR_BASE + 21;
1021 pub const ERROR_INTERNET_BAD_REGISTRY_PARAMETER: DWORD = INTERNET_ERROR_BASE + 22;
1022 pub const ERROR_INTERNET_NO_DIRECT_ACCESS: DWORD = INTERNET_ERROR_BASE + 23;
1023 pub const ERROR_INTERNET_NO_CONTEXT: DWORD = INTERNET_ERROR_BASE + 24;
1024 pub const ERROR_INTERNET_NO_CALLBACK: DWORD = INTERNET_ERROR_BASE + 25;
1025 pub const ERROR_INTERNET_REQUEST_PENDING: DWORD = INTERNET_ERROR_BASE + 26;
1026 pub const ERROR_INTERNET_INCORRECT_FORMAT: DWORD = INTERNET_ERROR_BASE + 27;
1027 pub const ERROR_INTERNET_ITEM_NOT_FOUND: DWORD = INTERNET_ERROR_BASE + 28;
1028 pub const ERROR_INTERNET_CANNOT_CONNECT: DWORD = INTERNET_ERROR_BASE + 29;
1029 pub const ERROR_INTERNET_CONNECTION_ABORTED: DWORD = INTERNET_ERROR_BASE + 30;
1030 pub const ERROR_INTERNET_CONNECTION_RESET: DWORD = INTERNET_ERROR_BASE + 31;
1031 pub const ERROR_INTERNET_FORCE_RETRY: DWORD = INTERNET_ERROR_BASE + 32;
1032 pub const ERROR_INTERNET_INVALID_PROXY_REQUEST: DWORD = INTERNET_ERROR_BASE + 33;
1033 pub const ERROR_INTERNET_NEED_UI: DWORD = INTERNET_ERROR_BASE + 34;
1034 pub const ERROR_INTERNET_HANDLE_EXISTS: DWORD = INTERNET_ERROR_BASE + 36;
1035 pub const ERROR_INTERNET_SEC_CERT_DATE_INVALID: DWORD = INTERNET_ERROR_BASE + 37;
1036 pub const ERROR_INTERNET_SEC_CERT_CN_INVALID: DWORD = INTERNET_ERROR_BASE + 38;
1037 pub const ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR: DWORD = INTERNET_ERROR_BASE + 39;
1038 pub const ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR: DWORD = INTERNET_ERROR_BASE + 40;
1039 pub const ERROR_INTERNET_MIXED_SECURITY: DWORD = INTERNET_ERROR_BASE + 41;
1040 pub const ERROR_INTERNET_CHG_POST_IS_NON_SECURE: DWORD = INTERNET_ERROR_BASE + 42;
1041 pub const ERROR_INTERNET_POST_IS_NON_SECURE: DWORD = INTERNET_ERROR_BASE + 43;
1042 pub const ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED: DWORD = INTERNET_ERROR_BASE + 44;
1043 pub const ERROR_INTERNET_INVALID_CA: DWORD = INTERNET_ERROR_BASE + 45;
1044 pub const ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP: DWORD = INTERNET_ERROR_BASE + 46;
1045 pub const ERROR_INTERNET_ASYNC_THREAD_FAILED: DWORD = INTERNET_ERROR_BASE + 47;
1046 pub const ERROR_INTERNET_REDIRECT_SCHEME_CHANGE: DWORD = INTERNET_ERROR_BASE + 48;
1047 pub const ERROR_INTERNET_DIALOG_PENDING: DWORD = INTERNET_ERROR_BASE + 49;
1048 pub const ERROR_INTERNET_RETRY_DIALOG: DWORD = INTERNET_ERROR_BASE + 50;
1049 pub const ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR: DWORD = INTERNET_ERROR_BASE + 52;
1050 pub const ERROR_INTERNET_INSERT_CDROM: DWORD = INTERNET_ERROR_BASE + 53;
1051 pub const ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED: DWORD = INTERNET_ERROR_BASE + 54;
1052 pub const ERROR_INTERNET_SEC_CERT_ERRORS: DWORD = INTERNET_ERROR_BASE + 55;
1053 pub const ERROR_INTERNET_SEC_CERT_NO_REV: DWORD = INTERNET_ERROR_BASE + 56;
1054 pub const ERROR_INTERNET_SEC_CERT_REV_FAILED: DWORD = INTERNET_ERROR_BASE + 57;
1055 pub const ERROR_FTP_TRANSFER_IN_PROGRESS: DWORD = INTERNET_ERROR_BASE + 110;
1056 pub const ERROR_FTP_DROPPED: DWORD = INTERNET_ERROR_BASE + 111;
1057 pub const ERROR_FTP_NO_PASSIVE_MODE: DWORD = INTERNET_ERROR_BASE + 112;
1058 pub const ERROR_GOPHER_PROTOCOL_ERROR: DWORD = INTERNET_ERROR_BASE + 130;
1059 pub const ERROR_GOPHER_NOT_FILE: DWORD = INTERNET_ERROR_BASE + 131;
1060 pub const ERROR_GOPHER_DATA_ERROR: DWORD = INTERNET_ERROR_BASE + 132;
1061 pub const ERROR_GOPHER_END_OF_DATA: DWORD = INTERNET_ERROR_BASE + 133;
1062 pub const ERROR_GOPHER_INVALID_LOCATOR: DWORD = INTERNET_ERROR_BASE + 134;
1063 pub const ERROR_GOPHER_INCORRECT_LOCATOR_TYPE: DWORD = INTERNET_ERROR_BASE + 135;
1064 pub const ERROR_GOPHER_NOT_GOPHER_PLUS: DWORD = INTERNET_ERROR_BASE + 136;
1065 pub const ERROR_GOPHER_ATTRIBUTE_NOT_FOUND: DWORD = INTERNET_ERROR_BASE + 137;
1066 pub const ERROR_GOPHER_UNKNOWN_LOCATOR: DWORD = INTERNET_ERROR_BASE + 138;
1067 pub const ERROR_HTTP_HEADER_NOT_FOUND: DWORD = INTERNET_ERROR_BASE + 150;
1068 pub const ERROR_HTTP_DOWNLEVEL_SERVER: DWORD = INTERNET_ERROR_BASE + 151;
1069 pub const ERROR_HTTP_INVALID_SERVER_RESPONSE: DWORD = INTERNET_ERROR_BASE + 152;
1070 pub const ERROR_HTTP_INVALID_HEADER: DWORD = INTERNET_ERROR_BASE + 153;
1071 pub const ERROR_HTTP_INVALID_QUERY_REQUEST: DWORD = INTERNET_ERROR_BASE + 154;
1072 pub const ERROR_HTTP_HEADER_ALREADY_EXISTS: DWORD = INTERNET_ERROR_BASE + 155;
1073 pub const ERROR_HTTP_REDIRECT_FAILED: DWORD = INTERNET_ERROR_BASE + 156;
1074 pub const ERROR_HTTP_NOT_REDIRECTED: DWORD = INTERNET_ERROR_BASE + 160;
1075 pub const ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION: DWORD = INTERNET_ERROR_BASE + 161;
1076 pub const ERROR_HTTP_COOKIE_DECLINED: DWORD = INTERNET_ERROR_BASE + 162;
1077 pub const ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION: DWORD = INTERNET_ERROR_BASE + 168;
1078 pub const ERROR_INTERNET_SECURITY_CHANNEL_ERROR: DWORD = INTERNET_ERROR_BASE + 157;
1079 pub const ERROR_INTERNET_UNABLE_TO_CACHE_FILE: DWORD = INTERNET_ERROR_BASE + 158;
1080 pub const ERROR_INTERNET_TCPIP_NOT_INSTALLED: DWORD = INTERNET_ERROR_BASE + 159;
1081 pub const ERROR_INTERNET_DISCONNECTED: DWORD = INTERNET_ERROR_BASE + 163;
1082 pub const ERROR_INTERNET_SERVER_UNREACHABLE: DWORD = INTERNET_ERROR_BASE + 164;
1083 pub const ERROR_INTERNET_PROXY_SERVER_UNREACHABLE: DWORD = INTERNET_ERROR_BASE + 165;
1084 pub const ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT: DWORD = INTERNET_ERROR_BASE + 166;
1085 pub const ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT: DWORD = INTERNET_ERROR_BASE + 167;
1086 pub const ERROR_INTERNET_SEC_INVALID_CERT: DWORD = INTERNET_ERROR_BASE + 169;
1087 pub const ERROR_INTERNET_SEC_CERT_REVOKED: DWORD = INTERNET_ERROR_BASE + 170;
1088 pub const ERROR_INTERNET_FAILED_DUETOSECURITYCHECK: DWORD = INTERNET_ERROR_BASE + 171;
1089 pub const ERROR_INTERNET_NOT_INITIALIZED: DWORD = INTERNET_ERROR_BASE + 172;
1090 pub const ERROR_INTERNET_NEED_MSN_SSPI_PKG: DWORD = INTERNET_ERROR_BASE + 173;
1091 pub const ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY: DWORD = INTERNET_ERROR_BASE + 174;
1092 pub const ERROR_INTERNET_DECODING_FAILED: DWORD = INTERNET_ERROR_BASE + 175;
1093 pub const INTERNET_ERROR_LAST: DWORD = ERROR_INTERNET_DECODING_FAILED;
1094 pub const NORMAL_CACHE_ENTRY: DWORD = 0x00000001;
1095 pub const STICKY_CACHE_ENTRY: DWORD = 0x00000004;
1096 pub const EDITED_CACHE_ENTRY: DWORD = 0x00000008;
1097 pub const TRACK_OFFLINE_CACHE_ENTRY: DWORD = 0x00000010;
1098 pub const TRACK_ONLINE_CACHE_ENTRY: DWORD = 0x00000020;
1099 pub const SPARSE_CACHE_ENTRY: DWORD = 0x00010000;
1100 pub const COOKIE_CACHE_ENTRY: DWORD = 0x00100000;
1101 pub const URLHISTORY_CACHE_ENTRY: DWORD = 0x00200000;
1102 pub const URLCACHE_FIND_DEFAULT_FILTER: DWORD = NORMAL_CACHE_ENTRY | COOKIE_CACHE_ENTRY
1103     | URLHISTORY_CACHE_ENTRY | TRACK_OFFLINE_CACHE_ENTRY | TRACK_ONLINE_CACHE_ENTRY
1104     | STICKY_CACHE_ENTRY;
1105 UNION!{union INTERNET_CACHE_ENTRY_INFOA_u {
1106     [u32; 1],
1107     dwReserved dwReserved_mut: DWORD,
1108     dwExemptDelta dwExemptDelta_mut: DWORD,
1109 }}
1110 STRUCT!{struct INTERNET_CACHE_ENTRY_INFOA {
1111     dwStructSize: DWORD,
1112     lpszSourceUrlName: LPSTR,
1113     lpszLocalFileName: LPSTR,
1114     CacheEntryType: DWORD,
1115     dwUseCount: DWORD,
1116     dwHitRate: DWORD,
1117     dwSizeLow: DWORD,
1118     dwSizeHigh: DWORD,
1119     LastModifiedTime: FILETIME,
1120     ExpireTime: FILETIME,
1121     LastAccessTime: FILETIME,
1122     LastSyncTime: FILETIME,
1123     lpHeaderInfo: LPSTR,
1124     dwHeaderInfoSize: DWORD,
1125     lpszFileExtension: LPSTR,
1126     u: INTERNET_CACHE_ENTRY_INFOA_u,
1127 }}
1128 pub type LPINTERNET_CACHE_ENTRY_INFOA = *mut INTERNET_CACHE_ENTRY_INFOA;
1129 UNION!{union INTERNET_CACHE_ENTRY_INFOW_u {
1130     [u32; 1],
1131     dwReserved dwReserved_mut: DWORD,
1132     dwExemptDelta dwExemptDelta_mut: DWORD,
1133 }}
1134 STRUCT!{struct INTERNET_CACHE_ENTRY_INFOW {
1135     dwStructSize: DWORD,
1136     lpszSourceUrlName: LPWSTR,
1137     lpszLocalFileName: LPWSTR,
1138     CacheEntryType: DWORD,
1139     dwUseCount: DWORD,
1140     dwHitRate: DWORD,
1141     dwSizeLow: DWORD,
1142     dwSizeHigh: DWORD,
1143     LastModifiedTime: FILETIME,
1144     ExpireTime: FILETIME,
1145     LastAccessTime: FILETIME,
1146     LastSyncTime: FILETIME,
1147     lpHeaderInfo: LPWSTR,
1148     dwHeaderInfoSize: DWORD,
1149     lpszFileExtension: LPWSTR,
1150     u: INTERNET_CACHE_ENTRY_INFOW_u,
1151 }}
1152 pub type LPINTERNET_CACHE_ENTRY_INFOW = *mut INTERNET_CACHE_ENTRY_INFOW;
1153 STRUCT!{struct INTERNET_CACHE_TIMESTAMPS {
1154     ftExpires: FILETIME,
1155     ftLastModified: FILETIME,
1156 }}
1157 pub type LPINTERNET_CACHE_TIMESTAMPS = *mut INTERNET_CACHE_TIMESTAMPS;
1158 pub type GROUPID = LONGLONG;
1159 pub const CACHEGROUP_ATTRIBUTE_GET_ALL: DWORD = 0xffffffff;
1160 pub const CACHEGROUP_ATTRIBUTE_BASIC: DWORD = 0x00000001;
1161 pub const CACHEGROUP_ATTRIBUTE_FLAG: DWORD = 0x00000002;
1162 pub const CACHEGROUP_ATTRIBUTE_TYPE: DWORD = 0x00000004;
1163 pub const CACHEGROUP_ATTRIBUTE_QUOTA: DWORD = 0x00000008;
1164 pub const CACHEGROUP_ATTRIBUTE_GROUPNAME: DWORD = 0x00000010;
1165 pub const CACHEGROUP_ATTRIBUTE_STORAGE: DWORD = 0x00000020;
1166 pub const CACHEGROUP_FLAG_NONPURGEABLE: DWORD = 0x00000001;
1167 pub const CACHEGROUP_FLAG_GIDONLY: DWORD = 0x00000004;
1168 pub const CACHEGROUP_FLAG_FLUSHURL_ONDELETE: DWORD = 0x00000002;
1169 pub const CACHEGROUP_SEARCH_ALL: DWORD = 0x00000000;
1170 pub const CACHEGROUP_SEARCH_BYURL: DWORD = 0x00000001;
1171 pub const CACHEGROUP_TYPE_INVALID: DWORD = 0x00000001;
1172 pub const CACHEGROUP_READWRITE_MASK: DWORD = CACHEGROUP_ATTRIBUTE_TYPE
1173     | CACHEGROUP_ATTRIBUTE_QUOTA | CACHEGROUP_ATTRIBUTE_GROUPNAME | CACHEGROUP_ATTRIBUTE_STORAGE;
1174 pub const GROUPNAME_MAX_LENGTH: usize = 120;
1175 pub const GROUP_OWNER_STORAGE_SIZE: usize = 4;
1176 STRUCT!{struct INTERNET_CACHE_GROUP_INFOA {
1177     dwGroupSize: DWORD,
1178     dwGroupFlags: DWORD,
1179     dwGroupType: DWORD,
1180     dwDiskUsage: DWORD,
1181     dwDiskQuota: DWORD,
1182     dwOwnerStorage: [DWORD; GROUP_OWNER_STORAGE_SIZE],
1183     szGroupName: [CHAR; GROUPNAME_MAX_LENGTH],
1184 }}
1185 pub type LPINTERNET_CACHE_GROUP_INFOA = *mut INTERNET_CACHE_GROUP_INFOA;
1186 STRUCT!{struct INTERNET_CACHE_GROUP_INFOW {
1187     dwGroupSize: DWORD,
1188     dwGroupFlags: DWORD,
1189     dwGroupType: DWORD,
1190     dwDiskUsage: DWORD,
1191     dwDiskQuota: DWORD,
1192     dwOwnerStorage: [DWORD; GROUP_OWNER_STORAGE_SIZE],
1193     szGroupName: [WCHAR; GROUPNAME_MAX_LENGTH],
1194 }}
1195 pub type LPINTERNET_CACHE_GROUP_INFOW = *mut INTERNET_CACHE_GROUP_INFOW;
1196 pub const CACHE_ENTRY_ATTRIBUTE_FC: DWORD = 0x00000004;
1197 pub const CACHE_ENTRY_HITRATE_FC: DWORD = 0x00000010;
1198 pub const CACHE_ENTRY_MODTIME_FC: DWORD = 0x00000040;
1199 pub const CACHE_ENTRY_EXPTIME_FC: DWORD = 0x00000080;
1200 pub const CACHE_ENTRY_ACCTIME_FC: DWORD = 0x00000100;
1201 pub const CACHE_ENTRY_SYNCTIME_FC: DWORD = 0x00000200;
1202 pub const CACHE_ENTRY_HEADERINFO_FC: DWORD = 0x00000400;
1203 pub const CACHE_ENTRY_EXEMPT_DELTA_FC: DWORD = 0x00000800;
1204 pub const INTERNET_CACHE_GROUP_ADD: DWORD = 0;
1205 pub const INTERNET_CACHE_GROUP_REMOVE: DWORD = 1;
1206 pub const INTERNET_DIAL_FORCE_PROMPT: DWORD = 0x2000;
1207 pub const INTERNET_DIAL_SHOW_OFFLINE: DWORD = 0x4000;
1208 pub const INTERNET_DIAL_UNATTENDED: DWORD = 0x8000;
1209 pub const INTERENT_GOONLINE_REFRESH: DWORD = 0x00000001;
1210 pub const INTERENT_GOONLINE_NOPROMPT: DWORD = 0x00000002;
1211 pub const INTERENT_GOONLINE_MASK: DWORD = 0x00000003;
1212 pub const INTERNET_AUTODIAL_FORCE_ONLINE: DWORD = 1;
1213 pub const INTERNET_AUTODIAL_FORCE_UNATTENDED: DWORD = 2;
1214 pub const INTERNET_AUTODIAL_FAILIFSECURITYCHECK: DWORD = 4;
1215 pub const INTERNET_AUTODIAL_OVERRIDE_NET_PRESENT: DWORD = 8;
1216 pub const INTERNET_AUTODIAL_FLAGS_MASK: DWORD = INTERNET_AUTODIAL_FORCE_ONLINE
1217     | INTERNET_AUTODIAL_FORCE_UNATTENDED | INTERNET_AUTODIAL_FAILIFSECURITYCHECK
1218     | INTERNET_AUTODIAL_OVERRIDE_NET_PRESENT;
1219 pub const PROXY_AUTO_DETECT_TYPE_DHCP: DWORD = 1;
1220 pub const PROXY_AUTO_DETECT_TYPE_DNS_A: DWORD = 2;
1221 STRUCT!{struct AutoProxyHelperVtbl {
1222     IsResolvable: Option<unsafe extern "system" fn(
1223         lpszHost: LPSTR,
1224     ) -> BOOL>,
1225     GetIPAddress: Option<unsafe extern "system" fn(
1226         lpszIPAddress: LPSTR,
1227         lpdwIPAddressSize: LPDWORD,
1228     ) -> DWORD>,
1229     ResolveHostName: Option<unsafe extern "system" fn(
1230         lpszHostName: LPSTR,
1231         lpszIPAddress: LPSTR,
1232         lpdwIPAddressSize: LPDWORD,
1233     ) -> DWORD>,
1234     IsInNet: Option<unsafe extern "system" fn(
1235         lpszIPAddress: LPSTR,
1236         lpszDest: LPSTR,
1237         lpszMask: LPSTR,
1238     ) -> BOOL>,
1239     IsResolvableEx: Option<unsafe extern "system" fn(
1240         lpszHost: LPSTR,
1241     ) -> BOOL>,
1242     GetIPAddressEx: Option<unsafe extern "system" fn(
1243         lpszIPAddress: LPSTR,
1244         lpdwIPAddressSize: LPDWORD,
1245     ) -> DWORD>,
1246     ResolveHostNameEx: Option<unsafe extern "system" fn(
1247         lpszHostName: LPSTR,
1248         lpszIPAddress: LPSTR,
1249         lpdwIPAddressSize: LPDWORD,
1250     ) -> DWORD>,
1251     IsInNetEx: Option<unsafe extern "system" fn(
1252         lpszIPAddress: LPSTR,
1253         lpszIPPrefix: LPSTR,
1254     ) -> BOOL>,
1255     SortIpList: Option<unsafe extern "system" fn(
1256         lpszIPAddressList: LPSTR,
1257         lpszIPSortedList: LPSTR,
1258         lpdwIPSortedListSize: LPDWORD,
1259     ) -> DWORD>,
1260 }}
1261 STRUCT!{struct AUTO_PROXY_SCRIPT_BUFFER {
1262     dwStructSize: DWORD,
1263     lpszScriptBuffer: LPSTR,
1264     dwScriptBufferSize: DWORD,
1265 }}
1266 pub type LPAUTO_PROXY_SCRIPT_BUFFER = *mut AUTO_PROXY_SCRIPT_BUFFER;
1267 STRUCT!{struct AutoProxyHelperFunctions {
1268     lpVtbl: *const AutoProxyHelperVtbl,
1269 }}
1270 FN!{stdcall pfnInternetInitializeAutoProxyDll(
1271     DWORD,
1272     LPSTR,
1273     LPSTR,
1274     *mut AutoProxyHelperFunctions,
1275     LPAUTO_PROXY_SCRIPT_BUFFER,
1276 ) -> BOOL}
1277 FN!{stdcall pfnInternetDeInitializeAutoProxyDll(
1278     LPSTR,
1279     DWORD,
1280 ) -> BOOL}
1281 FN!{stdcall pfnInternetGetProxyInfo(
1282     LPCSTR,
1283     DWORD,
1284     LPSTR,
1285     DWORD,
1286     *mut LPSTR,
1287     LPDWORD,
1288 ) -> BOOL}
1289 ENUM!{enum WPAD_CACHE_DELETE {
1290     WPAD_CACHE_DELETE_CURRENT = 0x0,
1291     WPAD_CACHE_DELETE_ALL = 0x1,
1292 }}
1293 pub const INTERNET_CONNECTION_MODEM: DWORD = 0x01;
1294 pub const INTERNET_CONNECTION_LAN: DWORD = 0x02;
1295 pub const INTERNET_CONNECTION_PROXY: DWORD = 0x04;
1296 pub const INTERNET_CONNECTION_MODEM_BUSY: DWORD = 0x08;
1297 pub const INTERNET_RAS_INSTALLED: DWORD = 0x10;
1298 pub const INTERNET_CONNECTION_OFFLINE: DWORD = 0x20;
1299 pub const INTERNET_CONNECTION_CONFIGURED: DWORD = 0x40;
1300 FN!{stdcall PFN_DIAL_HANDLER(
1301     HWND,
1302     LPCSTR,
1303     DWORD,
1304     LPDWORD,
1305 ) -> DWORD}
1306 pub const INTERNET_CUSTOMDIAL_CONNECT: DWORD = 0;
1307 pub const INTERNET_CUSTOMDIAL_UNATTENDED: DWORD = 1;
1308 pub const INTERNET_CUSTOMDIAL_DISCONNECT: DWORD = 2;
1309 pub const INTERNET_CUSTOMDIAL_SHOWOFFLINE: DWORD = 4;
1310 pub const INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED: DWORD = 1;
1311 pub const INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE: DWORD = 2;
1312 pub const INTERNET_CUSTOMDIAL_CAN_HANGUP: DWORD = 4;
1313 pub const INTERNET_DIALSTATE_DISCONNECTED: DWORD = 1;
1314 pub const INTERNET_IDENTITY_FLAG_PRIVATE_CACHE: DWORD = 0x01;
1315 pub const INTERNET_IDENTITY_FLAG_SHARED_CACHE: DWORD = 0x02;
1316 pub const INTERNET_IDENTITY_FLAG_CLEAR_DATA: DWORD = 0x04;
1317 pub const INTERNET_IDENTITY_FLAG_CLEAR_COOKIES: DWORD = 0x08;
1318 pub const INTERNET_IDENTITY_FLAG_CLEAR_HISTORY: DWORD = 0x10;
1319 pub const INTERNET_IDENTITY_FLAG_CLEAR_CONTENT: DWORD = 0x20;
1320 pub const INTERNET_SUPPRESS_RESET_ALL: DWORD = 0x00;
1321 pub const INTERNET_SUPPRESS_COOKIE_POLICY: DWORD = 0x01;
1322 pub const INTERNET_SUPPRESS_COOKIE_POLICY_RESET: DWORD = 0x02;
1323 pub const PRIVACY_TEMPLATE_NO_COOKIES: DWORD = 0;
1324 pub const PRIVACY_TEMPLATE_HIGH: DWORD = 1;
1325 pub const PRIVACY_TEMPLATE_MEDIUM_HIGH: DWORD = 2;
1326 pub const PRIVACY_TEMPLATE_MEDIUM: DWORD = 3;
1327 pub const PRIVACY_TEMPLATE_MEDIUM_LOW: DWORD = 4;
1328 pub const PRIVACY_TEMPLATE_LOW: DWORD = 5;
1329 pub const PRIVACY_TEMPLATE_CUSTOM: DWORD = 100;
1330 pub const PRIVACY_TEMPLATE_ADVANCED: DWORD = 101;
1331 pub const PRIVACY_TEMPLATE_MAX: DWORD = PRIVACY_TEMPLATE_LOW;
1332 pub const PRIVACY_TYPE_FIRST_PARTY: DWORD = 0;
1333 pub const PRIVACY_TYPE_THIRD_PARTY: DWORD = 1;
1334 extern "system" {
1335     pub fn CommitUrlCacheEntryA(
1336         lpszUrlName: LPCSTR,
1337         lpszLocalFileName: LPCSTR,
1338         ExpireTime: FILETIME,
1339         LastModifiedTime: FILETIME,
1340         CacheEntryType: DWORD,
1341         lpHeaderInfo: LPBYTE,
1342         cchHeaderInfo: DWORD,
1343         lpszFileExtension: LPCSTR,
1344         lpszOriginalUrl: LPCSTR,
1345     ) -> BOOL;
1346     pub fn CommitUrlCacheEntryW(
1347         lpszUrlName: LPCWSTR,
1348         lpszLocalFileName: LPCWSTR,
1349         ExpireTime: FILETIME,
1350         LastModifiedTime: FILETIME,
1351         CacheEntryType: DWORD,
1352         lpszHeaderInfo: LPWSTR,
1353         cchHeaderInfo: DWORD,
1354         lpszFileExtension: LPCWSTR,
1355         lpszOriginalUrl: LPCWSTR,
1356     ) -> BOOL;
1357     pub fn CreateMD5SSOHash (
1358         pszChallengeInfo: PWSTR,
1359         pwszRealm: PWSTR,
1360         pwszTarget: PWSTR,
1361         pbHexHash: PBYTE,
1362     ) -> BOOL;
1363     pub fn CreateUrlCacheEntryA(
1364         lpszUrlName: LPCSTR,
1365         dwExpectedFileSize: DWORD,
1366         lpszFileExtension: LPCSTR,
1367         lpszFileName: LPSTR,
1368         dwReserved: DWORD,
1369     ) -> BOOL;
1370     pub fn CreateUrlCacheEntryW(
1371         lpszUrlName: LPCWSTR,
1372         dwExpectedFileSize: DWORD,
1373         lpszFileExtension: LPCWSTR,
1374         lpszFileName: LPWSTR,
1375         dwReserved: DWORD,
1376     ) -> BOOL;
1377     pub fn CreateUrlCacheGroup(
1378         dwFlags: DWORD,
1379         lpReserved: LPVOID,
1380     ) -> GROUPID;
1381     pub fn DeleteUrlCacheEntryA(
1382         lpszUrlName: LPCSTR,
1383     ) -> BOOL;
1384     pub fn DeleteUrlCacheEntryW(
1385         lpszUrlName: LPCWSTR,
1386     ) -> BOOL;
1387     pub fn DeleteUrlCacheGroup(
1388         GroupId: GROUPID,
1389         dwFlags: DWORD,
1390         lpReserved: LPVOID,
1391     ) -> BOOL;
1392     pub fn DeleteWpadCacheForNetworks(
1393         arg0: WPAD_CACHE_DELETE,
1394     ) -> BOOL;
1395     pub fn DetectAutoProxyUrl(
1396         pszAutoProxyUrl: PSTR,
1397         cchAutoProxyUrl: DWORD,
1398         dwDetectFlags: DWORD,
1399     ) -> BOOL;
1400     pub fn FindCloseUrlCache(
1401         hEnumHandle: HANDLE,
1402     ) -> BOOL;
1403     pub fn FindFirstUrlCacheEntryA(
1404         lpszUrlSearchPattern: LPCSTR,
1405         lpFirstCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
1406         lpcbCacheEntryInfo: LPDWORD,
1407     ) -> HANDLE;
1408     pub fn FindFirstUrlCacheEntryExA(
1409         lpszUrlSearchPattern: LPCSTR,
1410         dwFlags: DWORD,
1411         dwFilter: DWORD,
1412         GroupId: GROUPID,
1413         lpFirstCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
1414         lpcbCacheEntryInfo: LPDWORD,
1415         lpGroupAttributes: LPVOID,
1416         lpcbGroupAttributes: LPDWORD,
1417         lpReserved: LPVOID,
1418     ) -> HANDLE;
1419     pub fn FindFirstUrlCacheEntryExW(
1420         lpszUrlSearchPattern: LPCWSTR,
1421         dwFlags: DWORD,
1422         dwFilter: DWORD,
1423         GroupId: GROUPID,
1424         lpFirstCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
1425         lpcbCacheEntryInfo: LPDWORD,
1426         lpGroupAttributes: LPVOID,
1427         lpcbGroupAttributes: LPDWORD,
1428         lpReserved: LPVOID,
1429     ) -> HANDLE;
1430     pub fn FindFirstUrlCacheEntryW(
1431         lpszUrlSearchPattern: LPCWSTR,
1432         lpFirstCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
1433         lpcbCacheEntryInfo: LPDWORD,
1434     ) -> HANDLE;
1435     pub fn FindFirstUrlCacheGroup(
1436         dwFlags: DWORD,
1437         dwFilter: DWORD,
1438         lpSearchCondition: LPVOID,
1439         dwSearchCondition: DWORD,
1440         lpGroupId: *mut GROUPID,
1441         lpReserved: LPVOID,
1442     ) -> HANDLE;
1443     pub fn FindNextUrlCacheEntryA(
1444         hEnumHandle: HANDLE,
1445         lpNextCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
1446         lpcbCacheEntryInfo: LPDWORD,
1447     ) -> BOOL;
1448     pub fn FindNextUrlCacheEntryExA(
1449         hEnumHandle: HANDLE,
1450         lpNextCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
1451         lpcbCacheEntryInfo: LPDWORD,
1452         lpGroupAttributes: LPVOID,
1453         lpcbGroupAttributes: LPDWORD,
1454         lpReserved: LPVOID,
1455     ) -> BOOL;
1456     pub fn FindNextUrlCacheEntryExW(
1457         hEnumHandle: HANDLE,
1458         lpNextCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
1459         lpcbCacheEntryInfo: LPDWORD,
1460         lpGroupAttributes: LPVOID,
1461         lpcbGroupAttributes: LPDWORD,
1462         lpReserved: LPVOID,
1463     ) -> BOOL;
1464     pub fn FindNextUrlCacheEntryW(
1465         hEnumHandle: HANDLE,
1466         lpNextCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
1467         lpcbCacheEntryInfo: LPDWORD,
1468     ) -> BOOL;
1469     pub fn FindNextUrlCacheGroup(
1470         hFind: HANDLE,
1471         lpGroupId: *mut GROUPID,
1472         lpReserved: LPVOID,
1473     ) -> BOOL;
1474     pub fn FtpCommandA(
1475         hConnect: HINTERNET,
1476         fExpectResponse: BOOL,
1477         dwFlags: DWORD,
1478         lpszCommand: LPCSTR,
1479         dwContext: DWORD_PTR,
1480         phFtpCommand: *mut HINTERNET,
1481     ) -> BOOL;
1482     pub fn FtpCommandW(
1483         hConnect: HINTERNET,
1484         fExpectResponse: BOOL,
1485         dwFlags: DWORD,
1486         lpszCommand: LPCWSTR,
1487         dwContext: DWORD_PTR,
1488         phFtpCommand: *mut HINTERNET,
1489     ) -> BOOL;
1490     pub fn FtpCreateDirectoryA(
1491         hConnect: HINTERNET,
1492         lpszDirectory: LPCSTR,
1493     ) -> BOOL;
1494     pub fn FtpCreateDirectoryW(
1495         hConnect: HINTERNET,
1496         lpszDirectory: LPCWSTR,
1497     ) -> BOOL;
1498     pub fn FtpDeleteFileA(
1499         hConnect: HINTERNET,
1500         lpszFileName: LPCSTR,
1501     ) -> BOOL;
1502     pub fn FtpDeleteFileW(
1503         hConnect: HINTERNET,
1504         lpszFileName: LPCWSTR,
1505     ) -> BOOL;
1506     pub fn FtpFindFirstFileA(
1507         hConnect: HINTERNET,
1508         lpszSearchFile: LPCSTR,
1509         lpFindFileData: LPWIN32_FIND_DATAA,
1510         dwFlags: DWORD,
1511         dwContext: DWORD_PTR,
1512     ) -> HINTERNET;
1513     pub fn FtpFindFirstFileW(
1514         hConnect: HINTERNET,
1515         lpszSearchFile: LPCWSTR,
1516         lpFindFileData: LPWIN32_FIND_DATAW,
1517         dwFlags: DWORD,
1518         dwContext: DWORD_PTR,
1519     ) -> HINTERNET;
1520     pub fn FtpGetCurrentDirectoryA(
1521         hConnect: HINTERNET,
1522         lpszCurrentDirectory: LPSTR,
1523         lpdwCurrentDirectory: LPDWORD,
1524     ) -> BOOL;
1525     pub fn FtpGetCurrentDirectoryW(
1526         hConnect: HINTERNET,
1527         lpszCurrentDirectory: LPWSTR,
1528         lpdwCurrentDirectory: LPDWORD,
1529     ) -> BOOL;
1530     pub fn FtpGetFileA(
1531         hConnect: HINTERNET,
1532         lpszRemoteFile: LPCSTR,
1533         lpszNewFile: LPCSTR,
1534         fFailIfExists: BOOL,
1535         dwFlagsAndAttributes: DWORD,
1536         dwFlags: DWORD,
1537         dwContext: DWORD_PTR,
1538     ) -> BOOL;
1539     pub fn FtpGetFileEx(
1540         hFtpSession: HINTERNET,
1541         lpszRemoteFile: LPCSTR,
1542         lpszNewFile: LPCWSTR,
1543         fFailIfExists: BOOL,
1544         dwFlagsAndAttributes: DWORD,
1545         dwFlags: DWORD,
1546         dwContext: DWORD_PTR,
1547     ) -> BOOL;
1548     pub fn FtpGetFileSize(
1549         hFile: HINTERNET,
1550         lpdwFileSizeHigh: LPDWORD,
1551     ) -> DWORD;
1552     pub fn FtpGetFileW(
1553         hConnect: HINTERNET,
1554         lpszRemoteFile: LPCWSTR,
1555         lpszNewFile: LPCWSTR,
1556         fFailIfExists: BOOL,
1557         dwFlagsAndAttributes: DWORD,
1558         dwFlags: DWORD,
1559         dwContext: DWORD_PTR,
1560     ) -> BOOL;
1561     pub fn FtpOpenFileA(
1562         hConnect: HINTERNET,
1563         lpszFileName: LPCSTR,
1564         dwAccess: DWORD,
1565         dwFlags: DWORD,
1566         dwContext: DWORD_PTR,
1567     ) -> HINTERNET;
1568     pub fn FtpOpenFileW(
1569         hConnect: HINTERNET,
1570         lpszFileName: LPCWSTR,
1571         dwAccess: DWORD,
1572         dwFlags: DWORD,
1573         dwContext: DWORD_PTR,
1574     ) -> HINTERNET;
1575     pub fn FtpPutFileA(
1576         hConnect: HINTERNET,
1577         lpszLocalFile: LPCSTR,
1578         lpszNewRemoteFile: LPCSTR,
1579         dwFlags: DWORD,
1580         dwContext: DWORD_PTR,
1581     ) -> BOOL;
1582     pub fn FtpPutFileEx(
1583         hFtpSession: HINTERNET,
1584         lpszLocalFile: LPCWSTR,
1585         lpszNewRemoteFile: LPCSTR,
1586         dwFlags: DWORD,
1587         dwContext: DWORD_PTR,
1588     ) -> BOOL;
1589     pub fn FtpPutFileW(
1590         hConnect: HINTERNET,
1591         lpszLocalFile: LPCWSTR,
1592         lpszNewRemoteFile: LPCWSTR,
1593         dwFlags: DWORD,
1594         dwContext: DWORD_PTR,
1595     ) -> BOOL;
1596     pub fn FtpRemoveDirectoryA(
1597         hConnect: HINTERNET,
1598         lpszDirectory: LPCSTR,
1599     ) -> BOOL;
1600     pub fn FtpRemoveDirectoryW(
1601         hConnect: HINTERNET,
1602         lpszDirectory: LPCWSTR,
1603     ) -> BOOL;
1604     pub fn FtpRenameFileA(
1605         hConnect: HINTERNET,
1606         lpszExisting: LPCSTR,
1607         lpszNew: LPCSTR,
1608     ) -> BOOL;
1609     pub fn FtpRenameFileW(
1610         hConnect: HINTERNET,
1611         lpszExisting: LPCWSTR,
1612         lpszNew: LPCWSTR,
1613     ) -> BOOL;
1614     pub fn FtpSetCurrentDirectoryA(
1615         hConnect: HINTERNET,
1616         lpszDirectory: LPCSTR,
1617     ) -> BOOL;
1618     pub fn FtpSetCurrentDirectoryW(
1619         hConnect: HINTERNET,
1620         lpszDirectory: LPCWSTR,
1621     ) -> BOOL;
1622     pub fn GetUrlCacheEntryInfoA(
1623         lpszUrlName: LPCSTR,
1624         lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
1625         lpcbCacheEntryInfo: LPDWORD,
1626     ) -> BOOL;
1627     pub fn GetUrlCacheEntryInfoExA(
1628         lpszUrl: LPCSTR,
1629         lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
1630         lpcbCacheEntryInfo: LPDWORD,
1631         lpszRedirectUrl: LPSTR,
1632         lpcbRedirectUrl: LPDWORD,
1633         lpReserved: LPVOID,
1634         dwFlags: DWORD,
1635     ) -> BOOL;
1636     pub fn GetUrlCacheEntryInfoExW(
1637         lpszUrl: LPCWSTR,
1638         lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
1639         lpcbCacheEntryInfo: LPDWORD,
1640         lpszRedirectUrl: LPWSTR,
1641         lpcbRedirectUrl: LPDWORD,
1642         lpReserved: LPVOID,
1643         dwFlags: DWORD,
1644     ) -> BOOL;
1645     pub fn GetUrlCacheEntryInfoW(
1646         lpszUrlName: LPCWSTR,
1647         lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
1648         lpcbCacheEntryInfo: LPDWORD,
1649     ) -> BOOL;
1650     pub fn GetUrlCacheGroupAttributeA(
1651         gid: GROUPID,
1652         dwFlags: DWORD,
1653         dwAttributes: DWORD,
1654         lpGroupInfo: LPINTERNET_CACHE_GROUP_INFOA,
1655         lpcbGroupInfo: LPDWORD,
1656         lpReserved: LPVOID,
1657     ) -> BOOL;
1658     pub fn GetUrlCacheGroupAttributeW(
1659         gid: GROUPID,
1660         dwFlags: DWORD,
1661         dwAttributes: DWORD,
1662         lpGroupInfo: LPINTERNET_CACHE_GROUP_INFOW,
1663         lpcbGroupInfo: LPDWORD,
1664         lpReserved: LPVOID,
1665     ) -> BOOL;
1666     pub fn GopherCreateLocatorA(
1667         lpszHost: LPCSTR,
1668         nServerPort: INTERNET_PORT,
1669         lpszDisplayString: LPCSTR,
1670         lpszSelectorString: LPCSTR,
1671         dwGopherType: DWORD,
1672         lpszLocator: LPSTR,
1673         lpdwBufferLength: LPDWORD,
1674     ) -> BOOL;
1675     pub fn GopherCreateLocatorW(
1676         lpszHost: LPCWSTR,
1677         nServerPort: INTERNET_PORT,
1678         lpszDisplayString: LPCWSTR,
1679         lpszSelectorString: LPCWSTR,
1680         dwGopherType: DWORD,
1681         lpszLocator: LPWSTR,
1682         lpdwBufferLength: LPDWORD,
1683     ) -> BOOL;
1684     pub fn GopherFindFirstFileA(
1685         hConnect: HINTERNET,
1686         lpszLocator: LPCSTR,
1687         lpszSearchString: LPCSTR,
1688         lpFindData: LPGOPHER_FIND_DATAA,
1689         dwFlags: DWORD,
1690         dwContext: DWORD_PTR,
1691     ) -> HINTERNET;
1692     pub fn GopherFindFirstFileW(
1693         hConnect: HINTERNET,
1694         lpszLocator: LPCWSTR,
1695         lpszSearchString: LPCWSTR,
1696         lpFindData: LPGOPHER_FIND_DATAW,
1697         dwFlags: DWORD,
1698         dwContext: DWORD_PTR,
1699     ) -> HINTERNET;
1700     pub fn GopherGetAttributeA(
1701         hConnect: HINTERNET,
1702         lpszLocator: LPCSTR,
1703         lpszAttributeName: LPCSTR,
1704         lpBuffer: LPBYTE,
1705         dwBufferLength: DWORD,
1706         lpdwCharactersReturned: LPDWORD,
1707         lpfnEnumerator: GOPHER_ATTRIBUTE_ENUMERATOR,
1708         dwContext: DWORD_PTR,
1709     ) -> BOOL;
1710     pub fn GopherGetAttributeW(
1711         hConnect: HINTERNET,
1712         lpszLocator: LPCWSTR,
1713         lpszAttributeName: LPCWSTR,
1714         lpBuffer: LPBYTE,
1715         dwBufferLength: DWORD,
1716         lpdwCharactersReturned: LPDWORD,
1717         lpfnEnumerator: GOPHER_ATTRIBUTE_ENUMERATOR,
1718         dwContext: DWORD_PTR,
1719     ) -> BOOL;
1720     pub fn GopherGetLocatorTypeA(
1721         lpszLocator: LPCSTR,
1722         lpdwGopherType: LPDWORD,
1723     ) -> BOOL;
1724     pub fn GopherGetLocatorTypeW(
1725         lpszLocator: LPCWSTR,
1726         lpdwGopherType: LPDWORD,
1727     ) -> BOOL;
1728     pub fn GopherOpenFileA(
1729         hConnect: HINTERNET,
1730         lpszLocator: LPCSTR,
1731         lpszView: LPCSTR,
1732         dwFlags: DWORD,
1733         dwContext: DWORD_PTR,
1734     ) -> HINTERNET;
1735     pub fn GopherOpenFileW(
1736         hConnect: HINTERNET,
1737         lpszLocator: LPCWSTR,
1738         lpszView: LPCWSTR,
1739         dwFlags: DWORD,
1740         dwContext: DWORD_PTR,
1741     ) -> HINTERNET;
1742     pub fn HttpAddRequestHeadersA(
1743         hRequest: HINTERNET,
1744         lpszHeaders: LPCSTR,
1745         dwHeadersLength: DWORD,
1746         dwModifiers: DWORD,
1747     ) -> BOOL;
1748     pub fn HttpAddRequestHeadersW(
1749         hRequest: HINTERNET,
1750         lpszHeaders: LPCWSTR,
1751         dwHeadersLength: DWORD,
1752         dwModifiers: DWORD,
1753     ) -> BOOL;
1754     pub fn HttpEndRequestA(
1755         hRequest: HINTERNET,
1756         lpBuffersOut: LPINTERNET_BUFFERSA,
1757         dwFlags: DWORD,
1758         dwContext: DWORD_PTR,
1759     ) -> BOOL;
1760     pub fn HttpEndRequestW(
1761         hRequest: HINTERNET,
1762         lpBuffersOut: LPINTERNET_BUFFERSW,
1763         dwFlags: DWORD,
1764         dwContext: DWORD_PTR,
1765     ) -> BOOL;
1766     pub fn HttpOpenRequestA(
1767         hConnect: HINTERNET,
1768         lpszVerb: LPCSTR,
1769         lpszObjectName: LPCSTR,
1770         lpszVersion: LPCSTR,
1771         lpszReferrer: LPCSTR,
1772         lplpszAcceptTypes: *mut LPCSTR,
1773         dwFlags: DWORD,
1774         dwContext: DWORD_PTR,
1775     ) -> HINTERNET;
1776     pub fn HttpOpenRequestW(
1777         hConnect: HINTERNET,
1778         lpszVerb: LPCWSTR,
1779         lpszObjectName: LPCWSTR,
1780         lpszVersion: LPCWSTR,
1781         lpszReferrer: LPCWSTR,
1782         lplpszAcceptTypes: *mut LPCWSTR,
1783         dwFlags: DWORD,
1784         dwContext: DWORD_PTR,
1785     ) -> HINTERNET;
1786     pub fn HttpQueryInfoA(
1787         hRequest: HINTERNET,
1788         dwInfoLevel: DWORD,
1789         lpBuffer: LPVOID,
1790         lpdwBufferLength: LPDWORD,
1791         lpdwIndex: LPDWORD,
1792     ) -> BOOL;
1793     pub fn HttpQueryInfoW(
1794         hRequest: HINTERNET,
1795         dwInfoLevel: DWORD,
1796         lpBuffer: LPVOID,
1797         lpdwBufferLength: LPDWORD,
1798         lpdwIndex: LPDWORD,
1799     ) -> BOOL;
1800     pub fn HttpSendRequestA(
1801         hRequest: HINTERNET,
1802         lpszHeaders: LPCSTR,
1803         dwHeadersLength: DWORD,
1804         lpOptional: LPVOID,
1805         dwOptionalLength: DWORD,
1806     ) -> BOOL;
1807     pub fn HttpSendRequestExA(
1808         hRequest: HINTERNET,
1809         lpBuffersIn: LPINTERNET_BUFFERSA,
1810         lpBuffersOut: LPINTERNET_BUFFERSA,
1811         dwFlags: DWORD,
1812         dwContext: DWORD_PTR,
1813     ) -> BOOL;
1814     pub fn HttpSendRequestExW(
1815         hRequest: HINTERNET,
1816         lpBuffersIn: LPINTERNET_BUFFERSW,
1817         lpBuffersOut: LPINTERNET_BUFFERSW,
1818         dwFlags: DWORD,
1819         dwContext: DWORD_PTR,
1820     ) -> BOOL;
1821     pub fn HttpSendRequestW(
1822         hRequest: HINTERNET,
1823         lpszHeaders: LPCWSTR,
1824         dwHeadersLength: DWORD,
1825         lpOptional: LPVOID,
1826         dwOptionalLength: DWORD,
1827     ) -> BOOL;
1828     pub fn InternetAttemptConnect(
1829         dwReserved: DWORD,
1830     ) -> DWORD;
1831     pub fn InternetAutodial(
1832         dwFlags: DWORD,
1833         hwndParent: HWND,
1834     ) -> BOOL;
1835     pub fn InternetAutodialHangup(
1836         dwReserved: DWORD,
1837     ) -> BOOL;
1838     pub fn InternetCanonicalizeUrlA(
1839         lpszUrl: LPCSTR,
1840         lpszBuffer: LPSTR,
1841         lpdwBufferLength: LPDWORD,
1842         dwFlags: DWORD,
1843     ) -> BOOL;
1844     pub fn InternetCanonicalizeUrlW(
1845         lpszUrl: LPCWSTR,
1846         lpszBuffer: LPWSTR,
1847         lpdwBufferLength: LPDWORD,
1848         dwFlags: DWORD,
1849     ) -> BOOL;
1850     pub fn InternetCheckConnectionA(
1851         lpszUrl: LPCSTR,
1852         dwFlags: DWORD,
1853         dwReserved: DWORD,
1854     ) -> BOOL;
1855     pub fn InternetCheckConnectionW(
1856         lpszUrl: LPCWSTR,
1857         dwFlags: DWORD,
1858         dwReserved: DWORD,
1859     ) -> BOOL;
1860     pub fn InternetClearAllPerSiteCookieDecisions() -> BOOL;
1861     pub fn InternetCloseHandle(
1862         hInternet: HINTERNET,
1863     ) -> BOOL;
1864     pub fn InternetCombineUrlA(
1865         lpszBaseUrl: LPCSTR,
1866         lpszRelativeUrl: LPCSTR,
1867         lpszBuffer: LPSTR,
1868         lpdwBufferLength: LPDWORD,
1869         dwFlags: DWORD,
1870     ) -> BOOL;
1871     pub fn InternetCombineUrlW(
1872         lpszBaseUrl: LPCWSTR,
1873         lpszRelativeUrl: LPCWSTR,
1874         lpszBuffer: LPWSTR,
1875         lpdwBufferLength: LPDWORD,
1876         dwFlags: DWORD,
1877     ) -> BOOL;
1878     pub fn InternetConfirmZoneCrossingA(
1879         hWnd: HWND,
1880         szUrlPrev: LPSTR,
1881         szUrlNew: LPSTR,
1882         bPost: BOOL,
1883     ) -> DWORD;
1884     pub fn InternetConfirmZoneCrossingW(
1885         hWnd: HWND,
1886         szUrlPrev: LPWSTR,
1887         szUrlNew: LPWSTR,
1888         bPost: BOOL,
1889     ) -> DWORD;
1890     pub fn InternetConnectA(
1891         hInternet: HINTERNET,
1892         lpszServerName: LPCSTR,
1893         nServerPort: INTERNET_PORT,
1894         lpszUserName: LPCSTR,
1895         lpszPassword: LPCSTR,
1896         dwService: DWORD,
1897         dwFlags: DWORD,
1898         dwContext: DWORD_PTR,
1899     ) -> HINTERNET;
1900     pub fn InternetConnectW(
1901         hInternet: HINTERNET,
1902         lpszServerName: LPCWSTR,
1903         nServerPort: INTERNET_PORT,
1904         lpszUserName: LPCWSTR,
1905         lpszPassword: LPCWSTR,
1906         dwService: DWORD,
1907         dwFlags: DWORD,
1908         dwContext: DWORD_PTR,
1909     ) -> HINTERNET;
1910     pub fn InternetCrackUrlA(
1911         lpszUrl: LPCSTR,
1912         dwUrlLength: DWORD,
1913         dwFlags: DWORD,
1914         lpUrlComponents: LPURL_COMPONENTSA,
1915     ) -> BOOL;
1916     pub fn InternetCrackUrlW(
1917         lpszUrl: LPCWSTR,
1918         dwUrlLength: DWORD,
1919         dwFlags: DWORD,
1920         lpUrlComponents: LPURL_COMPONENTSW,
1921     ) -> BOOL;
1922     pub fn InternetCreateUrlA(
1923         lpUrlComponents: LPURL_COMPONENTSA,
1924         dwFlags: DWORD,
1925         lpszUrl: LPSTR,
1926         lpdwUrlLength: LPDWORD,
1927     ) -> BOOL;
1928     pub fn InternetCreateUrlW(
1929         lpUrlComponents: LPURL_COMPONENTSW,
1930         dwFlags: DWORD,
1931         lpszUrl: LPWSTR,
1932         lpdwUrlLength: LPDWORD,
1933     ) -> BOOL;
1934     pub fn InternetDialA(
1935         hwndParent: HWND,
1936         lpszConnectoid: LPSTR,
1937         dwFlags: DWORD,
1938         lpdwConnection: *mut DWORD_PTR,
1939         dwReserved: DWORD,
1940     ) -> DWORD;
1941     pub fn InternetDialW(
1942         hwndParent: HWND,
1943         lpszConnectoid: LPWSTR,
1944         dwFlags: DWORD,
1945         lpdwConnection: *mut DWORD_PTR,
1946         dwReserved: DWORD,
1947     ) -> DWORD;
1948     pub fn InternetEnumPerSiteCookieDecisionA(
1949         pszSiteName: LPSTR,
1950         pcSiteNameSize: *mut u32,
1951         pdwDecision: *mut u32,
1952         dwIndex: u32,
1953     ) -> BOOL;
1954     pub fn InternetEnumPerSiteCookieDecisionW(
1955         pszSiteName: LPWSTR,
1956         pcSiteNameSize: *mut u32,
1957         pdwDecision: *mut u32,
1958         dwIndex: u32,
1959     ) -> BOOL;
1960     pub fn InternetErrorDlg(
1961         hWnd: HWND,
1962         hRequest: HINTERNET,
1963         dwError: DWORD,
1964         dwFlags: DWORD,
1965         lppvData: *mut LPVOID,
1966     ) -> DWORD;
1967     pub fn InternetFindNextFileA(
1968         hFind: HINTERNET,
1969         lpvFindData: LPVOID,
1970     ) -> BOOL;
1971     pub fn InternetFindNextFileW(
1972         hFind: HINTERNET,
1973         lpvFindData: LPVOID,
1974     ) -> BOOL;
1975     pub fn InternetFreeCookies(
1976         pCookies: *mut INTERNET_COOKIE2,
1977         dwCookieCount: DWORD,
1978     ) -> ();
1979     pub fn InternetGetConnectedState(
1980         lpdwFlags: LPDWORD,
1981         dwReserved: DWORD,
1982     ) -> BOOL;
1983     pub fn InternetGetConnectedStateExA(
1984         lpdwFlags: LPDWORD,
1985         lpszConnectionName: LPSTR,
1986         cchNameLen: DWORD,
1987         dwReserved: DWORD,
1988     ) -> BOOL;
1989     pub fn InternetGetConnectedStateExW(
1990         lpdwFlags: LPDWORD,
1991         lpszConnectionName: LPWSTR,
1992         cchNameLen: DWORD,
1993         dwReserved: DWORD,
1994     ) -> BOOL;
1995     pub fn InternetGetCookieA(
1996         lpszUrl: LPCSTR,
1997         lpszCookieName: LPCSTR,
1998         lpszCookieData: LPSTR,
1999         lpdwSize: LPDWORD,
2000     ) -> BOOL;
2001     pub fn InternetGetCookieEx2(
2002         pcwszUrl: PCWSTR,
2003         pcwszCookieName: PCWSTR,
2004         dwFlags: DWORD,
2005         ppCookies: *mut *mut INTERNET_COOKIE2,
2006         pdwCookieCount: PDWORD,
2007     ) -> DWORD;
2008     pub fn InternetGetCookieExA(
2009         lpszUrl: LPCSTR,
2010         lpszCookieName: LPCSTR,
2011         lpszCookieData: LPSTR,
2012         lpdwSize: LPDWORD,
2013         dwFlags: DWORD,
2014         lpReserved: LPVOID,
2015     ) -> BOOL;
2016     pub fn InternetGetCookieExW(
2017         lpszUrl: LPCWSTR,
2018         lpszCookieName: LPCWSTR,
2019         lpszCookieData: LPWSTR,
2020         lpdwSize: LPDWORD,
2021         dwFlags: DWORD,
2022         lpReserved: LPVOID,
2023     ) -> BOOL;
2024     pub fn InternetGetCookieW(
2025         lpszUrl: LPCWSTR,
2026         lpszCookieName: LPCWSTR,
2027         lpszCookieData: LPWSTR,
2028         lpdwSize: LPDWORD,
2029     ) -> BOOL;
2030     pub fn InternetGetLastResponseInfoA(
2031         lpdwError: LPDWORD,
2032         lpszBuffer: LPSTR,
2033         lpdwBufferLength: LPDWORD,
2034     ) -> BOOL;
2035     pub fn InternetGetLastResponseInfoW(
2036         lpdwError: LPDWORD,
2037         lpszBuffer: LPWSTR,
2038         lpdwBufferLength: LPDWORD,
2039     ) -> BOOL;
2040     pub fn InternetGetPerSiteCookieDecisionA(
2041         pchHostName: LPCSTR,
2042         pResult: *mut u32,
2043     ) -> BOOL;
2044     pub fn InternetGetPerSiteCookieDecisionW(
2045         pchHostName: LPCWSTR,
2046         pResult: *mut u32,
2047     ) -> BOOL;
2048     pub fn InternetGoOnlineA(
2049         lpszURL: LPCSTR,
2050         hwndParent: HWND,
2051         dwFlags: DWORD,
2052     ) -> BOOL;
2053     pub fn InternetGoOnlineW(
2054         lpszURL: LPCWSTR,
2055         hwndParent: HWND,
2056         dwFlags: DWORD,
2057     ) -> BOOL;
2058     pub fn InternetHangUp(
2059         dwConnection: DWORD_PTR,
2060         dwReserved: DWORD,
2061     ) -> DWORD;
2062     pub fn InternetInitializeAutoProxyDll(
2063         dwReserved: DWORD,
2064     ) -> BOOL;
2065     pub fn InternetLockRequestFile(
2066         hInternet: HINTERNET,
2067         lphLockRequestInfo: *mut HANDLE,
2068     ) -> BOOL;
2069     pub fn InternetOpenA(
2070         lpszAgent: LPCSTR,
2071         dwAccessType: DWORD,
2072         lpszProxy: LPCSTR,
2073         lpszProxyBypass: LPCSTR,
2074         dwFlags: DWORD,
2075     ) -> HINTERNET;
2076     pub fn InternetOpenUrlA(
2077         hInternet: HINTERNET,
2078         lpszUrl: LPCSTR,
2079         lpszHeaders: LPCSTR,
2080         dwHeadersLength: DWORD,
2081         dwFlags: DWORD,
2082         dwContext: DWORD_PTR,
2083     ) -> HINTERNET;
2084     pub fn InternetOpenUrlW(
2085         hInternet: HINTERNET,
2086         lpszUrl: LPCWSTR,
2087         lpszHeaders: LPCWSTR,
2088         dwHeadersLength: DWORD,
2089         dwFlags: DWORD,
2090         dwContext: DWORD_PTR,
2091     ) -> HINTERNET;
2092     pub fn InternetOpenW(
2093         lpszAgent: LPCWSTR,
2094         dwAccessType: DWORD,
2095         lpszProxy: LPCWSTR,
2096         lpszProxyBypass: LPCWSTR,
2097         dwFlags: DWORD,
2098     ) -> HINTERNET;
2099     pub fn InternetQueryDataAvailable(
2100         hFile: HINTERNET,
2101         lpdwNumberOfBytesAvailable: LPDWORD,
2102         dwFlags: DWORD,
2103         dwContext: DWORD_PTR,
2104     ) -> BOOL;
2105     pub fn InternetQueryOptionA(
2106         hInternet: HINTERNET,
2107         dwOption: DWORD,
2108         lpBuffer: LPVOID,
2109         lpdwBufferLength: LPDWORD,
2110     ) -> BOOL;
2111     pub fn InternetQueryOptionW(
2112         hInternet: HINTERNET,
2113         dwOption: DWORD,
2114         lpBuffer: LPVOID,
2115         lpdwBufferLength: LPDWORD,
2116     ) -> BOOL;
2117     pub fn InternetReadFile(
2118         hFile: HINTERNET,
2119         lpBuffer: LPVOID,
2120         dwNumberOfBytesToRead: DWORD,
2121         lpdwNumberOfBytesRead: LPDWORD,
2122     ) -> BOOL;
2123     pub fn InternetReadFileExA(
2124         hFile: HINTERNET,
2125         lpBuffersOut: LPINTERNET_BUFFERSA,
2126         dwFlags: DWORD,
2127         dwContext: DWORD_PTR,
2128     ) -> BOOL;
2129     pub fn InternetReadFileExW(
2130         hFile: HINTERNET,
2131         lpBuffersOut: LPINTERNET_BUFFERSW,
2132         dwFlags: DWORD,
2133         dwContext: DWORD_PTR,
2134     ) -> BOOL;
2135     pub fn InternetSetCookieA(
2136         lpszUrl: LPCSTR,
2137         lpszCookieName: LPCSTR,
2138         lpszCookieData: LPCSTR,
2139     ) -> BOOL;
2140     pub fn InternetSetCookieEx2(
2141         pcwszUrl: PCWSTR,
2142         pCookie: *const INTERNET_COOKIE2,
2143         pcwszP3PPolicy: PCWSTR,
2144         dwFlags: DWORD,
2145         pdwCookieState: PDWORD,
2146     ) -> DWORD;
2147     pub fn InternetSetCookieExA(
2148         lpszUrl: LPCSTR,
2149         lpszCookieName: LPCSTR,
2150         lpszCookieData: LPCSTR,
2151         dwFlags: DWORD,
2152         dwReserved: DWORD_PTR,
2153     ) -> DWORD;
2154     pub fn InternetSetCookieExW(
2155         lpszUrl: LPCWSTR,
2156         lpszCookieName: LPCWSTR,
2157         lpszCookieData: LPCWSTR,
2158         dwFlags: DWORD,
2159         dwReserved: DWORD_PTR,
2160     ) -> DWORD;
2161     pub fn InternetSetCookieW(
2162         lpszUrl: LPCWSTR,
2163         lpszCookieName: LPCWSTR,
2164         lpszCookieData: LPCWSTR,
2165     ) -> BOOL;
2166     pub fn InternetSetDialStateA(
2167         lpszConnectoid: LPCSTR,
2168         dwState: DWORD,
2169         dwReserved: DWORD,
2170     ) -> BOOL;
2171     pub fn InternetSetDialStateW(
2172         lpszConnectoid: LPCWSTR,
2173         dwState: DWORD,
2174         dwReserved: DWORD,
2175     ) -> BOOL;
2176     pub fn InternetSetFilePointer(
2177         hFile: HINTERNET,
2178         lDistanceToMove: LONG,
2179         lpDistanceToMoveHigh: PLONG,
2180         dwMoveMethod: DWORD,
2181         dwContext: DWORD_PTR,
2182     ) -> DWORD;
2183     pub fn InternetSetOptionA(
2184         hInternet: HINTERNET,
2185         dwOption: DWORD,
2186         lpBuffer: LPVOID,
2187         dwBufferLength: DWORD,
2188     ) -> BOOL;
2189     pub fn InternetSetOptionExA(
2190         hInternet: HINTERNET,
2191         dwOption: DWORD,
2192         lpBuffer: LPVOID,
2193         dwBufferLength: DWORD,
2194         dwFlags: DWORD,
2195     ) -> BOOL;
2196     pub fn InternetSetOptionExW(
2197         hInternet: HINTERNET,
2198         dwOption: DWORD,
2199         lpBuffer: LPVOID,
2200         dwBufferLength: DWORD,
2201         dwFlags: DWORD,
2202     ) -> BOOL;
2203     pub fn InternetSetOptionW(
2204         hInternet: HINTERNET,
2205         dwOption: DWORD,
2206         lpBuffer: LPVOID,
2207         dwBufferLength: DWORD,
2208     ) -> BOOL;
2209     pub fn InternetSetPerSiteCookieDecisionA(
2210         pchHostName: LPCSTR,
2211         dwDecision: DWORD,
2212     ) -> BOOL;
2213     pub fn InternetSetPerSiteCookieDecisionW(
2214         pchHostName: LPCWSTR,
2215         dwDecision: DWORD,
2216     ) -> BOOL;
2217     pub fn InternetSetStatusCallbackA(
2218         hInternet: HINTERNET,
2219         lpfnInternetCallback: INTERNET_STATUS_CALLBACK,
2220     ) -> INTERNET_STATUS_CALLBACK;
2221     pub fn InternetSetStatusCallbackW(
2222         hInternet: HINTERNET,
2223         lpfnInternetCallback: INTERNET_STATUS_CALLBACK,
2224     ) -> INTERNET_STATUS_CALLBACK;
2225     pub fn InternetTimeFromSystemTimeA(
2226         pst: *const SYSTEMTIME,
2227         dwRFC: DWORD,
2228         lpszTime: LPSTR,
2229         cbTime: DWORD,
2230     ) -> BOOL;
2231     pub fn InternetTimeFromSystemTimeW(
2232         pst: *const SYSTEMTIME,
2233         dwRFC: DWORD,
2234         lpszTime: LPWSTR,
2235         cbTime: DWORD,
2236     ) -> BOOL;
2237     pub fn InternetTimeToSystemTimeA(
2238         lpszTime: LPCSTR,
2239         pst: *mut SYSTEMTIME,
2240         dwReserved: DWORD,
2241     ) -> BOOL;
2242     pub fn InternetTimeToSystemTimeW(
2243         lpszTime: LPCWSTR,
2244         pst: *mut SYSTEMTIME,
2245         dwReserved: DWORD,
2246     ) -> BOOL;
2247     pub fn InternetUnlockRequestFile(
2248         hLockRequestInfo: HANDLE,
2249     ) -> BOOL;
2250     pub fn InternetWriteFile(
2251         hFile: HINTERNET,
2252         lpBuffer: LPCVOID,
2253         dwNumberOfBytesToWrite: DWORD,
2254         lpdwNumberOfBytesWritten: LPDWORD,
2255     ) -> BOOL;
2256     pub fn PrivacyGetZonePreferenceW(
2257         dwZone: DWORD,
2258         dwType: DWORD,
2259         pdwTemplate: LPDWORD,
2260         pszBuffer: LPWSTR,
2261         pdwBufferLength: LPDWORD,
2262     ) -> DWORD;
2263     pub fn PrivacySetZonePreferenceW(
2264         dwZone: DWORD,
2265         dwType: DWORD,
2266         dwTemplate: DWORD,
2267         pszPreference: LPCWSTR,
2268     ) -> DWORD;
2269     pub fn ReadUrlCacheEntryStream(
2270         hUrlCacheStream: HANDLE,
2271         dwLocation: DWORD,
2272         lpBuffer: LPVOID,
2273         lpdwLen: LPDWORD,
2274         Reserved: DWORD,
2275     ) -> BOOL;
2276     pub fn ReadUrlCacheEntryStreamEx(
2277         hUrlCacheStream: HANDLE,
2278         qwLocation: DWORDLONG,
2279         lpBuffer: LPVOID,
2280         lpdwLen: LPDWORD,
2281     ) -> BOOL;
2282     pub fn ResumeSuspendedDownload(
2283         hRequest: HINTERNET,
2284         dwResultCode: DWORD,
2285     ) -> BOOL;
2286     pub fn RetrieveUrlCacheEntryFileA(
2287         lpszUrlName: LPCSTR,
2288         lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
2289         lpcbCacheEntryInfo: LPDWORD,
2290         dwReserved: DWORD,
2291     ) -> BOOL;
2292     pub fn RetrieveUrlCacheEntryFileW(
2293         lpszUrlName: LPCWSTR,
2294         lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
2295         lpcbCacheEntryInfo: LPDWORD,
2296         dwReserved: DWORD,
2297     ) -> BOOL;
2298     pub fn RetrieveUrlCacheEntryStreamA(
2299         lpszUrlName: LPCSTR,
2300         lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
2301         lpcbCacheEntryInfo: LPDWORD,
2302         fRandomRead: BOOL,
2303         dwReserved: DWORD,
2304     ) -> HANDLE;
2305     pub fn RetrieveUrlCacheEntryStreamW(
2306         lpszUrlName: LPCWSTR,
2307         lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
2308         lpcbCacheEntryInfo: LPDWORD,
2309         fRandomRead: BOOL,
2310         dwReserved: DWORD,
2311     ) -> HANDLE;
2312     pub fn SetUrlCacheEntryGroupA(
2313         lpszUrlName: LPCSTR,
2314         dwFlags: DWORD,
2315         GroupId: GROUPID,
2316         pbGroupAttributes: LPBYTE,
2317         cbGroupAttributes: DWORD,
2318         lpReserved: LPVOID,
2319     ) -> BOOL;
2320     pub fn SetUrlCacheEntryGroupW(
2321         lpszUrlName: LPCWSTR,
2322         dwFlags: DWORD,
2323         GroupId: GROUPID,
2324         pbGroupAttributes: LPBYTE,
2325         cbGroupAttributes: DWORD,
2326         lpReserved: LPVOID,
2327     ) -> BOOL;
2328     pub fn SetUrlCacheEntryInfoA(
2329         lpszUrlName: LPCSTR,
2330         lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
2331         dwFieldControl: DWORD,
2332     ) -> BOOL;
2333     pub fn SetUrlCacheEntryInfoW(
2334         lpszUrlName: LPCWSTR,
2335         lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
2336         dwFieldControl: DWORD,
2337     ) -> BOOL;
2338     pub fn SetUrlCacheGroupAttributeA(
2339         gid: GROUPID,
2340         dwFlags: DWORD,
2341         dwAttributes: DWORD,
2342         lpGroupInfo: LPINTERNET_CACHE_GROUP_INFOA,
2343         lpReserved: LPVOID,
2344     ) -> BOOL;
2345     pub fn SetUrlCacheGroupAttributeW(
2346         gid: GROUPID,
2347         dwFlags: DWORD,
2348         dwAttributes: DWORD,
2349         lpGroupInfo: LPINTERNET_CACHE_GROUP_INFOW,
2350         lpReserved: LPVOID,
2351     ) -> BOOL;
2352     pub fn UnlockUrlCacheEntryFileA(
2353         lpszUrlName: LPCSTR,
2354         dwReserved: DWORD,
2355     ) -> BOOL;
2356     pub fn UnlockUrlCacheEntryFileW(
2357         lpszUrlName: LPCWSTR,
2358         dwReserved: DWORD,
2359     ) -> BOOL;
2360     pub fn UnlockUrlCacheEntryStream(
2361         hUrlCacheStream: HANDLE,
2362         Reserved: DWORD,
2363     ) -> BOOL;
2364 }
2365