Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4019 lines
129 KiB

  1. /*++
  2. Copyright (c) 1995-1999 Microsoft Corporation
  3. Module Name:
  4. wininet.h
  5. Abstract:
  6. Contains manifests, macros, types and prototypes for Microsoft Windows
  7. Internet Extensions
  8. --*/
  9. ;begin_internal
  10. #include <iedial.h>
  11. ;end_internal
  12. #if !defined(_WININET_)
  13. #define _WININET_
  14. ;begin_internal
  15. #if !defined(_WININETEX_)
  16. #define _WININETEX_
  17. ;end_internal
  18. /*
  19. * Set up Structure Packing to be 4 bytes
  20. * for all wininet structures
  21. */
  22. #if defined(_WIN64)
  23. #include <pshpack8.h>
  24. #else
  25. #include <pshpack4.h>
  26. #endif
  27. ;begin_both
  28. #if defined(__cplusplus)
  29. extern "C" {
  30. #endif
  31. ;end_both
  32. #if !defined(_WINX32_)
  33. #define INTERNETAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
  34. #define INTERNETAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
  35. #define URLCACHEAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
  36. #define URLCACHEAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
  37. #else
  38. #define INTERNETAPI EXTERN_C HRESULT STDAPICALLTYPE
  39. #define INTERNETAPI_(type) EXTERN_C type STDAPICALLTYPE
  40. #define URLCACHEAPI EXTERN_C HRESULT STDAPICALLTYPE
  41. #define URLCACHEAPI_(type) EXTERN_C type STDAPICALLTYPE
  42. #endif
  43. #define BOOLAPI INTERNETAPI_(BOOL)
  44. //
  45. // internet types
  46. //
  47. typedef LPVOID HINTERNET;
  48. typedef HINTERNET * LPHINTERNET;
  49. typedef WORD INTERNET_PORT;
  50. typedef INTERNET_PORT * LPINTERNET_PORT;
  51. //
  52. // Internet APIs
  53. //
  54. //
  55. // manifests
  56. //
  57. #define INTERNET_INVALID_PORT_NUMBER 0 // use the protocol-specific default
  58. #define INTERNET_DEFAULT_FTP_PORT 21 // default for FTP servers
  59. #define INTERNET_DEFAULT_GOPHER_PORT 70 // " " gopher "
  60. #define INTERNET_DEFAULT_HTTP_PORT 80 // " " HTTP "
  61. #define INTERNET_DEFAULT_HTTPS_PORT 443 // " " HTTPS "
  62. #define INTERNET_DEFAULT_SOCKS_PORT 1080 // default for SOCKS firewall servers.
  63. ;begin_internal
  64. #define MAX_CACHE_ENTRY_INFO_SIZE 4096
  65. ;end_internal
  66. //
  67. // maximum field lengths (arbitrary)
  68. //
  69. #define INTERNET_MAX_HOST_NAME_LENGTH 256
  70. #define INTERNET_MAX_USER_NAME_LENGTH 128
  71. #define INTERNET_MAX_PASSWORD_LENGTH 128
  72. #define INTERNET_MAX_PORT_NUMBER_LENGTH 5 // INTERNET_PORT is unsigned short
  73. #define INTERNET_MAX_PORT_NUMBER_VALUE 65535 // maximum unsigned short value
  74. #define INTERNET_MAX_PATH_LENGTH 2048
  75. #define INTERNET_MAX_SCHEME_LENGTH 32 // longest protocol name length
  76. #define INTERNET_MAX_URL_LENGTH (INTERNET_MAX_SCHEME_LENGTH \
  77. + sizeof("://") \
  78. + INTERNET_MAX_PATH_LENGTH)
  79. //
  80. // values returned by InternetQueryOption() with INTERNET_OPTION_KEEP_CONNECTION:
  81. //
  82. #define INTERNET_KEEP_ALIVE_UNKNOWN ((DWORD)-1)
  83. #define INTERNET_KEEP_ALIVE_ENABLED 1
  84. #define INTERNET_KEEP_ALIVE_DISABLED 0
  85. //
  86. // flags returned by InternetQueryOption() with INTERNET_OPTION_REQUEST_FLAGS
  87. //
  88. #define INTERNET_REQFLAG_FROM_CACHE 0x00000001 // response came from cache
  89. #define INTERNET_REQFLAG_ASYNC 0x00000002 // request was made asynchronously
  90. #define INTERNET_REQFLAG_VIA_PROXY 0x00000004 // request was made via a proxy
  91. #define INTERNET_REQFLAG_NO_HEADERS 0x00000008 // orginal response contained no headers
  92. #define INTERNET_REQFLAG_PASSIVE 0x00000010 // FTP: passive-mode connection
  93. #define INTERNET_REQFLAG_CACHE_WRITE_DISABLED 0x00000040 // HTTPS: this request not cacheable
  94. #define INTERNET_REQFLAG_NET_TIMEOUT 0x00000080 // w/ _FROM_CACHE: net request timed out
  95. //
  96. // flags common to open functions (not InternetOpen()):
  97. //
  98. #define INTERNET_FLAG_RELOAD 0x80000000 // retrieve the original item
  99. //
  100. // flags for InternetOpenUrl():
  101. //
  102. #define INTERNET_FLAG_RAW_DATA 0x40000000 // FTP/gopher find: receive the item as raw (structured) data
  103. #define INTERNET_FLAG_EXISTING_CONNECT 0x20000000 // FTP: use existing InternetConnect handle for server if possible
  104. //
  105. // flags for InternetOpen():
  106. //
  107. #define INTERNET_FLAG_ASYNC 0x10000000 // this request is asynchronous (where supported)
  108. //
  109. // protocol-specific flags:
  110. //
  111. #define INTERNET_FLAG_PASSIVE 0x08000000 // used for FTP connections
  112. //
  113. // additional cache flags
  114. //
  115. #define INTERNET_FLAG_NO_CACHE_WRITE 0x04000000 // don't write this item to the cache
  116. #define INTERNET_FLAG_DONT_CACHE INTERNET_FLAG_NO_CACHE_WRITE
  117. #define INTERNET_FLAG_MAKE_PERSISTENT 0x02000000 // make this item persistent in cache
  118. #define INTERNET_FLAG_FROM_CACHE 0x01000000 // use offline semantics
  119. #define INTERNET_FLAG_OFFLINE INTERNET_FLAG_FROM_CACHE
  120. //
  121. // additional flags
  122. //
  123. #define INTERNET_FLAG_SECURE 0x00800000 // use PCT/SSL if applicable (HTTP)
  124. #define INTERNET_FLAG_KEEP_CONNECTION 0x00400000 // use keep-alive semantics
  125. #define INTERNET_FLAG_NO_AUTO_REDIRECT 0x00200000 // don't handle redirections automatically
  126. #define INTERNET_FLAG_READ_PREFETCH 0x00100000 // do background read prefetch
  127. #define INTERNET_FLAG_NO_COOKIES 0x00080000 // no automatic cookie handling
  128. #define INTERNET_FLAG_NO_AUTH 0x00040000 // no automatic authentication handling
  129. #define INTERNET_FLAG_RESTRICTED_ZONE 0x00020000 // apply restricted zone policies for cookies, auth
  130. #define INTERNET_FLAG_CACHE_IF_NET_FAIL 0x00010000 // return cache file if net request fails
  131. //
  132. // Security Ignore Flags, Allow HttpOpenRequest to overide
  133. // Secure Channel (SSL/PCT) failures of the following types.
  134. //
  135. #define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP 0x00008000 // ex: https:// to http://
  136. #define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS 0x00004000 // ex: http:// to https://
  137. #define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID 0x00002000 // expired X509 Cert.
  138. #define INTERNET_FLAG_IGNORE_CERT_CN_INVALID 0x00001000 // bad common name in X509 Cert.
  139. //
  140. // more caching flags
  141. //
  142. #define INTERNET_FLAG_RESYNCHRONIZE 0x00000800 // asking wininet to update an item if it is newer
  143. #define INTERNET_FLAG_HYPERLINK 0x00000400 // asking wininet to do hyperlinking semantic which works right for scripts
  144. #define INTERNET_FLAG_NO_UI 0x00000200 // no cookie popup
  145. #define INTERNET_FLAG_PRAGMA_NOCACHE 0x00000100 // asking wininet to add "pragma: no-cache"
  146. #define INTERNET_FLAG_CACHE_ASYNC 0x00000080 // ok to perform lazy cache-write
  147. #define INTERNET_FLAG_FORMS_SUBMIT 0x00000040 // this is a forms submit
  148. #define INTERNET_FLAG_FWD_BACK 0x00000020 // fwd-back button op
  149. ;begin_internal
  150. ;end_internal
  151. #define INTERNET_FLAG_NEED_FILE 0x00000010 // need a file for this request
  152. #define INTERNET_FLAG_MUST_CACHE_REQUEST INTERNET_FLAG_NEED_FILE
  153. ;begin_internal
  154. #define INTERNET_FLAG_BGUPDATE 0x00000008
  155. #define INTERNET_FLAG_UNUSED_4 0x00000004
  156. ;end_internal
  157. //
  158. // flags for FTP
  159. //
  160. #define INTERNET_FLAG_TRANSFER_ASCII FTP_TRANSFER_TYPE_ASCII // 0x00000001
  161. #define INTERNET_FLAG_TRANSFER_BINARY FTP_TRANSFER_TYPE_BINARY // 0x00000002
  162. //
  163. // flags field masks
  164. //
  165. #define SECURITY_INTERNET_MASK (INTERNET_FLAG_IGNORE_CERT_CN_INVALID | \
  166. INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | \
  167. INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS | \
  168. INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP )
  169. #define INTERNET_FLAGS_MASK (INTERNET_FLAG_RELOAD \
  170. | INTERNET_FLAG_RAW_DATA \
  171. | INTERNET_FLAG_EXISTING_CONNECT \
  172. | INTERNET_FLAG_ASYNC \
  173. | INTERNET_FLAG_PASSIVE \
  174. | INTERNET_FLAG_NO_CACHE_WRITE \
  175. | INTERNET_FLAG_MAKE_PERSISTENT \
  176. | INTERNET_FLAG_FROM_CACHE \
  177. | INTERNET_FLAG_SECURE \
  178. | INTERNET_FLAG_KEEP_CONNECTION \
  179. | INTERNET_FLAG_NO_AUTO_REDIRECT \
  180. | INTERNET_FLAG_READ_PREFETCH \
  181. | INTERNET_FLAG_NO_COOKIES \
  182. | INTERNET_FLAG_NO_AUTH \
  183. | INTERNET_FLAG_CACHE_IF_NET_FAIL \
  184. | SECURITY_INTERNET_MASK \
  185. | INTERNET_FLAG_RESYNCHRONIZE \
  186. | INTERNET_FLAG_HYPERLINK \
  187. | INTERNET_FLAG_NO_UI \
  188. | INTERNET_FLAG_PRAGMA_NOCACHE \
  189. | INTERNET_FLAG_CACHE_ASYNC \
  190. | INTERNET_FLAG_FORMS_SUBMIT \
  191. | INTERNET_FLAG_NEED_FILE \
  192. | INTERNET_FLAG_RESTRICTED_ZONE \
  193. | INTERNET_FLAG_TRANSFER_BINARY \
  194. | INTERNET_FLAG_TRANSFER_ASCII \
  195. | INTERNET_FLAG_FWD_BACK \
  196. | INTERNET_FLAG_BGUPDATE \
  197. )
  198. #define INTERNET_ERROR_MASK_INSERT_CDROM 0x1
  199. #define INTERNET_ERROR_MASK_COMBINED_SEC_CERT 0x2
  200. #define INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG 0X4
  201. #define INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY 0x8
  202. #define INTERNET_OPTIONS_MASK (~INTERNET_FLAGS_MASK)
  203. //
  204. // common per-API flags (new APIs)
  205. //
  206. #define WININET_API_FLAG_ASYNC 0x00000001 // force async operation
  207. #define WININET_API_FLAG_SYNC 0x00000004 // force sync operation
  208. #define WININET_API_FLAG_USE_CONTEXT 0x00000008 // use value supplied in dwContext (even if 0)
  209. //
  210. // INTERNET_NO_CALLBACK - if this value is presented as the dwContext parameter
  211. // then no call-backs will be made for that API
  212. //
  213. #define INTERNET_NO_CALLBACK 0
  214. //
  215. // structures/types
  216. //
  217. //
  218. // INTERNET_SCHEME - enumerated URL scheme type
  219. //
  220. typedef enum {
  221. INTERNET_SCHEME_PARTIAL = -2,
  222. INTERNET_SCHEME_UNKNOWN = -1,
  223. INTERNET_SCHEME_DEFAULT = 0,
  224. INTERNET_SCHEME_FTP,
  225. INTERNET_SCHEME_GOPHER,
  226. INTERNET_SCHEME_HTTP,
  227. INTERNET_SCHEME_HTTPS,
  228. INTERNET_SCHEME_FILE,
  229. INTERNET_SCHEME_NEWS,
  230. INTERNET_SCHEME_MAILTO,
  231. INTERNET_SCHEME_SOCKS,
  232. INTERNET_SCHEME_JAVASCRIPT,
  233. INTERNET_SCHEME_VBSCRIPT,
  234. INTERNET_SCHEME_RES,
  235. INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP,
  236. INTERNET_SCHEME_LAST = INTERNET_SCHEME_RES
  237. } INTERNET_SCHEME, * LPINTERNET_SCHEME;
  238. //
  239. // INTERNET_ASYNC_RESULT - this structure is returned to the application via
  240. // the callback with INTERNET_STATUS_REQUEST_COMPLETE. It is not sufficient to
  241. // just return the result of the async operation. If the API failed then the
  242. // app cannot call GetLastError() because the thread context will be incorrect.
  243. // Both the value returned by the async API and any resultant error code are
  244. // made available. The app need not check dwError if dwResult indicates that
  245. // the API succeeded (in this case dwError will be ERROR_SUCCESS)
  246. //
  247. typedef struct {
  248. //
  249. // dwResult - the HINTERNET, DWORD or BOOL return code from an async API
  250. //
  251. DWORD_PTR dwResult;
  252. //
  253. // dwError - the error code if the API failed
  254. //
  255. DWORD dwError;
  256. } INTERNET_ASYNC_RESULT, * LPINTERNET_ASYNC_RESULT;
  257. ;begin_internal
  258. //
  259. // INTERNET_PREFETCH_STATUS -
  260. //
  261. typedef struct {
  262. //
  263. // dwStatus - status of download. See INTERNET_PREFETCH_ flags
  264. //
  265. DWORD dwStatus;
  266. //
  267. // dwSize - size of file downloaded so far
  268. //
  269. DWORD dwSize;
  270. } INTERNET_PREFETCH_STATUS, * LPINTERNET_PREFETCH_STATUS;
  271. //
  272. // INTERNET_PREFETCH_STATUS - dwStatus values
  273. //
  274. #define INTERNET_PREFETCH_PROGRESS 0
  275. #define INTERNET_PREFETCH_COMPLETE 1
  276. #define INTERNET_PREFETCH_ABORTED 2
  277. ;end_internal
  278. //
  279. // INTERNET_DIAGNOSTIC_SOCKET_INFO - info about the socket in use
  280. //
  281. typedef struct {
  282. DWORD_PTR Socket;
  283. DWORD SourcePort;
  284. DWORD DestPort;
  285. DWORD Flags;
  286. } INTERNET_DIAGNOSTIC_SOCKET_INFO, * LPINTERNET_DIAGNOSTIC_SOCKET_INFO;
  287. //
  288. // INTERNET_DIAGNOSTIC_SOCKET_INFO.Flags definitions
  289. //
  290. #define IDSI_FLAG_KEEP_ALIVE 0x00000001 // set if from keep-alive pool
  291. #define IDSI_FLAG_SECURE 0x00000002 // set if secure connection
  292. #define IDSI_FLAG_PROXY 0x00000004 // set if using proxy
  293. #define IDSI_FLAG_TUNNEL 0x00000008 // set if tunnelling through proxy
  294. //
  295. // INTERNET_PROXY_INFO - structure supplied with INTERNET_OPTION_PROXY to get/
  296. // set proxy information on a InternetOpen() handle
  297. //
  298. typedef struct {
  299. //
  300. // dwAccessType - INTERNET_OPEN_TYPE_DIRECT, INTERNET_OPEN_TYPE_PROXY, or
  301. // INTERNET_OPEN_TYPE_PRECONFIG (set only)
  302. //
  303. DWORD dwAccessType;
  304. //
  305. // lpszProxy - proxy server list
  306. //
  307. LPCTSTR lpszProxy;
  308. //
  309. // lpszProxyBypass - proxy bypass list
  310. //
  311. LPCTSTR lpszProxyBypass;
  312. } INTERNET_PROXY_INFO, * LPINTERNET_PROXY_INFO;
  313. //
  314. // INTERNET_PER_CONN_OPTION_LIST - set per-connection options such as proxy
  315. // and autoconfig info
  316. //
  317. // Set and queried using Internet[Set|Query]Option with
  318. // INTERNET_OPTION_PER_CONNECTION_OPTION
  319. //
  320. typedef struct {
  321. DWORD dwOption; // option to be queried or set
  322. union {
  323. DWORD dwValue; // dword value for the option
  324. LPTSTR% pszValue; // pointer to string value for the option
  325. FILETIME ftValue; // file-time value for the option
  326. } Value;
  327. } INTERNET_PER_CONN_OPTION%, * LPINTERNET_PER_CONN_OPTION%;
  328. typedef struct {
  329. DWORD dwSize; // size of the INTERNET_PER_CONN_OPTION_LIST struct
  330. LPTSTR% pszConnection; // connection name to set/query options
  331. DWORD dwOptionCount; // number of options to set/query
  332. DWORD dwOptionError; // on error, which option failed
  333. LPINTERNET_PER_CONN_OPTION% pOptions;
  334. // array of options to set/query
  335. } INTERNET_PER_CONN_OPTION_LIST%, * LPINTERNET_PER_CONN_OPTION_LIST%;
  336. //
  337. // Options used in INTERNET_PER_CONN_OPTON struct
  338. //
  339. #define INTERNET_PER_CONN_FLAGS 1
  340. #define INTERNET_PER_CONN_PROXY_SERVER 2
  341. #define INTERNET_PER_CONN_PROXY_BYPASS 3
  342. #define INTERNET_PER_CONN_AUTOCONFIG_URL 4
  343. #define INTERNET_PER_CONN_AUTODISCOVERY_FLAGS 5
  344. #define INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL 6
  345. #define INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS 7
  346. #define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME 8
  347. #define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_URL 9
  348. //
  349. // PER_CONN_FLAGS
  350. //
  351. #define PROXY_TYPE_DIRECT 0x00000001 // direct to net
  352. #define PROXY_TYPE_PROXY 0x00000002 // via named proxy
  353. #define PROXY_TYPE_AUTO_PROXY_URL 0x00000004 // autoproxy URL
  354. #define PROXY_TYPE_AUTO_DETECT 0x00000008 // use autoproxy detection
  355. //
  356. // PER_CONN_AUTODISCOVERY_FLAGS
  357. //
  358. #define AUTO_PROXY_FLAG_USER_SET 0x00000001 // user changed this setting
  359. #define AUTO_PROXY_FLAG_ALWAYS_DETECT 0x00000002 // force detection even when its not needed
  360. #define AUTO_PROXY_FLAG_DETECTION_RUN 0x00000004 // detection has been run
  361. #define AUTO_PROXY_FLAG_MIGRATED 0x00000008 // migration has just been done
  362. #define AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT 0x00000010 // don't cache result of host=proxy name
  363. #define AUTO_PROXY_FLAG_CACHE_INIT_RUN 0x00000020 // don't initalize and run unless URL expired
  364. #define AUTO_PROXY_FLAG_DETECTION_SUSPECT 0x00000040 // if we're on a LAN & Modem, with only one IP, bad?!?
  365. //
  366. // INTERNET_VERSION_INFO - version information returned via
  367. // InternetQueryOption(..., INTERNET_OPTION_VERSION, ...)
  368. //
  369. typedef struct {
  370. DWORD dwMajorVersion;
  371. DWORD dwMinorVersion;
  372. } INTERNET_VERSION_INFO, * LPINTERNET_VERSION_INFO;
  373. //
  374. // HTTP_VERSION_INFO - query or set global HTTP version (1.0 or 1.1)
  375. //
  376. typedef struct {
  377. DWORD dwMajorVersion;
  378. DWORD dwMinorVersion;
  379. } HTTP_VERSION_INFO, * LPHTTP_VERSION_INFO;
  380. //
  381. // INTERNET_CONNECTED_INFO - information used to set the global connected state
  382. //
  383. typedef struct {
  384. //
  385. // dwConnectedState - new connected/disconnected state.
  386. // See INTERNET_STATE_CONNECTED, etc.
  387. //
  388. DWORD dwConnectedState;
  389. //
  390. // dwFlags - flags controlling connected->disconnected (or disconnected->
  391. // connected) transition. See below
  392. //
  393. DWORD dwFlags;
  394. } INTERNET_CONNECTED_INFO, * LPINTERNET_CONNECTED_INFO;
  395. ;begin_internal
  396. #define INTERNET_ONLINE_OFFLINE_INFO INTERNET_CONNECTED_INFO
  397. #define LPINTERNET_ONLINE_OFFLINE_INFO LPINTERNET_CONNECTED_INFO
  398. #define dwOfflineState dwConnectedState
  399. ;end_internal
  400. //
  401. // flags for INTERNET_CONNECTED_INFO dwFlags
  402. //
  403. //
  404. // ISO_FORCE_DISCONNECTED - if set when putting Wininet into disconnected mode,
  405. // all outstanding requests will be aborted with a cancelled error
  406. //
  407. #define ISO_FORCE_DISCONNECTED 0x00000001
  408. ;begin_internal
  409. #define ISO_FORCE_OFFLINE ISO_FORCE_DISCONNECTED
  410. ;end_internal
  411. //
  412. // URL_COMPONENTS - the constituent parts of an URL. Used in InternetCrackUrl()
  413. // and InternetCreateUrl()
  414. //
  415. // For InternetCrackUrl(), if a pointer field and its corresponding length field
  416. // are both 0 then that component is not returned. If the pointer field is NULL
  417. // but the length field is not zero, then both the pointer and length fields are
  418. // returned if both pointer and corresponding length fields are non-zero then
  419. // the pointer field points to a buffer where the component is copied. The
  420. // component may be un-escaped, depending on dwFlags
  421. //
  422. // For InternetCreateUrl(), the pointer fields should be NULL if the component
  423. // is not required. If the corresponding length field is zero then the pointer
  424. // field is the address of a zero-terminated string. If the length field is not
  425. // zero then it is the string length of the corresponding pointer field
  426. //
  427. #pragma warning( disable : 4121 ) // disable alignment warning
  428. typedef struct {
  429. DWORD dwStructSize; // size of this structure. Used in version check
  430. LPTSTR% lpszScheme; // pointer to scheme name
  431. DWORD dwSchemeLength; // length of scheme name
  432. INTERNET_SCHEME nScheme; // enumerated scheme type (if known)
  433. LPTSTR% lpszHostName; // pointer to host name
  434. DWORD dwHostNameLength; // length of host name
  435. INTERNET_PORT nPort; // converted port number
  436. LPTSTR% lpszUserName; // pointer to user name
  437. DWORD dwUserNameLength; // length of user name
  438. LPTSTR% lpszPassword; // pointer to password
  439. DWORD dwPasswordLength; // length of password
  440. LPTSTR% lpszUrlPath; // pointer to URL-path
  441. DWORD dwUrlPathLength; // length of URL-path
  442. LPTSTR% lpszExtraInfo; // pointer to extra information (e.g. ?foo or #foo)
  443. DWORD dwExtraInfoLength; // length of extra information
  444. } URL_COMPONENTS%, * LPURL_COMPONENTS%;
  445. #pragma warning( default : 4121 ) // restore alignment warning
  446. //
  447. // INTERNET_CERTIFICATE_INFO lpBuffer - contains the certificate returned from
  448. // the server
  449. //
  450. typedef struct {
  451. //
  452. // ftExpiry - date the certificate expires.
  453. //
  454. FILETIME ftExpiry;
  455. //
  456. // ftStart - date the certificate becomes valid.
  457. //
  458. FILETIME ftStart;
  459. //
  460. // lpszSubjectInfo - the name of organization, site, and server
  461. // the cert. was issued for.
  462. //
  463. LPTSTR lpszSubjectInfo;
  464. //
  465. // lpszIssuerInfo - the name of orgainzation, site, and server
  466. // the cert was issues by.
  467. //
  468. LPTSTR lpszIssuerInfo;
  469. //
  470. // lpszProtocolName - the name of the protocol used to provide the secure
  471. // connection.
  472. //
  473. LPTSTR lpszProtocolName;
  474. //
  475. // lpszSignatureAlgName - the name of the algorithm used for signing
  476. // the certificate.
  477. //
  478. LPTSTR lpszSignatureAlgName;
  479. //
  480. // lpszEncryptionAlgName - the name of the algorithm used for
  481. // doing encryption over the secure channel (SSL/PCT) connection.
  482. //
  483. LPTSTR lpszEncryptionAlgName;
  484. //
  485. // dwKeySize - size of the key.
  486. //
  487. DWORD dwKeySize;
  488. } INTERNET_CERTIFICATE_INFO, * LPINTERNET_CERTIFICATE_INFO;
  489. ;begin_internal
  490. #ifdef __WINCRYPT_H__
  491. #ifdef ALGIDDEF
  492. //
  493. // INTERNET_SECURITY_INFO - contains information about certificate
  494. // and encryption settings for a connection.
  495. //
  496. #define INTERNET_SECURITY_INFO_DEFINED
  497. typedef struct {
  498. //
  499. // dwSize - Size of INTERNET_SECURITY_INFO structure.
  500. //
  501. DWORD dwSize;
  502. //
  503. // pCertificate - Cert context pointing to leaf of certificate chain.
  504. //
  505. PCCERT_CONTEXT pCertificate;
  506. //
  507. // Start SecPkgContext_ConnectionInfo
  508. // The following members must match those
  509. // of the SecPkgContext_ConnectionInfo
  510. // sspi structure (schnlsp.h)
  511. //
  512. //
  513. // dwProtocol - Protocol that this connection was made with
  514. // (PCT, SSL2, SSL3, etc)
  515. //
  516. DWORD dwProtocol;
  517. //
  518. // aiCipher - Cipher that this connection as made with
  519. //
  520. ALG_ID aiCipher;
  521. //
  522. // dwCipherStrength - Strength (in bits) that this connection
  523. // was made with;
  524. //
  525. DWORD dwCipherStrength;
  526. //
  527. // aiHash - Hash that this connection as made with
  528. //
  529. ALG_ID aiHash;
  530. //
  531. // dwHashStrength - Strength (in bits) that this connection
  532. // was made with;
  533. //
  534. DWORD dwHashStrength;
  535. //
  536. // aiExch - Key Exchange type that this connection as made with
  537. //
  538. ALG_ID aiExch;
  539. //
  540. // dwExchStrength - Strength (in bits) that this connection
  541. // was made with;
  542. //
  543. DWORD dwExchStrength;
  544. } INTERNET_SECURITY_INFO, * LPINTERNET_SECURITY_INFO;
  545. typedef struct {
  546. //
  547. // dwSize - size of INTERNET_SECURITY_CONNECTION_INFO
  548. //
  549. DWORD dwSize;
  550. // fSecure - Is this a secure connection.
  551. BOOL fSecure;
  552. //
  553. // dwProtocol - Protocol that this connection was made with
  554. // (PCT, SSL2, SSL3, etc)
  555. //
  556. DWORD dwProtocol;
  557. //
  558. // aiCipher - Cipher that this connection as made with
  559. //
  560. ALG_ID aiCipher;
  561. //
  562. // dwCipherStrength - Strength (in bits) that this connection
  563. // was made with;
  564. //
  565. DWORD dwCipherStrength;
  566. //
  567. // aiHash - Hash that this connection as made with
  568. //
  569. ALG_ID aiHash;
  570. //
  571. // dwHashStrength - Strength (in bits) that this connection
  572. // was made with;
  573. //
  574. DWORD dwHashStrength;
  575. //
  576. // aiExch - Key Exchange type that this connection as made with
  577. //
  578. ALG_ID aiExch;
  579. //
  580. // dwExchStrength - Strength (in bits) that this connection
  581. // was made with;
  582. //
  583. DWORD dwExchStrength;
  584. } INTERNET_SECURITY_CONNECTION_INFO , * LPINTERNET_SECURITY_CONNECTION_INFO;
  585. INTERNETAPI_(BOOL) InternetAlgIdToString%(
  586. IN ALG_ID ai,
  587. IN LPTSTR% lpstr,
  588. IN OUT LPDWORD lpdwBufferLength,
  589. IN DWORD dwReserved
  590. );
  591. INTERNETAPI_(BOOL) InternetSecurityProtocolToString%(
  592. IN DWORD dwProtocol,
  593. IN LPTSTR% lpstr,
  594. IN OUT LPDWORD lpdwBufferLength,
  595. IN DWORD dwReserved
  596. );
  597. #endif // ALGIDDEF
  598. #endif // __WINCRYPT_H__
  599. #ifdef INTERNET_SECURITY_INFO_DEFINED
  600. INTERNETAPI_(DWORD) ShowSecurityInfo(
  601. IN HWND hWndParent,
  602. IN LPINTERNET_SECURITY_INFO pSecurityInfo
  603. );
  604. #endif // INTERNET_SECURITY_INFO_DEFINED
  605. INTERNETAPI_(DWORD) ShowX509EncodedCertificate(
  606. IN HWND hWndParent,
  607. IN LPBYTE lpCert,
  608. IN DWORD cbCert
  609. );
  610. INTERNETAPI_(DWORD) ShowClientAuthCerts(
  611. IN HWND hWndParent
  612. );
  613. INTERNETAPI_(DWORD) ParseX509EncodedCertificateForListBoxEntry(
  614. IN LPBYTE lpCert,
  615. IN DWORD cbCert,
  616. OUT LPSTR lpszListBoxEntry,
  617. IN LPDWORD lpdwListBoxEntry
  618. );
  619. //
  620. // This is a private API for Trident. It displays
  621. // security info based on a URL
  622. //
  623. INTERNETAPI_(BOOL) InternetShowSecurityInfoByURLA(
  624. IN LPSTR lpszURL,
  625. IN HWND hwndParent
  626. );
  627. INTERNETAPI_(BOOL) InternetShowSecurityInfoByURLW(
  628. IN LPWSTR lpszURL,
  629. IN HWND hwndParent
  630. );
  631. #ifdef UNICODE
  632. #define InternetShowSecurityInfoByURL InternetShowSecurityInfoByURLW
  633. #else
  634. #ifdef _WINX32_
  635. #define InternetShowSecurityInfoByURL InternetShowSecurityInfoByURLA
  636. #else
  637. INTERNETAPI_(BOOL) InternetShowSecurityInfoByURL(
  638. IN LPSTR lpszURL,
  639. IN HWND hwndParent
  640. );
  641. #endif // _WINX32_
  642. #endif // !UNICODE
  643. //Fortezza related exports. not public
  644. // The commands that InternetFortezzaCommand supports.
  645. typedef enum {
  646. FORTCMD_LOGON = 1,
  647. FORTCMD_LOGOFF = 2,
  648. FORTCMD_CHG_PERSONALITY = 3,
  649. } FORTCMD;
  650. INTERNETAPI_(BOOL) InternetFortezzaCommand(DWORD dwCommand, HWND hwnd, DWORD_PTR dwReserved);
  651. typedef enum {
  652. FORTSTAT_INSTALLED = 0x00000001,
  653. FORTSTAT_LOGGEDON = 0x00000002,
  654. } FORTSTAT ;
  655. INTERNETAPI_(BOOL) InternetQueryFortezzaStatus(DWORD *pdwStatus, DWORD_PTR dwReserved);
  656. ;end_internal
  657. //
  658. // INTERNET_BUFFERS - combines headers and data. May be chained for e.g. file
  659. // upload or scatter/gather operations. For chunked read/write, lpcszHeader
  660. // contains the chunked-ext
  661. //
  662. typedef struct _INTERNET_BUFFERS% {
  663. DWORD dwStructSize; // used for API versioning. Set to sizeof(INTERNET_BUFFERS)
  664. struct _INTERNET_BUFFERS% * Next; // chain of buffers
  665. LPCTSTR% lpcszHeader; // pointer to headers (may be NULL)
  666. DWORD dwHeadersLength; // length of headers if not NULL
  667. DWORD dwHeadersTotal; // size of headers if not enough buffer
  668. LPVOID lpvBuffer; // pointer to data buffer (may be NULL)
  669. DWORD dwBufferLength; // length of data buffer if not NULL
  670. DWORD dwBufferTotal; // total size of chunk, or content-length if not chunked
  671. DWORD dwOffsetLow; // used for read-ranges (only used in HttpSendRequest2)
  672. DWORD dwOffsetHigh;
  673. } INTERNET_BUFFERS%, * LPINTERNET_BUFFERS%;
  674. //
  675. // prototypes
  676. //
  677. BOOLAPI InternetTimeFromSystemTimeA(
  678. IN CONST SYSTEMTIME *pst, // input GMT time
  679. IN DWORD dwRFC, // RFC format
  680. OUT LPSTR lpszTime, // output string buffer
  681. IN DWORD cbTime // output buffer size
  682. );
  683. BOOLAPI InternetTimeFromSystemTimeW(
  684. IN CONST SYSTEMTIME *pst, // input GMT time
  685. IN DWORD dwRFC, // RFC format
  686. OUT LPWSTR lpszTime, // output string buffer
  687. IN DWORD cbTime // output buffer size
  688. );
  689. #ifdef UNICODE
  690. #define InternetTimeFromSystemTime InternetTimeFromSystemTimeW
  691. #else
  692. #ifdef _WINX32_
  693. #define InternetTimeFromSystemTime InternetTimeFromSystemTimeA
  694. #else
  695. BOOLAPI InternetTimeFromSystemTime(
  696. IN CONST SYSTEMTIME *pst, // input GMT time
  697. IN DWORD dwRFC, // RFC format
  698. OUT LPSTR lpszTime, // output string buffer
  699. IN DWORD cbTime // output buffer size
  700. );
  701. #endif // _WINX32_
  702. #endif // !UNICODE
  703. //
  704. // constants for InternetTimeFromSystemTime
  705. //
  706. #define INTERNET_RFC1123_FORMAT 0
  707. #define INTERNET_RFC1123_BUFSIZE 30
  708. BOOLAPI InternetTimeToSystemTimeA(
  709. IN LPCSTR lpszTime, // NULL terminated string
  710. OUT SYSTEMTIME *pst, // output in GMT time
  711. IN DWORD dwReserved
  712. );
  713. BOOLAPI InternetTimeToSystemTimeW(
  714. IN LPCWSTR lpszTime, // NULL terminated string
  715. OUT SYSTEMTIME *pst, // output in GMT time
  716. IN DWORD dwReserved
  717. );
  718. #ifdef UNICODE
  719. #define InternetTimeToSystemTime InternetTimeToSystemTimeW
  720. #else
  721. #ifdef _WINX32_
  722. #define InternetTimeToSystemTime InternetTimeToSystemTimeA
  723. #else
  724. BOOLAPI InternetTimeToSystemTime(
  725. IN LPCSTR lpszTime, // NULL terminated string
  726. OUT SYSTEMTIME *pst, // output in GMT time
  727. IN DWORD dwReserved
  728. );
  729. #endif // _WINX32_
  730. #endif // !UNICODE
  731. ;begin_internal
  732. BOOLAPI InternetDebugGetLocalTime(
  733. OUT SYSTEMTIME * pstLocalTime,
  734. OUT DWORD * pdwReserved
  735. );
  736. ;end_internal
  737. BOOLAPI InternetCrackUrl%(
  738. IN LPCTSTR% lpszUrl,
  739. IN DWORD dwUrlLength,
  740. IN DWORD dwFlags,
  741. IN OUT LPURL_COMPONENTS% lpUrlComponents
  742. );
  743. BOOLAPI InternetCreateUrl%(
  744. IN LPURL_COMPONENTS% lpUrlComponents,
  745. IN DWORD dwFlags,
  746. OUT LPTSTR% lpszUrl,
  747. IN OUT LPDWORD lpdwUrlLength
  748. );
  749. BOOLAPI InternetCanonicalizeUrl%(
  750. IN LPCTSTR% lpszUrl,
  751. OUT LPTSTR% lpszBuffer,
  752. IN OUT LPDWORD lpdwBufferLength,
  753. IN DWORD dwFlags
  754. );
  755. BOOLAPI InternetCombineUrl%(
  756. IN LPCTSTR% lpszBaseUrl,
  757. IN LPCTSTR% lpszRelativeUrl,
  758. OUT LPTSTR% lpszBuffer,
  759. IN OUT LPDWORD lpdwBufferLength,
  760. IN DWORD dwFlags
  761. );
  762. //
  763. // flags for InternetCrackUrl() and InternetCreateUrl()
  764. //
  765. #define ICU_ESCAPE 0x80000000 // (un)escape URL characters
  766. #define ICU_USERNAME 0x40000000 // use internal username & password
  767. ;begin_internal
  768. // causes InternetCreateUrlA to escape chars in authority components (user, pwd, host)
  769. #define ICU_ESCAPE_AUTHORITY 0x00002000
  770. ;end_internal
  771. //
  772. // flags for InternetCanonicalizeUrl() and InternetCombineUrl()
  773. //
  774. #define ICU_NO_ENCODE 0x20000000 // Don't convert unsafe characters to escape sequence
  775. #define ICU_DECODE 0x10000000 // Convert %XX escape sequences to characters
  776. #define ICU_NO_META 0x08000000 // Don't convert .. etc. meta path sequences
  777. #define ICU_ENCODE_SPACES_ONLY 0x04000000 // Encode spaces only
  778. #define ICU_BROWSER_MODE 0x02000000 // Special encode/decode rules for browser
  779. #define ICU_ENCODE_PERCENT 0x00001000 // Encode any percent (ASCII25)
  780. // signs encountered, default is to not encode percent.
  781. INTERNETAPI_(HINTERNET) InternetOpen%(
  782. IN LPCTSTR% lpszAgent,
  783. IN DWORD dwAccessType,
  784. IN LPCTSTR% lpszProxy OPTIONAL,
  785. IN LPCTSTR% lpszProxyBypass OPTIONAL,
  786. IN DWORD dwFlags
  787. );
  788. //
  789. // access types for InternetOpen()
  790. //
  791. #define INTERNET_OPEN_TYPE_PRECONFIG 0 // use registry configuration
  792. #define INTERNET_OPEN_TYPE_DIRECT 1 // direct to net
  793. #define INTERNET_OPEN_TYPE_PROXY 3 // via named proxy
  794. #define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 // prevent using java/script/INS
  795. //
  796. // old names for access types
  797. //
  798. #define PRE_CONFIG_INTERNET_ACCESS INTERNET_OPEN_TYPE_PRECONFIG
  799. #define LOCAL_INTERNET_ACCESS INTERNET_OPEN_TYPE_DIRECT
  800. #define CERN_PROXY_INTERNET_ACCESS INTERNET_OPEN_TYPE_PROXY
  801. BOOLAPI InternetCloseHandle(
  802. IN HINTERNET hInternet
  803. );
  804. INTERNETAPI_(HINTERNET) InternetConnect%(
  805. IN HINTERNET hInternet,
  806. IN LPCTSTR% lpszServerName,
  807. IN INTERNET_PORT nServerPort,
  808. IN LPCTSTR% lpszUserName OPTIONAL,
  809. IN LPCTSTR% lpszPassword OPTIONAL,
  810. IN DWORD dwService,
  811. IN DWORD dwFlags,
  812. IN DWORD_PTR dwContext
  813. );
  814. //
  815. // service types for InternetConnect()
  816. //
  817. ;begin_internal
  818. #define INTERNET_SERVICE_URL 0
  819. ;end_internal
  820. #define INTERNET_SERVICE_FTP 1
  821. #define INTERNET_SERVICE_GOPHER 2
  822. #define INTERNET_SERVICE_HTTP 3
  823. ;begin_internal
  824. //
  825. // InternetConnectUrl() - a macro which allows you to specify an URL instead of
  826. // the component parts to InternetConnect(). If any API which uses the returned
  827. // connect handle specifies a NULL path then the URL-path part of the URL
  828. // specified in InternetConnectUrl() will be used
  829. //
  830. #define InternetConnectUrl(hInternet, lpszUrl, dwFlags, dwContext) \
  831. InternetConnect(hInternet, \
  832. lpszUrl, \
  833. INTERNET_INVALID_PORT_NUMBER, \
  834. NULL, \
  835. NULL, \
  836. INTERNET_SERVICE_URL, \
  837. dwFlags, \
  838. dwContext \
  839. )
  840. ;end_internal
  841. INTERNETAPI_(HINTERNET) InternetOpenUrl%(
  842. IN HINTERNET hInternet,
  843. IN LPCTSTR% lpszUrl,
  844. IN LPCTSTR% lpszHeaders OPTIONAL,
  845. IN DWORD dwHeadersLength,
  846. IN DWORD dwFlags,
  847. IN DWORD_PTR dwContext
  848. );
  849. BOOLAPI InternetReadFile(
  850. IN HINTERNET hFile,
  851. IN LPVOID lpBuffer,
  852. IN DWORD dwNumberOfBytesToRead,
  853. OUT LPDWORD lpdwNumberOfBytesRead
  854. );
  855. INTERNETAPI_(BOOL) InternetReadFileEx%(
  856. IN HINTERNET hFile,
  857. OUT LPINTERNET_BUFFERS% lpBuffersOut,
  858. IN DWORD dwFlags,
  859. IN DWORD_PTR dwContext
  860. );
  861. //
  862. // flags for InternetReadFileEx()
  863. //
  864. #define IRF_ASYNC WININET_API_FLAG_ASYNC
  865. #define IRF_SYNC WININET_API_FLAG_SYNC
  866. #define IRF_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT
  867. #define IRF_NO_WAIT 0x00000008
  868. INTERNETAPI_(DWORD) InternetSetFilePointer(
  869. IN HINTERNET hFile,
  870. IN LONG lDistanceToMove,
  871. IN PVOID pReserved,
  872. IN DWORD dwMoveMethod,
  873. IN DWORD_PTR dwContext
  874. );
  875. BOOLAPI InternetWriteFile(
  876. IN HINTERNET hFile,
  877. IN LPCVOID lpBuffer,
  878. IN DWORD dwNumberOfBytesToWrite,
  879. OUT LPDWORD lpdwNumberOfBytesWritten
  880. );
  881. ;begin_internal
  882. INTERNETAPI_(BOOL) InternetWriteFileEx%(
  883. IN HINTERNET hFile,
  884. IN LPINTERNET_BUFFERS% lpBuffersIn,
  885. IN DWORD dwFlags,
  886. IN DWORD_PTR dwContext
  887. );
  888. ;end_internal
  889. BOOLAPI InternetQueryDataAvailable(
  890. IN HINTERNET hFile,
  891. OUT LPDWORD lpdwNumberOfBytesAvailable OPTIONAL,
  892. IN DWORD dwFlags,
  893. IN DWORD_PTR dwContext
  894. );
  895. BOOLAPI InternetFindNextFile%(
  896. IN HINTERNET hFind,
  897. OUT LPVOID lpvFindData
  898. );
  899. BOOLAPI InternetQueryOption%(
  900. IN HINTERNET hInternet OPTIONAL,
  901. IN DWORD dwOption,
  902. OUT LPVOID lpBuffer OPTIONAL,
  903. IN OUT LPDWORD lpdwBufferLength
  904. );
  905. BOOLAPI InternetSetOption%(
  906. IN HINTERNET hInternet OPTIONAL,
  907. IN DWORD dwOption,
  908. IN LPVOID lpBuffer,
  909. IN DWORD dwBufferLength
  910. );
  911. BOOLAPI InternetSetOptionEx%(
  912. IN HINTERNET hInternet OPTIONAL,
  913. IN DWORD dwOption,
  914. IN LPVOID lpBuffer,
  915. IN DWORD dwBufferLength,
  916. IN DWORD dwFlags
  917. );
  918. BOOLAPI InternetLockRequestFile(
  919. IN HINTERNET hInternet,
  920. OUT HANDLE * lphLockRequestInfo
  921. );
  922. BOOLAPI InternetUnlockRequestFile(
  923. IN HANDLE hLockRequestInfo
  924. );
  925. //
  926. // flags for InternetSetOptionEx()
  927. //
  928. #define ISO_GLOBAL 0x00000001 // modify option globally
  929. #define ISO_REGISTRY 0x00000002 // write option to registry (where applicable)
  930. #define ISO_VALID_FLAGS (ISO_GLOBAL | ISO_REGISTRY)
  931. //
  932. // options manifests for Internet{Query|Set}Option
  933. //
  934. #define INTERNET_OPTION_CALLBACK 1
  935. #define INTERNET_OPTION_CONNECT_TIMEOUT 2
  936. #define INTERNET_OPTION_CONNECT_RETRIES 3
  937. #define INTERNET_OPTION_CONNECT_BACKOFF 4
  938. #define INTERNET_OPTION_SEND_TIMEOUT 5
  939. #define INTERNET_OPTION_CONTROL_SEND_TIMEOUT INTERNET_OPTION_SEND_TIMEOUT
  940. #define INTERNET_OPTION_RECEIVE_TIMEOUT 6
  941. #define INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT INTERNET_OPTION_RECEIVE_TIMEOUT
  942. #define INTERNET_OPTION_DATA_SEND_TIMEOUT 7
  943. #define INTERNET_OPTION_DATA_RECEIVE_TIMEOUT 8
  944. #define INTERNET_OPTION_HANDLE_TYPE 9
  945. ;begin_internal
  946. #define INTERNET_OPTION_CONTEXT_VALUE_OLD 10
  947. ;end_internal
  948. #define INTERNET_OPTION_LISTEN_TIMEOUT 11
  949. #define INTERNET_OPTION_READ_BUFFER_SIZE 12
  950. #define INTERNET_OPTION_WRITE_BUFFER_SIZE 13
  951. #define INTERNET_OPTION_ASYNC_ID 15
  952. #define INTERNET_OPTION_ASYNC_PRIORITY 16
  953. #define INTERNET_OPTION_PARENT_HANDLE 21
  954. #define INTERNET_OPTION_KEEP_CONNECTION 22
  955. #define INTERNET_OPTION_REQUEST_FLAGS 23
  956. #define INTERNET_OPTION_EXTENDED_ERROR 24
  957. #define INTERNET_OPTION_OFFLINE_MODE 26
  958. #define INTERNET_OPTION_CACHE_STREAM_HANDLE 27
  959. #define INTERNET_OPTION_USERNAME 28
  960. #define INTERNET_OPTION_PASSWORD 29
  961. #define INTERNET_OPTION_ASYNC 30
  962. #define INTERNET_OPTION_SECURITY_FLAGS 31
  963. #define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT 32
  964. #define INTERNET_OPTION_DATAFILE_NAME 33
  965. #define INTERNET_OPTION_URL 34
  966. #define INTERNET_OPTION_SECURITY_CERTIFICATE 35
  967. #define INTERNET_OPTION_SECURITY_KEY_BITNESS 36
  968. #define INTERNET_OPTION_REFRESH 37
  969. #define INTERNET_OPTION_PROXY 38
  970. #define INTERNET_OPTION_SETTINGS_CHANGED 39
  971. #define INTERNET_OPTION_VERSION 40
  972. #define INTERNET_OPTION_USER_AGENT 41
  973. #define INTERNET_OPTION_END_BROWSER_SESSION 42
  974. #define INTERNET_OPTION_PROXY_USERNAME 43
  975. #define INTERNET_OPTION_PROXY_PASSWORD 44
  976. #define INTERNET_OPTION_CONTEXT_VALUE 45
  977. #define INTERNET_OPTION_CONNECT_LIMIT 46
  978. #define INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT 47
  979. #define INTERNET_OPTION_POLICY 48
  980. #define INTERNET_OPTION_DISCONNECTED_TIMEOUT 49
  981. #define INTERNET_OPTION_CONNECTED_STATE 50
  982. #define INTERNET_OPTION_IDLE_STATE 51
  983. #define INTERNET_OPTION_OFFLINE_SEMANTICS 52
  984. #define INTERNET_OPTION_SECONDARY_CACHE_KEY 53
  985. #define INTERNET_OPTION_CALLBACK_FILTER 54
  986. #define INTERNET_OPTION_CONNECT_TIME 55
  987. #define INTERNET_OPTION_SEND_THROUGHPUT 56
  988. #define INTERNET_OPTION_RECEIVE_THROUGHPUT 57
  989. #define INTERNET_OPTION_REQUEST_PRIORITY 58
  990. #define INTERNET_OPTION_HTTP_VERSION 59
  991. #define INTERNET_OPTION_RESET_URLCACHE_SESSION 60
  992. ;begin_internal
  993. #define INTERNET_OPTION_NET_SPEED 61
  994. ;end_internal
  995. #define INTERNET_OPTION_ERROR_MASK 62
  996. #define INTERNET_OPTION_FROM_CACHE_TIMEOUT 63
  997. #define INTERNET_OPTION_BYPASS_EDITED_ENTRY 64
  998. ;begin_internal
  999. // Pass in pointer to INTERNET_SECURITY_CONNECTION_INFO to be filled in.
  1000. #define INTERNET_OPTION_SECURITY_CONNECTION_INFO 66
  1001. ;end_internal
  1002. #define INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO 67
  1003. #define INTERNET_OPTION_CODEPAGE 68
  1004. #define INTERNET_OPTION_CACHE_TIMESTAMPS 69
  1005. #define INTERNET_OPTION_DISABLE_AUTODIAL 70
  1006. ;begin_internal
  1007. #define INTERNET_OPTION_DETECT_POST_SEND 71
  1008. #define INTERNET_OPTION_DISABLE_NTLM_PREAUTH 72
  1009. ;end_internal
  1010. #define INTERNET_OPTION_MAX_CONNS_PER_SERVER 73
  1011. #define INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER 74
  1012. #define INTERNET_OPTION_PER_CONNECTION_OPTION 75
  1013. #define INTERNET_OPTION_DIGEST_AUTH_UNLOAD 76
  1014. #define INTERNET_OPTION_IGNORE_OFFLINE 77
  1015. #define INTERNET_OPTION_IDENTITY 78
  1016. #define INTERNET_OPTION_REMOVE_IDENTITY 79
  1017. #define INTERNET_OPTION_ALTER_IDENTITY 80
  1018. #define INTERNET_OPTION_SUPPRESS_BEHAVIOR 81
  1019. #define INTERNET_OPTION_AUTODIAL_MODE 82
  1020. #define INTERNET_OPTION_AUTODIAL_CONNECTION 83
  1021. #define INTERNET_OPTION_CLIENT_CERT_CONTEXT 84
  1022. #define INTERNET_OPTION_AUTH_FLAGS 85
  1023. #define INTERNET_OPTION_COOKIES_3RD_PARTY 86
  1024. #define INTERNET_OPTION_DISABLE_PASSPORT_AUTH 87
  1025. #define INTERNET_OPTION_SEND_UTF8_SERVERNAME_TO_PROXY 88
  1026. #define INTERNET_OPTION_EXEMPT_CONNECTION_LIMIT 89
  1027. #define INTERNET_OPTION_ENABLE_PASSPORT_AUTH 90
  1028. #define INTERNET_OPTION_HIBERNATE_INACTIVE_WORKER_THREADS 91
  1029. #define INTERNET_OPTION_ACTIVATE_WORKER_THREADS 92
  1030. #define INTERNET_OPTION_RESTORE_WORKER_THREAD_DEFAULTS 93
  1031. #define INTERNET_OPTION_SOCKET_SEND_BUFFER_LENGTH 94
  1032. #define INTERNET_OPTION_PROXY_SETTINGS_CHANGED 95
  1033. #define INTERNET_FIRST_OPTION INTERNET_OPTION_CALLBACK
  1034. #define INTERNET_LAST_OPTION INTERNET_OPTION_PROXY_SETTINGS_CHANGED
  1035. ;begin_internal
  1036. #define INTERNET_LAST_OPTION_INTERNAL INTERNET_OPTION_PROXY_SETTINGS_CHANGED
  1037. ;end_internal
  1038. ;begin_internal
  1039. #define INTERNET_OPTION_OFFLINE_TIMEOUT INTERNET_OPTION_DISCONNECTED_TIMEOUT
  1040. #define INTERNET_OPTION_LINE_STATE INTERNET_OPTION_CONNECTED_STATE
  1041. ;end_internal
  1042. //
  1043. // values for INTERNET_OPTION_PRIORITY
  1044. //
  1045. #define INTERNET_PRIORITY_FOREGROUND 1000
  1046. //
  1047. // handle types
  1048. //
  1049. #define INTERNET_HANDLE_TYPE_INTERNET 1
  1050. #define INTERNET_HANDLE_TYPE_CONNECT_FTP 2
  1051. #define INTERNET_HANDLE_TYPE_CONNECT_GOPHER 3
  1052. #define INTERNET_HANDLE_TYPE_CONNECT_HTTP 4
  1053. #define INTERNET_HANDLE_TYPE_FTP_FIND 5
  1054. #define INTERNET_HANDLE_TYPE_FTP_FIND_HTML 6
  1055. #define INTERNET_HANDLE_TYPE_FTP_FILE 7
  1056. #define INTERNET_HANDLE_TYPE_FTP_FILE_HTML 8
  1057. #define INTERNET_HANDLE_TYPE_GOPHER_FIND 9
  1058. #define INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML 10
  1059. #define INTERNET_HANDLE_TYPE_GOPHER_FILE 11
  1060. #define INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML 12
  1061. #define INTERNET_HANDLE_TYPE_HTTP_REQUEST 13
  1062. #define INTERNET_HANDLE_TYPE_FILE_REQUEST 14
  1063. //
  1064. // values for INTERNET_OPTION_AUTH_FLAGS
  1065. //
  1066. ;begin_internal
  1067. #define AUTH_FLAG_RESET 0x00000000 /* let registry decide */
  1068. ;end_internal
  1069. #define AUTH_FLAG_DISABLE_NEGOTIATE 0x00000001
  1070. #define AUTH_FLAG_ENABLE_NEGOTIATE 0x00000002
  1071. //
  1072. // values for INTERNET_OPTION_SECURITY_FLAGS
  1073. //
  1074. // query only
  1075. #define SECURITY_FLAG_SECURE 0x00000001 // can query only
  1076. #define SECURITY_FLAG_STRENGTH_WEAK 0x10000000
  1077. #define SECURITY_FLAG_STRENGTH_MEDIUM 0x40000000
  1078. #define SECURITY_FLAG_STRENGTH_STRONG 0x20000000
  1079. #define SECURITY_FLAG_UNKNOWNBIT 0x80000000
  1080. #define SECURITY_FLAG_FORTEZZA 0x08000000
  1081. #define SECURITY_FLAG_NORMALBITNESS SECURITY_FLAG_STRENGTH_WEAK
  1082. // The following are unused
  1083. #define SECURITY_FLAG_SSL 0x00000002
  1084. #define SECURITY_FLAG_SSL3 0x00000004
  1085. #define SECURITY_FLAG_PCT 0x00000008
  1086. #define SECURITY_FLAG_PCT4 0x00000010
  1087. #define SECURITY_FLAG_IETFSSL4 0x00000020
  1088. // The following are for backwards compatability only.
  1089. #define SECURITY_FLAG_40BIT SECURITY_FLAG_STRENGTH_WEAK
  1090. #define SECURITY_FLAG_128BIT SECURITY_FLAG_STRENGTH_STRONG
  1091. #define SECURITY_FLAG_56BIT SECURITY_FLAG_STRENGTH_MEDIUM
  1092. // setable flags
  1093. #define SECURITY_FLAG_IGNORE_REVOCATION 0x00000080
  1094. #define SECURITY_FLAG_IGNORE_UNKNOWN_CA 0x00000100
  1095. #define SECURITY_FLAG_IGNORE_WRONG_USAGE 0x00000200
  1096. #define SECURITY_FLAG_IGNORE_CERT_CN_INVALID INTERNET_FLAG_IGNORE_CERT_CN_INVALID
  1097. #define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
  1098. #define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS
  1099. #define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP
  1100. #define SECURITY_SET_MASK (SECURITY_FLAG_IGNORE_REVOCATION |\
  1101. SECURITY_FLAG_IGNORE_UNKNOWN_CA |\
  1102. SECURITY_FLAG_IGNORE_CERT_CN_INVALID |\
  1103. SECURITY_FLAG_IGNORE_CERT_DATE_INVALID |\
  1104. SECURITY_FLAG_IGNORE_WRONG_USAGE)
  1105. // valid autodial modes
  1106. #define AUTODIAL_MODE_NEVER 1
  1107. #define AUTODIAL_MODE_ALWAYS 2
  1108. #define AUTODIAL_MODE_NO_NETWORK_PRESENT 4
  1109. BOOLAPI InternetGetLastResponseInfo%(
  1110. OUT LPDWORD lpdwError,
  1111. OUT LPTSTR% lpszBuffer OPTIONAL,
  1112. IN OUT LPDWORD lpdwBufferLength
  1113. );
  1114. //
  1115. // callback function for InternetSetStatusCallback
  1116. //
  1117. typedef
  1118. VOID
  1119. (CALLBACK * INTERNET_STATUS_CALLBACK)(
  1120. IN HINTERNET hInternet,
  1121. IN DWORD_PTR dwContext,
  1122. IN DWORD dwInternetStatus,
  1123. IN LPVOID lpvStatusInformation OPTIONAL,
  1124. IN DWORD dwStatusInformationLength
  1125. );
  1126. typedef INTERNET_STATUS_CALLBACK * LPINTERNET_STATUS_CALLBACK;
  1127. INTERNETAPI_(INTERNET_STATUS_CALLBACK) InternetSetStatusCallbackA(
  1128. IN HINTERNET hInternet,
  1129. IN INTERNET_STATUS_CALLBACK lpfnInternetCallback
  1130. );
  1131. INTERNETAPI_(INTERNET_STATUS_CALLBACK) InternetSetStatusCallbackW(
  1132. IN HINTERNET hInternet,
  1133. IN INTERNET_STATUS_CALLBACK lpfnInternetCallback
  1134. );
  1135. #ifdef UNICODE
  1136. #define InternetSetStatusCallback InternetSetStatusCallbackW
  1137. #else
  1138. #ifdef _WINX32_
  1139. #define InternetSetStatusCallback InternetSetStatusCallbackA
  1140. #else
  1141. INTERNETAPI_(INTERNET_STATUS_CALLBACK) InternetSetStatusCallback(
  1142. IN HINTERNET hInternet,
  1143. IN INTERNET_STATUS_CALLBACK lpfnInternetCallback
  1144. );
  1145. #endif // _WINX32_
  1146. #endif // !UNICODE
  1147. //
  1148. // status manifests for Internet status callback
  1149. //
  1150. #define INTERNET_STATUS_RESOLVING_NAME 10
  1151. #define INTERNET_STATUS_NAME_RESOLVED 11
  1152. #define INTERNET_STATUS_CONNECTING_TO_SERVER 20
  1153. #define INTERNET_STATUS_CONNECTED_TO_SERVER 21
  1154. #define INTERNET_STATUS_SENDING_REQUEST 30
  1155. #define INTERNET_STATUS_REQUEST_SENT 31
  1156. #define INTERNET_STATUS_RECEIVING_RESPONSE 40
  1157. #define INTERNET_STATUS_RESPONSE_RECEIVED 41
  1158. #define INTERNET_STATUS_CTL_RESPONSE_RECEIVED 42
  1159. #define INTERNET_STATUS_PREFETCH 43
  1160. #define INTERNET_STATUS_CLOSING_CONNECTION 50
  1161. #define INTERNET_STATUS_CONNECTION_CLOSED 51
  1162. #define INTERNET_STATUS_HANDLE_CREATED 60
  1163. #define INTERNET_STATUS_HANDLE_CLOSING 70
  1164. #define INTERNET_STATUS_DETECTING_PROXY 80
  1165. #define INTERNET_STATUS_REQUEST_COMPLETE 100
  1166. #define INTERNET_STATUS_REDIRECT 110
  1167. #define INTERNET_STATUS_INTERMEDIATE_RESPONSE 120
  1168. #define INTERNET_STATUS_USER_INPUT_REQUIRED 140
  1169. #define INTERNET_STATUS_STATE_CHANGE 200
  1170. #define INTERNET_STATUS_COOKIE_SENT 320
  1171. #define INTERNET_STATUS_COOKIE_RECEIVED 321
  1172. #define INTERNET_STATUS_PRIVACY_IMPACTED 324
  1173. #define INTERNET_STATUS_P3P_HEADER 325
  1174. #define INTERNET_STATUS_P3P_POLICYREF 326
  1175. #define INTERNET_STATUS_COOKIE_HISTORY 327
  1176. //
  1177. // the following can be indicated in a state change notification:
  1178. //
  1179. #define INTERNET_STATE_CONNECTED 0x00000001 // connected state (mutually exclusive with disconnected)
  1180. #define INTERNET_STATE_DISCONNECTED 0x00000002 // disconnected from network
  1181. #define INTERNET_STATE_DISCONNECTED_BY_USER 0x00000010 // disconnected by user request
  1182. #define INTERNET_STATE_IDLE 0x00000100 // no network requests being made (by Wininet)
  1183. #define INTERNET_STATE_BUSY 0x00000200 // network requests being made (by Wininet)
  1184. //
  1185. // the following values are used for cookie state:
  1186. //
  1187. typedef enum {
  1188. COOKIE_STATE_UNKNOWN = 0x0,
  1189. COOKIE_STATE_ACCEPT = 0x1,
  1190. COOKIE_STATE_PROMPT = 0x2,
  1191. COOKIE_STATE_LEASH = 0x3,
  1192. COOKIE_STATE_DOWNGRADE = 0x4,
  1193. COOKIE_STATE_REJECT = 0x5,
  1194. COOKIE_STATE_MAX = COOKIE_STATE_REJECT,
  1195. }
  1196. InternetCookieState;
  1197. typedef struct {
  1198. int cSession; // Session cookies received
  1199. int cPersistent; // Persistent cookies received
  1200. int cAccepted; // Number of cookies accepted
  1201. int cLeashed; // ... leashed
  1202. int cDowngraded; // ... converted to session-cookies
  1203. int cBlocked; // ... rejected
  1204. const char *pszLocation; // Optional: URL associated with reported cookie events
  1205. // This can be used to override request URL
  1206. }
  1207. IncomingCookieState;
  1208. typedef struct {
  1209. int cSent;
  1210. int cSuppressed;
  1211. const char *pszLocation; // Optional: URL associated with reported cookie events
  1212. // This can be used to override request URL
  1213. }
  1214. OutgoingCookieState;
  1215. typedef struct {
  1216. BOOL fAccepted;
  1217. BOOL fLeashed;
  1218. BOOL fDowngraded;
  1219. BOOL fRejected;
  1220. }
  1221. InternetCookieHistory;
  1222. typedef struct {
  1223. DWORD dwCookieState;
  1224. BOOL fAllowSession;
  1225. }
  1226. CookieDecision;
  1227. ;begin_internal
  1228. /* maximum length of privacy-settings in Unicode characters */
  1229. #define MaxPrivacySettings 0x4000
  1230. // Utility for mapping P3P compact-policy tokens to unique indexes
  1231. INTERNETAPI_(int) FindP3PPolicySymbol(const char *pszSymbol);
  1232. ;end_internal
  1233. ;begin_internal
  1234. #define INTERNET_STATE_ONLINE INTERNET_STATE_CONNECTED
  1235. #define INTERNET_STATE_OFFLINE INTERNET_STATE_DISCONNECTED
  1236. #define INTERNET_STATE_OFFLINE_USER INTERNET_STATE_DISCONNECTED_BY_USER
  1237. #define INTERNET_LINE_STATE_MASK (INTERNET_STATE_ONLINE | INTERNET_STATE_OFFLINE)
  1238. #define INTERNET_BUSY_STATE_MASK (INTERNET_STATE_IDLE | INTERNET_STATE_BUSY)
  1239. ;end_internal
  1240. ;begin_internal
  1241. //
  1242. // the following are used with InternetSetOption(..., INTERNET_OPTION_CALLBACK_FILTER, ...)
  1243. // to filter out unrequired callbacks. INTERNET_STATUS_REQUEST_COMPLETE cannot
  1244. // be filtered out
  1245. //
  1246. #define INTERNET_STATUS_FILTER_RESOLVING 0x00000001
  1247. #define INTERNET_STATUS_FILTER_RESOLVED 0x00000002
  1248. #define INTERNET_STATUS_FILTER_CONNECTING 0x00000004
  1249. #define INTERNET_STATUS_FILTER_CONNECTED 0x00000008
  1250. #define INTERNET_STATUS_FILTER_SENDING 0x00000010
  1251. #define INTERNET_STATUS_FILTER_SENT 0x00000020
  1252. #define INTERNET_STATUS_FILTER_RECEIVING 0x00000040
  1253. #define INTERNET_STATUS_FILTER_RECEIVED 0x00000080
  1254. #define INTERNET_STATUS_FILTER_CLOSING 0x00000100
  1255. #define INTERNET_STATUS_FILTER_CLOSED 0x00000200
  1256. #define INTERNET_STATUS_FILTER_HANDLE_CREATED 0x00000400
  1257. #define INTERNET_STATUS_FILTER_HANDLE_CLOSING 0x00000800
  1258. #define INTERNET_STATUS_FILTER_PREFETCH 0x00001000
  1259. #define INTERNET_STATUS_FILTER_REDIRECT 0x00002000
  1260. #define INTERNET_STATUS_FILTER_STATE_CHANGE 0x00004000
  1261. ;end_internal
  1262. //
  1263. // if the following value is returned by InternetSetStatusCallback, then
  1264. // probably an invalid (non-code) address was supplied for the callback
  1265. //
  1266. #define INTERNET_INVALID_STATUS_CALLBACK ((INTERNET_STATUS_CALLBACK)(-1L))
  1267. //
  1268. // FTP
  1269. //
  1270. //
  1271. // manifests
  1272. //
  1273. #define FTP_TRANSFER_TYPE_UNKNOWN 0x00000000
  1274. #define FTP_TRANSFER_TYPE_ASCII 0x00000001
  1275. #define FTP_TRANSFER_TYPE_BINARY 0x00000002
  1276. #define FTP_TRANSFER_TYPE_MASK (FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY)
  1277. //
  1278. // prototypes
  1279. //
  1280. INTERNETAPI_(HINTERNET) FtpFindFirstFile%(
  1281. IN HINTERNET hConnect,
  1282. IN LPCTSTR% lpszSearchFile OPTIONAL,
  1283. OUT LPWIN32_FIND_DATA% lpFindFileData OPTIONAL,
  1284. IN DWORD dwFlags,
  1285. IN DWORD_PTR dwContext
  1286. );
  1287. BOOLAPI FtpGetFile%(
  1288. IN HINTERNET hConnect,
  1289. IN LPCTSTR% lpszRemoteFile,
  1290. IN LPCTSTR% lpszNewFile,
  1291. IN BOOL fFailIfExists,
  1292. IN DWORD dwFlagsAndAttributes,
  1293. IN DWORD dwFlags,
  1294. IN DWORD_PTR dwContext
  1295. );
  1296. BOOLAPI FtpPutFile%(
  1297. IN HINTERNET hConnect,
  1298. IN LPCTSTR% lpszLocalFile,
  1299. IN LPCTSTR% lpszNewRemoteFile,
  1300. IN DWORD dwFlags,
  1301. IN DWORD_PTR dwContext
  1302. );
  1303. BOOLAPI FtpGetFileEx(
  1304. IN HINTERNET hFtpSession,
  1305. IN LPCSTR lpszRemoteFile,
  1306. IN LPCWSTR lpszNewFile,
  1307. IN BOOL fFailIfExists,
  1308. IN DWORD dwFlagsAndAttributes,
  1309. IN DWORD dwFlags,
  1310. IN DWORD_PTR dwContext
  1311. );
  1312. BOOLAPI FtpPutFileEx(
  1313. IN HINTERNET hFtpSession,
  1314. IN LPCWSTR lpszLocalFile,
  1315. IN LPCSTR lpszNewRemoteFile,
  1316. IN DWORD dwFlags,
  1317. IN DWORD_PTR dwContext
  1318. );
  1319. BOOLAPI FtpDeleteFile%(
  1320. IN HINTERNET hConnect,
  1321. IN LPCTSTR% lpszFileName
  1322. );
  1323. BOOLAPI FtpRenameFile%(
  1324. IN HINTERNET hConnect,
  1325. IN LPCTSTR% lpszExisting,
  1326. IN LPCTSTR% lpszNew
  1327. );
  1328. INTERNETAPI_(HINTERNET) FtpOpenFile%(
  1329. IN HINTERNET hConnect,
  1330. IN LPCTSTR% lpszFileName,
  1331. IN DWORD dwAccess,
  1332. IN DWORD dwFlags,
  1333. IN DWORD_PTR dwContext
  1334. );
  1335. BOOLAPI FtpCreateDirectory%(
  1336. IN HINTERNET hConnect,
  1337. IN LPCTSTR% lpszDirectory
  1338. );
  1339. BOOLAPI FtpRemoveDirectory%(
  1340. IN HINTERNET hConnect,
  1341. IN LPCTSTR% lpszDirectory
  1342. );
  1343. BOOLAPI FtpSetCurrentDirectory%(
  1344. IN HINTERNET hConnect,
  1345. IN LPCTSTR% lpszDirectory
  1346. );
  1347. BOOLAPI FtpGetCurrentDirectory%(
  1348. IN HINTERNET hConnect,
  1349. OUT LPTSTR% lpszCurrentDirectory,
  1350. IN OUT LPDWORD lpdwCurrentDirectory
  1351. );
  1352. BOOLAPI FtpCommand%(
  1353. IN HINTERNET hConnect,
  1354. IN BOOL fExpectResponse,
  1355. IN DWORD dwFlags,
  1356. IN LPCTSTR% lpszCommand,
  1357. IN DWORD_PTR dwContext,
  1358. OUT HINTERNET *phFtpCommand OPTIONAL
  1359. );
  1360. INTERNETAPI_(DWORD) FtpGetFileSize(
  1361. IN HINTERNET hFile,
  1362. OUT LPDWORD lpdwFileSizeHigh OPTIONAL
  1363. );
  1364. //
  1365. // Gopher
  1366. //
  1367. //
  1368. // manifests
  1369. //
  1370. //
  1371. // string field lengths (in characters, not bytes)
  1372. //
  1373. #define MAX_GOPHER_DISPLAY_TEXT 128
  1374. #define MAX_GOPHER_SELECTOR_TEXT 256
  1375. #define MAX_GOPHER_HOST_NAME INTERNET_MAX_HOST_NAME_LENGTH
  1376. #define MAX_GOPHER_LOCATOR_LENGTH (1 \
  1377. + MAX_GOPHER_DISPLAY_TEXT \
  1378. + 1 \
  1379. + MAX_GOPHER_SELECTOR_TEXT \
  1380. + 1 \
  1381. + MAX_GOPHER_HOST_NAME \
  1382. + 1 \
  1383. + INTERNET_MAX_PORT_NUMBER_LENGTH \
  1384. + 1 \
  1385. + 1 \
  1386. + 2 \
  1387. )
  1388. //
  1389. // structures/types
  1390. //
  1391. //
  1392. // GOPHER_FIND_DATA - returns the results of a GopherFindFirstFile()/
  1393. // InternetFindNextFile() request
  1394. //
  1395. typedef struct {
  1396. TCHAR% DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1];
  1397. DWORD GopherType; // GOPHER_TYPE_, if known
  1398. DWORD SizeLow;
  1399. DWORD SizeHigh;
  1400. FILETIME LastModificationTime;
  1401. TCHAR% Locator[MAX_GOPHER_LOCATOR_LENGTH + 1];
  1402. } GOPHER_FIND_DATA%, * LPGOPHER_FIND_DATA%;
  1403. //
  1404. // manifests for GopherType
  1405. //
  1406. #define GOPHER_TYPE_TEXT_FILE 0x00000001
  1407. #define GOPHER_TYPE_DIRECTORY 0x00000002
  1408. #define GOPHER_TYPE_CSO 0x00000004
  1409. #define GOPHER_TYPE_ERROR 0x00000008
  1410. #define GOPHER_TYPE_MAC_BINHEX 0x00000010
  1411. #define GOPHER_TYPE_DOS_ARCHIVE 0x00000020
  1412. #define GOPHER_TYPE_UNIX_UUENCODED 0x00000040
  1413. #define GOPHER_TYPE_INDEX_SERVER 0x00000080
  1414. #define GOPHER_TYPE_TELNET 0x00000100
  1415. #define GOPHER_TYPE_BINARY 0x00000200
  1416. #define GOPHER_TYPE_REDUNDANT 0x00000400
  1417. #define GOPHER_TYPE_TN3270 0x00000800
  1418. #define GOPHER_TYPE_GIF 0x00001000
  1419. #define GOPHER_TYPE_IMAGE 0x00002000
  1420. #define GOPHER_TYPE_BITMAP 0x00004000
  1421. #define GOPHER_TYPE_MOVIE 0x00008000
  1422. #define GOPHER_TYPE_SOUND 0x00010000
  1423. #define GOPHER_TYPE_HTML 0x00020000
  1424. #define GOPHER_TYPE_PDF 0x00040000
  1425. #define GOPHER_TYPE_CALENDAR 0x00080000
  1426. #define GOPHER_TYPE_INLINE 0x00100000
  1427. #define GOPHER_TYPE_UNKNOWN 0x20000000
  1428. #define GOPHER_TYPE_ASK 0x40000000
  1429. #define GOPHER_TYPE_GOPHER_PLUS 0x80000000
  1430. //
  1431. // gopher type macros
  1432. //
  1433. #define IS_GOPHER_FILE(type) (BOOL)(((type) & GOPHER_TYPE_FILE_MASK) ? TRUE : FALSE)
  1434. #define IS_GOPHER_DIRECTORY(type) (BOOL)(((type) & GOPHER_TYPE_DIRECTORY) ? TRUE : FALSE)
  1435. #define IS_GOPHER_PHONE_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_CSO) ? TRUE : FALSE)
  1436. #define IS_GOPHER_ERROR(type) (BOOL)(((type) & GOPHER_TYPE_ERROR) ? TRUE : FALSE)
  1437. #define IS_GOPHER_INDEX_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_INDEX_SERVER) ? TRUE : FALSE)
  1438. #define IS_GOPHER_TELNET_SESSION(type) (BOOL)(((type) & GOPHER_TYPE_TELNET) ? TRUE : FALSE)
  1439. #define IS_GOPHER_BACKUP_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_REDUNDANT) ? TRUE : FALSE)
  1440. #define IS_GOPHER_TN3270_SESSION(type) (BOOL)(((type) & GOPHER_TYPE_TN3270) ? TRUE : FALSE)
  1441. #define IS_GOPHER_ASK(type) (BOOL)(((type) & GOPHER_TYPE_ASK) ? TRUE : FALSE)
  1442. #define IS_GOPHER_PLUS(type) (BOOL)(((type) & GOPHER_TYPE_GOPHER_PLUS) ? TRUE : FALSE)
  1443. #define IS_GOPHER_TYPE_KNOWN(type) (BOOL)(((type) & GOPHER_TYPE_UNKNOWN) ? FALSE : TRUE)
  1444. //
  1445. // GOPHER_TYPE_FILE_MASK - use this to determine if a locator identifies a
  1446. // (known) file type
  1447. //
  1448. #define GOPHER_TYPE_FILE_MASK (GOPHER_TYPE_TEXT_FILE \
  1449. | GOPHER_TYPE_MAC_BINHEX \
  1450. | GOPHER_TYPE_DOS_ARCHIVE \
  1451. | GOPHER_TYPE_UNIX_UUENCODED \
  1452. | GOPHER_TYPE_BINARY \
  1453. | GOPHER_TYPE_GIF \
  1454. | GOPHER_TYPE_IMAGE \
  1455. | GOPHER_TYPE_BITMAP \
  1456. | GOPHER_TYPE_MOVIE \
  1457. | GOPHER_TYPE_SOUND \
  1458. | GOPHER_TYPE_HTML \
  1459. | GOPHER_TYPE_PDF \
  1460. | GOPHER_TYPE_CALENDAR \
  1461. | GOPHER_TYPE_INLINE \
  1462. )
  1463. //
  1464. // structured gopher attributes (as defined in gopher+ protocol document)
  1465. //
  1466. typedef struct {
  1467. LPCTSTR Comment;
  1468. LPCTSTR EmailAddress;
  1469. } GOPHER_ADMIN_ATTRIBUTE_TYPE, * LPGOPHER_ADMIN_ATTRIBUTE_TYPE;
  1470. typedef struct {
  1471. FILETIME DateAndTime;
  1472. } GOPHER_MOD_DATE_ATTRIBUTE_TYPE, * LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE;
  1473. typedef struct {
  1474. DWORD Ttl;
  1475. } GOPHER_TTL_ATTRIBUTE_TYPE, * LPGOPHER_TTL_ATTRIBUTE_TYPE;
  1476. typedef struct {
  1477. INT Score;
  1478. } GOPHER_SCORE_ATTRIBUTE_TYPE, * LPGOPHER_SCORE_ATTRIBUTE_TYPE;
  1479. typedef struct {
  1480. INT LowerBound;
  1481. INT UpperBound;
  1482. } GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, * LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
  1483. typedef struct {
  1484. LPCTSTR Site;
  1485. } GOPHER_SITE_ATTRIBUTE_TYPE, * LPGOPHER_SITE_ATTRIBUTE_TYPE;
  1486. typedef struct {
  1487. LPCTSTR Organization;
  1488. } GOPHER_ORGANIZATION_ATTRIBUTE_TYPE, * LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE;
  1489. typedef struct {
  1490. LPCTSTR Location;
  1491. } GOPHER_LOCATION_ATTRIBUTE_TYPE, * LPGOPHER_LOCATION_ATTRIBUTE_TYPE;
  1492. typedef struct {
  1493. INT DegreesNorth;
  1494. INT MinutesNorth;
  1495. INT SecondsNorth;
  1496. INT DegreesEast;
  1497. INT MinutesEast;
  1498. INT SecondsEast;
  1499. } GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, * LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
  1500. typedef struct {
  1501. INT Zone;
  1502. } GOPHER_TIMEZONE_ATTRIBUTE_TYPE, * LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE;
  1503. typedef struct {
  1504. LPCTSTR Provider;
  1505. } GOPHER_PROVIDER_ATTRIBUTE_TYPE, * LPGOPHER_PROVIDER_ATTRIBUTE_TYPE;
  1506. typedef struct {
  1507. LPCTSTR Version;
  1508. } GOPHER_VERSION_ATTRIBUTE_TYPE, * LPGOPHER_VERSION_ATTRIBUTE_TYPE;
  1509. typedef struct {
  1510. LPCTSTR ShortAbstract;
  1511. LPCTSTR AbstractFile;
  1512. } GOPHER_ABSTRACT_ATTRIBUTE_TYPE, * LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE;
  1513. typedef struct {
  1514. LPCTSTR ContentType;
  1515. LPCTSTR Language;
  1516. DWORD Size;
  1517. } GOPHER_VIEW_ATTRIBUTE_TYPE, * LPGOPHER_VIEW_ATTRIBUTE_TYPE;
  1518. typedef struct {
  1519. BOOL TreeWalk;
  1520. } GOPHER_VERONICA_ATTRIBUTE_TYPE, * LPGOPHER_VERONICA_ATTRIBUTE_TYPE;
  1521. typedef struct {
  1522. LPCTSTR QuestionType;
  1523. LPCTSTR QuestionText;
  1524. } GOPHER_ASK_ATTRIBUTE_TYPE, * LPGOPHER_ASK_ATTRIBUTE_TYPE;
  1525. //
  1526. // GOPHER_UNKNOWN_ATTRIBUTE_TYPE - this is returned if we retrieve an attribute
  1527. // that is not specified in the current gopher/gopher+ documentation. It is up
  1528. // to the application to parse the information
  1529. //
  1530. typedef struct {
  1531. LPCTSTR Text;
  1532. } GOPHER_UNKNOWN_ATTRIBUTE_TYPE, * LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE;
  1533. //
  1534. // GOPHER_ATTRIBUTE_TYPE - returned in the user's buffer when an enumerated
  1535. // GopherGetAttribute call is made
  1536. //
  1537. typedef struct {
  1538. DWORD CategoryId; // e.g. GOPHER_CATEGORY_ID_ADMIN
  1539. DWORD AttributeId; // e.g. GOPHER_ATTRIBUTE_ID_ADMIN
  1540. union {
  1541. GOPHER_ADMIN_ATTRIBUTE_TYPE Admin;
  1542. GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate;
  1543. GOPHER_TTL_ATTRIBUTE_TYPE Ttl;
  1544. GOPHER_SCORE_ATTRIBUTE_TYPE Score;
  1545. GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange;
  1546. GOPHER_SITE_ATTRIBUTE_TYPE Site;
  1547. GOPHER_ORGANIZATION_ATTRIBUTE_TYPE Organization;
  1548. GOPHER_LOCATION_ATTRIBUTE_TYPE Location;
  1549. GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation;
  1550. GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone;
  1551. GOPHER_PROVIDER_ATTRIBUTE_TYPE Provider;
  1552. GOPHER_VERSION_ATTRIBUTE_TYPE Version;
  1553. GOPHER_ABSTRACT_ATTRIBUTE_TYPE Abstract;
  1554. GOPHER_VIEW_ATTRIBUTE_TYPE View;
  1555. GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica;
  1556. GOPHER_ASK_ATTRIBUTE_TYPE Ask;
  1557. GOPHER_UNKNOWN_ATTRIBUTE_TYPE Unknown;
  1558. } AttributeType;
  1559. } GOPHER_ATTRIBUTE_TYPE, * LPGOPHER_ATTRIBUTE_TYPE;
  1560. #define MAX_GOPHER_CATEGORY_NAME 128 // arbitrary
  1561. #define MAX_GOPHER_ATTRIBUTE_NAME 128 // "
  1562. #define MIN_GOPHER_ATTRIBUTE_LENGTH 256 // "
  1563. //
  1564. // known gopher attribute categories. See below for ordinals
  1565. //
  1566. #define GOPHER_INFO_CATEGORY TEXT("+INFO")
  1567. #define GOPHER_ADMIN_CATEGORY TEXT("+ADMIN")
  1568. #define GOPHER_VIEWS_CATEGORY TEXT("+VIEWS")
  1569. #define GOPHER_ABSTRACT_CATEGORY TEXT("+ABSTRACT")
  1570. #define GOPHER_VERONICA_CATEGORY TEXT("+VERONICA")
  1571. //
  1572. // known gopher attributes. These are the attribute names as defined in the
  1573. // gopher+ protocol document
  1574. //
  1575. #define GOPHER_ADMIN_ATTRIBUTE TEXT("Admin")
  1576. #define GOPHER_MOD_DATE_ATTRIBUTE TEXT("Mod-Date")
  1577. #define GOPHER_TTL_ATTRIBUTE TEXT("TTL")
  1578. #define GOPHER_SCORE_ATTRIBUTE TEXT("Score")
  1579. #define GOPHER_RANGE_ATTRIBUTE TEXT("Score-range")
  1580. #define GOPHER_SITE_ATTRIBUTE TEXT("Site")
  1581. #define GOPHER_ORG_ATTRIBUTE TEXT("Org")
  1582. #define GOPHER_LOCATION_ATTRIBUTE TEXT("Loc")
  1583. #define GOPHER_GEOG_ATTRIBUTE TEXT("Geog")
  1584. #define GOPHER_TIMEZONE_ATTRIBUTE TEXT("TZ")
  1585. #define GOPHER_PROVIDER_ATTRIBUTE TEXT("Provider")
  1586. #define GOPHER_VERSION_ATTRIBUTE TEXT("Version")
  1587. #define GOPHER_ABSTRACT_ATTRIBUTE TEXT("Abstract")
  1588. #define GOPHER_VIEW_ATTRIBUTE TEXT("View")
  1589. #define GOPHER_TREEWALK_ATTRIBUTE TEXT("treewalk")
  1590. //
  1591. // identifiers for attribute strings
  1592. //
  1593. #define GOPHER_ATTRIBUTE_ID_BASE 0xabcccc00
  1594. #define GOPHER_CATEGORY_ID_ALL (GOPHER_ATTRIBUTE_ID_BASE + 1)
  1595. #define GOPHER_CATEGORY_ID_INFO (GOPHER_ATTRIBUTE_ID_BASE + 2)
  1596. #define GOPHER_CATEGORY_ID_ADMIN (GOPHER_ATTRIBUTE_ID_BASE + 3)
  1597. #define GOPHER_CATEGORY_ID_VIEWS (GOPHER_ATTRIBUTE_ID_BASE + 4)
  1598. #define GOPHER_CATEGORY_ID_ABSTRACT (GOPHER_ATTRIBUTE_ID_BASE + 5)
  1599. #define GOPHER_CATEGORY_ID_VERONICA (GOPHER_ATTRIBUTE_ID_BASE + 6)
  1600. #define GOPHER_CATEGORY_ID_ASK (GOPHER_ATTRIBUTE_ID_BASE + 7)
  1601. #define GOPHER_CATEGORY_ID_UNKNOWN (GOPHER_ATTRIBUTE_ID_BASE + 8)
  1602. #define GOPHER_ATTRIBUTE_ID_ALL (GOPHER_ATTRIBUTE_ID_BASE + 9)
  1603. #define GOPHER_ATTRIBUTE_ID_ADMIN (GOPHER_ATTRIBUTE_ID_BASE + 10)
  1604. #define GOPHER_ATTRIBUTE_ID_MOD_DATE (GOPHER_ATTRIBUTE_ID_BASE + 11)
  1605. #define GOPHER_ATTRIBUTE_ID_TTL (GOPHER_ATTRIBUTE_ID_BASE + 12)
  1606. #define GOPHER_ATTRIBUTE_ID_SCORE (GOPHER_ATTRIBUTE_ID_BASE + 13)
  1607. #define GOPHER_ATTRIBUTE_ID_RANGE (GOPHER_ATTRIBUTE_ID_BASE + 14)
  1608. #define GOPHER_ATTRIBUTE_ID_SITE (GOPHER_ATTRIBUTE_ID_BASE + 15)
  1609. #define GOPHER_ATTRIBUTE_ID_ORG (GOPHER_ATTRIBUTE_ID_BASE + 16)
  1610. #define GOPHER_ATTRIBUTE_ID_LOCATION (GOPHER_ATTRIBUTE_ID_BASE + 17)
  1611. #define GOPHER_ATTRIBUTE_ID_GEOG (GOPHER_ATTRIBUTE_ID_BASE + 18)
  1612. #define GOPHER_ATTRIBUTE_ID_TIMEZONE (GOPHER_ATTRIBUTE_ID_BASE + 19)
  1613. #define GOPHER_ATTRIBUTE_ID_PROVIDER (GOPHER_ATTRIBUTE_ID_BASE + 20)
  1614. #define GOPHER_ATTRIBUTE_ID_VERSION (GOPHER_ATTRIBUTE_ID_BASE + 21)
  1615. #define GOPHER_ATTRIBUTE_ID_ABSTRACT (GOPHER_ATTRIBUTE_ID_BASE + 22)
  1616. #define GOPHER_ATTRIBUTE_ID_VIEW (GOPHER_ATTRIBUTE_ID_BASE + 23)
  1617. #define GOPHER_ATTRIBUTE_ID_TREEWALK (GOPHER_ATTRIBUTE_ID_BASE + 24)
  1618. #define GOPHER_ATTRIBUTE_ID_UNKNOWN (GOPHER_ATTRIBUTE_ID_BASE + 25)
  1619. //
  1620. // prototypes
  1621. //
  1622. BOOLAPI GopherCreateLocator%(
  1623. IN LPCTSTR% lpszHost,
  1624. IN INTERNET_PORT nServerPort,
  1625. IN LPCTSTR% lpszDisplayString OPTIONAL,
  1626. IN LPCTSTR% lpszSelectorString OPTIONAL,
  1627. IN DWORD dwGopherType,
  1628. OUT LPTSTR% lpszLocator OPTIONAL,
  1629. IN OUT LPDWORD lpdwBufferLength
  1630. );
  1631. BOOLAPI GopherGetLocatorType%(
  1632. IN LPCTSTR% lpszLocator,
  1633. OUT LPDWORD lpdwGopherType
  1634. );
  1635. INTERNETAPI_(HINTERNET) GopherFindFirstFile%(
  1636. IN HINTERNET hConnect,
  1637. IN LPCTSTR% lpszLocator OPTIONAL,
  1638. IN LPCTSTR% lpszSearchString OPTIONAL,
  1639. OUT LPGOPHER_FIND_DATA% lpFindData OPTIONAL,
  1640. IN DWORD dwFlags,
  1641. IN DWORD_PTR dwContext
  1642. );
  1643. INTERNETAPI_(HINTERNET) GopherOpenFile%(
  1644. IN HINTERNET hConnect,
  1645. IN LPCTSTR% lpszLocator,
  1646. IN LPCTSTR% lpszView OPTIONAL,
  1647. IN DWORD dwFlags,
  1648. IN DWORD_PTR dwContext
  1649. );
  1650. typedef BOOL (CALLBACK * GOPHER_ATTRIBUTE_ENUMERATOR)(
  1651. LPGOPHER_ATTRIBUTE_TYPE lpAttributeInfo,
  1652. DWORD dwError
  1653. );
  1654. BOOLAPI GopherGetAttribute%(
  1655. IN HINTERNET hConnect,
  1656. IN LPCTSTR% lpszLocator,
  1657. IN LPCTSTR% lpszAttributeName OPTIONAL,
  1658. OUT LPBYTE lpBuffer,
  1659. IN DWORD dwBufferLength,
  1660. OUT LPDWORD lpdwCharactersReturned,
  1661. IN GOPHER_ATTRIBUTE_ENUMERATOR lpfnEnumerator OPTIONAL,
  1662. IN DWORD_PTR dwContext
  1663. );
  1664. //
  1665. // HTTP
  1666. //
  1667. //
  1668. // manifests
  1669. //
  1670. //
  1671. // the default major/minor HTTP version numbers
  1672. //
  1673. #define HTTP_MAJOR_VERSION 1
  1674. #define HTTP_MINOR_VERSION 0
  1675. #define HTTP_VERSIONA "HTTP/1.0"
  1676. #define HTTP_VERSIONW L"HTTP/1.0"
  1677. #ifdef UNICODE
  1678. #define HTTP_VERSION HTTP_VERSIONW
  1679. #else
  1680. #define HTTP_VERSION HTTP_VERSIONA
  1681. #endif
  1682. //
  1683. // HttpQueryInfo info levels. Generally, there is one info level
  1684. // for each potential RFC822/HTTP/MIME header that an HTTP server
  1685. // may send as part of a request response.
  1686. //
  1687. // The HTTP_QUERY_RAW_HEADERS info level is provided for clients
  1688. // that choose to perform their own header parsing.
  1689. //
  1690. ;begin_internal
  1691. //
  1692. // Note that adding any HTTP_QUERY_* codes here must be followed
  1693. // by an equivlent line in wininet\http\hashgen\hashgen.cpp
  1694. // please see that file for further information regarding
  1695. // the addition of new HTTP headers
  1696. //
  1697. ;end_internal
  1698. #define HTTP_QUERY_MIME_VERSION 0
  1699. #define HTTP_QUERY_CONTENT_TYPE 1
  1700. #define HTTP_QUERY_CONTENT_TRANSFER_ENCODING 2
  1701. #define HTTP_QUERY_CONTENT_ID 3
  1702. #define HTTP_QUERY_CONTENT_DESCRIPTION 4
  1703. #define HTTP_QUERY_CONTENT_LENGTH 5
  1704. #define HTTP_QUERY_CONTENT_LANGUAGE 6
  1705. #define HTTP_QUERY_ALLOW 7
  1706. #define HTTP_QUERY_PUBLIC 8
  1707. #define HTTP_QUERY_DATE 9
  1708. #define HTTP_QUERY_EXPIRES 10
  1709. #define HTTP_QUERY_LAST_MODIFIED 11
  1710. #define HTTP_QUERY_MESSAGE_ID 12
  1711. #define HTTP_QUERY_URI 13
  1712. #define HTTP_QUERY_DERIVED_FROM 14
  1713. #define HTTP_QUERY_COST 15
  1714. #define HTTP_QUERY_LINK 16
  1715. #define HTTP_QUERY_PRAGMA 17
  1716. #define HTTP_QUERY_VERSION 18 // special: part of status line
  1717. #define HTTP_QUERY_STATUS_CODE 19 // special: part of status line
  1718. #define HTTP_QUERY_STATUS_TEXT 20 // special: part of status line
  1719. #define HTTP_QUERY_RAW_HEADERS 21 // special: all headers as ASCIIZ
  1720. #define HTTP_QUERY_RAW_HEADERS_CRLF 22 // special: all headers
  1721. #define HTTP_QUERY_CONNECTION 23
  1722. #define HTTP_QUERY_ACCEPT 24
  1723. #define HTTP_QUERY_ACCEPT_CHARSET 25
  1724. #define HTTP_QUERY_ACCEPT_ENCODING 26
  1725. #define HTTP_QUERY_ACCEPT_LANGUAGE 27
  1726. #define HTTP_QUERY_AUTHORIZATION 28
  1727. #define HTTP_QUERY_CONTENT_ENCODING 29
  1728. #define HTTP_QUERY_FORWARDED 30
  1729. #define HTTP_QUERY_FROM 31
  1730. #define HTTP_QUERY_IF_MODIFIED_SINCE 32
  1731. #define HTTP_QUERY_LOCATION 33
  1732. #define HTTP_QUERY_ORIG_URI 34
  1733. #define HTTP_QUERY_REFERER 35
  1734. #define HTTP_QUERY_RETRY_AFTER 36
  1735. #define HTTP_QUERY_SERVER 37
  1736. #define HTTP_QUERY_TITLE 38
  1737. #define HTTP_QUERY_USER_AGENT 39
  1738. #define HTTP_QUERY_WWW_AUTHENTICATE 40
  1739. #define HTTP_QUERY_PROXY_AUTHENTICATE 41
  1740. #define HTTP_QUERY_ACCEPT_RANGES 42
  1741. #define HTTP_QUERY_SET_COOKIE 43
  1742. #define HTTP_QUERY_COOKIE 44
  1743. #define HTTP_QUERY_REQUEST_METHOD 45 // special: GET/POST etc.
  1744. #define HTTP_QUERY_REFRESH 46
  1745. #define HTTP_QUERY_CONTENT_DISPOSITION 47
  1746. //
  1747. // HTTP 1.1 defined headers
  1748. //
  1749. #define HTTP_QUERY_AGE 48
  1750. #define HTTP_QUERY_CACHE_CONTROL 49
  1751. #define HTTP_QUERY_CONTENT_BASE 50
  1752. #define HTTP_QUERY_CONTENT_LOCATION 51
  1753. #define HTTP_QUERY_CONTENT_MD5 52
  1754. #define HTTP_QUERY_CONTENT_RANGE 53
  1755. #define HTTP_QUERY_ETAG 54
  1756. #define HTTP_QUERY_HOST 55
  1757. #define HTTP_QUERY_IF_MATCH 56
  1758. #define HTTP_QUERY_IF_NONE_MATCH 57
  1759. #define HTTP_QUERY_IF_RANGE 58
  1760. #define HTTP_QUERY_IF_UNMODIFIED_SINCE 59
  1761. #define HTTP_QUERY_MAX_FORWARDS 60
  1762. #define HTTP_QUERY_PROXY_AUTHORIZATION 61
  1763. #define HTTP_QUERY_RANGE 62
  1764. #define HTTP_QUERY_TRANSFER_ENCODING 63
  1765. #define HTTP_QUERY_UPGRADE 64
  1766. #define HTTP_QUERY_VARY 65
  1767. #define HTTP_QUERY_VIA 66
  1768. #define HTTP_QUERY_WARNING 67
  1769. #define HTTP_QUERY_EXPECT 68
  1770. #define HTTP_QUERY_PROXY_CONNECTION 69
  1771. #define HTTP_QUERY_UNLESS_MODIFIED_SINCE 70
  1772. ;begin_internal
  1773. // These are not part of HTTP 1.1 yet. We will propose these to the
  1774. // HTTP extensions working group. These are required for the client-caps support
  1775. // we are doing in conjuntion with IIS.
  1776. ;end_internal
  1777. #define HTTP_QUERY_ECHO_REQUEST 71
  1778. #define HTTP_QUERY_ECHO_REPLY 72
  1779. // These are the set of headers that should be added back to a request when
  1780. // re-doing a request after a RETRY_WITH response.
  1781. #define HTTP_QUERY_ECHO_HEADERS 73
  1782. #define HTTP_QUERY_ECHO_HEADERS_CRLF 74
  1783. #define HTTP_QUERY_PROXY_SUPPORT 75
  1784. #define HTTP_QUERY_AUTHENTICATION_INFO 76
  1785. #define HTTP_QUERY_PASSPORT_URLS 77
  1786. #define HTTP_QUERY_PASSPORT_CONFIG 78
  1787. #define HTTP_QUERY_MAX 78
  1788. //
  1789. // HTTP_QUERY_CUSTOM - if this special value is supplied as the dwInfoLevel
  1790. // parameter of HttpQueryInfo() then the lpBuffer parameter contains the name
  1791. // of the header we are to query
  1792. //
  1793. #define HTTP_QUERY_CUSTOM 65535
  1794. //
  1795. // HTTP_QUERY_FLAG_REQUEST_HEADERS - if this bit is set in the dwInfoLevel
  1796. // parameter of HttpQueryInfo() then the request headers will be queried for the
  1797. // request information
  1798. //
  1799. #define HTTP_QUERY_FLAG_REQUEST_HEADERS 0x80000000
  1800. //
  1801. // HTTP_QUERY_FLAG_SYSTEMTIME - if this bit is set in the dwInfoLevel parameter
  1802. // of HttpQueryInfo() AND the header being queried contains date information,
  1803. // e.g. the "Expires:" header then lpBuffer will contain a SYSTEMTIME structure
  1804. // containing the date and time information converted from the header string
  1805. //
  1806. #define HTTP_QUERY_FLAG_SYSTEMTIME 0x40000000
  1807. //
  1808. // HTTP_QUERY_FLAG_NUMBER - if this bit is set in the dwInfoLevel parameter of
  1809. // HttpQueryInfo(), then the value of the header will be converted to a number
  1810. // before being returned to the caller, if applicable
  1811. //
  1812. #define HTTP_QUERY_FLAG_NUMBER 0x20000000
  1813. //
  1814. // HTTP_QUERY_FLAG_COALESCE - combine the values from several headers of the
  1815. // same name into the output buffer
  1816. //
  1817. #define HTTP_QUERY_FLAG_COALESCE 0x10000000
  1818. #define HTTP_QUERY_MODIFIER_FLAGS_MASK (HTTP_QUERY_FLAG_REQUEST_HEADERS \
  1819. | HTTP_QUERY_FLAG_SYSTEMTIME \
  1820. | HTTP_QUERY_FLAG_NUMBER \
  1821. | HTTP_QUERY_FLAG_COALESCE \
  1822. )
  1823. #define HTTP_QUERY_HEADER_MASK (~HTTP_QUERY_MODIFIER_FLAGS_MASK)
  1824. //
  1825. // HTTP Response Status Codes:
  1826. //
  1827. #define HTTP_STATUS_CONTINUE 100 // OK to continue with request
  1828. #define HTTP_STATUS_SWITCH_PROTOCOLS 101 // server has switched protocols in upgrade header
  1829. #define HTTP_STATUS_OK 200 // request completed
  1830. #define HTTP_STATUS_CREATED 201 // object created, reason = new URI
  1831. #define HTTP_STATUS_ACCEPTED 202 // async completion (TBS)
  1832. #define HTTP_STATUS_PARTIAL 203 // partial completion
  1833. #define HTTP_STATUS_NO_CONTENT 204 // no info to return
  1834. #define HTTP_STATUS_RESET_CONTENT 205 // request completed, but clear form
  1835. #define HTTP_STATUS_PARTIAL_CONTENT 206 // partial GET furfilled
  1836. #define HTTP_STATUS_AMBIGUOUS 300 // server couldn't decide what to return
  1837. #define HTTP_STATUS_MOVED 301 // object permanently moved
  1838. #define HTTP_STATUS_REDIRECT 302 // object temporarily moved
  1839. #define HTTP_STATUS_REDIRECT_METHOD 303 // redirection w/ new access method
  1840. #define HTTP_STATUS_NOT_MODIFIED 304 // if-modified-since was not modified
  1841. #define HTTP_STATUS_USE_PROXY 305 // redirection to proxy, location header specifies proxy to use
  1842. #define HTTP_STATUS_REDIRECT_KEEP_VERB 307 // HTTP/1.1: keep same verb
  1843. #define HTTP_STATUS_BAD_REQUEST 400 // invalid syntax
  1844. #define HTTP_STATUS_DENIED 401 // access denied
  1845. #define HTTP_STATUS_PAYMENT_REQ 402 // payment required
  1846. #define HTTP_STATUS_FORBIDDEN 403 // request forbidden
  1847. #define HTTP_STATUS_NOT_FOUND 404 // object not found
  1848. #define HTTP_STATUS_BAD_METHOD 405 // method is not allowed
  1849. #define HTTP_STATUS_NONE_ACCEPTABLE 406 // no response acceptable to client found
  1850. #define HTTP_STATUS_PROXY_AUTH_REQ 407 // proxy authentication required
  1851. #define HTTP_STATUS_REQUEST_TIMEOUT 408 // server timed out waiting for request
  1852. #define HTTP_STATUS_CONFLICT 409 // user should resubmit with more info
  1853. #define HTTP_STATUS_GONE 410 // the resource is no longer available
  1854. #define HTTP_STATUS_LENGTH_REQUIRED 411 // the server refused to accept request w/o a length
  1855. #define HTTP_STATUS_PRECOND_FAILED 412 // precondition given in request failed
  1856. #define HTTP_STATUS_REQUEST_TOO_LARGE 413 // request entity was too large
  1857. #define HTTP_STATUS_URI_TOO_LONG 414 // request URI too long
  1858. #define HTTP_STATUS_UNSUPPORTED_MEDIA 415 // unsupported media type
  1859. #define HTTP_STATUS_RETRY_WITH 449 // retry after doing the appropriate action.
  1860. #define HTTP_STATUS_SERVER_ERROR 500 // internal server error
  1861. #define HTTP_STATUS_NOT_SUPPORTED 501 // required not supported
  1862. #define HTTP_STATUS_BAD_GATEWAY 502 // error response received from gateway
  1863. #define HTTP_STATUS_SERVICE_UNAVAIL 503 // temporarily overloaded
  1864. #define HTTP_STATUS_GATEWAY_TIMEOUT 504 // timed out waiting for gateway
  1865. #define HTTP_STATUS_VERSION_NOT_SUP 505 // HTTP version not supported
  1866. #define HTTP_STATUS_FIRST HTTP_STATUS_CONTINUE
  1867. #define HTTP_STATUS_LAST HTTP_STATUS_VERSION_NOT_SUP
  1868. //
  1869. // prototypes
  1870. //
  1871. INTERNETAPI_(HINTERNET) HttpOpenRequest%(
  1872. IN HINTERNET hConnect,
  1873. IN LPCTSTR% lpszVerb,
  1874. IN LPCTSTR% lpszObjectName,
  1875. IN LPCTSTR% lpszVersion,
  1876. IN LPCTSTR% lpszReferrer OPTIONAL,
  1877. IN LPCTSTR% FAR * lplpszAcceptTypes OPTIONAL,
  1878. IN DWORD dwFlags,
  1879. IN DWORD_PTR dwContext
  1880. );
  1881. BOOLAPI HttpAddRequestHeaders%(
  1882. IN HINTERNET hRequest,
  1883. IN LPCTSTR% lpszHeaders,
  1884. IN DWORD dwHeadersLength,
  1885. IN DWORD dwModifiers
  1886. );
  1887. //
  1888. // values for dwModifiers parameter of HttpAddRequestHeaders()
  1889. //
  1890. #define HTTP_ADDREQ_INDEX_MASK 0x0000FFFF
  1891. #define HTTP_ADDREQ_FLAGS_MASK 0xFFFF0000
  1892. //
  1893. // HTTP_ADDREQ_FLAG_ADD_IF_NEW - the header will only be added if it doesn't
  1894. // already exist
  1895. //
  1896. #define HTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000
  1897. //
  1898. // HTTP_ADDREQ_FLAG_ADD - if HTTP_ADDREQ_FLAG_REPLACE is set but the header is
  1899. // not found then if this flag is set, the header is added anyway, so long as
  1900. // there is a valid header-value
  1901. //
  1902. #define HTTP_ADDREQ_FLAG_ADD 0x20000000
  1903. //
  1904. // HTTP_ADDREQ_FLAG_COALESCE - coalesce headers with same name. e.g.
  1905. // "Accept: text/*" and "Accept: audio/*" with this flag results in a single
  1906. // header: "Accept: text/*, audio/*"
  1907. //
  1908. #define HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA 0x40000000
  1909. #define HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON 0x01000000
  1910. #define HTTP_ADDREQ_FLAG_COALESCE HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
  1911. //
  1912. // HTTP_ADDREQ_FLAG_REPLACE - replaces the specified header. Only one header can
  1913. // be supplied in the buffer. If the header to be replaced is not the first
  1914. // in a list of headers with the same name, then the relative index should be
  1915. // supplied in the low 8 bits of the dwModifiers parameter. If the header-value
  1916. // part is missing, then the header is removed
  1917. //
  1918. #define HTTP_ADDREQ_FLAG_REPLACE 0x80000000
  1919. BOOLAPI HttpSendRequest%(
  1920. IN HINTERNET hRequest,
  1921. IN LPCTSTR% lpszHeaders OPTIONAL,
  1922. IN DWORD dwHeadersLength,
  1923. IN LPVOID lpOptional OPTIONAL,
  1924. IN DWORD dwOptionalLength
  1925. );
  1926. INTERNETAPI_(BOOL) HttpSendRequestEx%(
  1927. IN HINTERNET hRequest,
  1928. IN LPINTERNET_BUFFERS% lpBuffersIn OPTIONAL,
  1929. OUT LPINTERNET_BUFFERS% lpBuffersOut OPTIONAL,
  1930. IN DWORD dwFlags,
  1931. IN DWORD_PTR dwContext
  1932. );
  1933. //
  1934. // flags for HttpSendRequestEx(), HttpEndRequest()
  1935. //
  1936. #define HSR_ASYNC WININET_API_FLAG_ASYNC // force async
  1937. #define HSR_SYNC WININET_API_FLAG_SYNC // force sync
  1938. #define HSR_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT // use dwContext value
  1939. #define HSR_INITIATE 0x00000008 // iterative operation (completed by HttpEndRequest)
  1940. #define HSR_DOWNLOAD 0x00000010 // download to file
  1941. #define HSR_CHUNKED 0x00000020 // operation is send of chunked data
  1942. INTERNETAPI_(BOOL) HttpEndRequest%(
  1943. IN HINTERNET hRequest,
  1944. OUT LPINTERNET_BUFFERS% lpBuffersOut OPTIONAL,
  1945. IN DWORD dwFlags,
  1946. IN DWORD_PTR dwContext
  1947. );
  1948. BOOLAPI HttpQueryInfo%(
  1949. IN HINTERNET hRequest,
  1950. IN DWORD dwInfoLevel,
  1951. IN OUT LPVOID lpBuffer OPTIONAL,
  1952. IN OUT LPDWORD lpdwBufferLength,
  1953. IN OUT LPDWORD lpdwIndex OPTIONAL
  1954. );
  1955. //
  1956. // Cookie APIs
  1957. //
  1958. ;begin_internal
  1959. typedef struct _INTERNET_COOKIE {
  1960. DWORD cbSize;
  1961. LPSTR pszName;
  1962. LPSTR pszData;
  1963. LPSTR pszDomain;
  1964. LPSTR pszPath;
  1965. FILETIME *pftExpires;
  1966. DWORD dwFlags;
  1967. LPSTR pszUrl;
  1968. LPSTR pszP3PPolicy;
  1969. } INTERNET_COOKIE, *PINTERNET_COOKIE;
  1970. ;end_internal
  1971. #define INTERNET_COOKIE_IS_SECURE 0x01
  1972. #define INTERNET_COOKIE_IS_SESSION 0x02
  1973. #define INTERNET_COOKIE_THIRD_PARTY 0x10
  1974. #define INTERNET_COOKIE_PROMPT_REQUIRED 0x20
  1975. #define INTERNET_COOKIE_EVALUATE_P3P 0x40
  1976. #define INTERNET_COOKIE_APPLY_P3P 0x80
  1977. #define INTERNET_COOKIE_P3P_ENABLED 0x100
  1978. #define INTERNET_COOKIE_IS_RESTRICTED 0x200
  1979. #define INTERNET_COOKIE_IE6 0x400
  1980. #define INTERNET_COOKIE_IS_LEGACY 0x800
  1981. BOOLAPI InternetSetCookie%(
  1982. IN LPCTSTR% lpszUrl,
  1983. IN LPCTSTR% lpszCookieName,
  1984. IN LPCTSTR% lpszCookieData
  1985. );
  1986. BOOLAPI InternetGetCookie%(
  1987. IN LPCTSTR% lpszUrl,
  1988. IN LPCTSTR% lpszCookieName,
  1989. OUT LPTSTR% lpCookieData,
  1990. IN OUT LPDWORD lpdwSize
  1991. );
  1992. INTERNETAPI_(DWORD) InternetSetCookieEx%(
  1993. IN LPCTSTR% lpszUrl,
  1994. IN LPCTSTR% lpszCookieName,
  1995. IN LPCTSTR% lpszCookieData,
  1996. DWORD dwFlags,
  1997. DWORD_PTR dwReserved
  1998. );
  1999. BOOLAPI InternetGetCookieEx%(
  2000. IN LPCTSTR% pchURL,
  2001. IN LPCTSTR% pchCookieName,
  2002. IN LPTSTR% pchCookieData OPTIONAL,
  2003. IN OUT LPDWORD pcchCookieData OPTIONAL,
  2004. IN DWORD dwFlags,
  2005. IN LPVOID lpReserved
  2006. );
  2007. //
  2008. // offline browsing
  2009. //
  2010. INTERNETAPI_(DWORD) InternetAttemptConnect(
  2011. IN DWORD dwReserved
  2012. );
  2013. BOOLAPI InternetCheckConnection%(
  2014. IN LPCTSTR% lpszUrl,
  2015. IN DWORD dwFlags,
  2016. IN DWORD dwReserved
  2017. );
  2018. ;begin_internal
  2019. //
  2020. // DAV Detection
  2021. //
  2022. BOOLAPI HttpCheckDavCompliance%(
  2023. IN LPCTSTR% lpszUrl,
  2024. IN LPCTSTR% lpszComplianceToken,
  2025. IN OUT LPBOOL lpfFound,
  2026. IN HWND hWnd,
  2027. IN LPVOID lpvReserved
  2028. );
  2029. BOOLAPI HttpCheckCachedDavStatus%(
  2030. IN LPCTSTR% lpszUrl,
  2031. IN OUT LPDWORD lpdwStatus
  2032. );
  2033. BOOLAPI HttpCheckDavCollection%(
  2034. IN LPCTSTR% lpszUrl,
  2035. IN OUT LPBOOL lpfFound,
  2036. IN HWND hWnd,
  2037. IN LPVOID lpvReserved
  2038. );
  2039. // DAV detection defines
  2040. #define DAV_LEVEL1_STATUS 0x00000001
  2041. #define DAV_COLLECTION_STATUS 0x00004000
  2042. #define DAV_DETECTION_REQUIRED 0x00008000
  2043. ;end_internal
  2044. #define FLAG_ICC_FORCE_CONNECTION 0x00000001
  2045. //
  2046. // Internet UI
  2047. //
  2048. //
  2049. // InternetErrorDlg - Provides UI for certain Errors.
  2050. //
  2051. #define FLAGS_ERROR_UI_FILTER_FOR_ERRORS 0x01
  2052. #define FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS 0x02
  2053. #define FLAGS_ERROR_UI_FLAGS_GENERATE_DATA 0x04
  2054. #define FLAGS_ERROR_UI_FLAGS_NO_UI 0x08
  2055. #define FLAGS_ERROR_UI_SERIALIZE_DIALOGS 0x10
  2056. //
  2057. // If SERIALIZE_DIALOGS flag set, client should implement thread-safe non-blocking callback...
  2058. //
  2059. DWORD InternetAuthNotifyCallback
  2060. (
  2061. DWORD_PTR dwContext, // as passed to InternetErrorDlg
  2062. DWORD dwReturn, // error code: success, resend, or cancel
  2063. LPVOID lpReserved // reserved: will be set to null
  2064. );
  2065. typedef DWORD (CALLBACK * PFN_AUTH_NOTIFY) (DWORD_PTR, DWORD, LPVOID);
  2066. //
  2067. // ... and last parameter of InternetErrorDlg should point to...
  2068. //
  2069. typedef struct
  2070. {
  2071. DWORD cbStruct; // size of this structure
  2072. DWORD dwOptions; // reserved: must set to 0
  2073. PFN_AUTH_NOTIFY pfnNotify; // notification callback to retry InternetErrorDlg
  2074. DWORD_PTR dwContext; // context to pass to to notification function
  2075. }
  2076. INTERNET_AUTH_NOTIFY_DATA;
  2077. INTERNETAPI_(BOOL) ResumeSuspendedDownload(
  2078. IN HINTERNET hRequest,
  2079. IN DWORD dwResultCode
  2080. );
  2081. INTERNETAPI_(DWORD) InternetErrorDlg(
  2082. IN HWND hWnd,
  2083. IN OUT HINTERNET hRequest,
  2084. IN DWORD dwError,
  2085. IN DWORD dwFlags,
  2086. IN OUT LPVOID * lppvData
  2087. );
  2088. INTERNETAPI_(DWORD) InternetConfirmZoneCrossingA(
  2089. IN HWND hWnd,
  2090. IN LPSTR szUrlPrev,
  2091. IN LPSTR szUrlNew,
  2092. IN BOOL bPost
  2093. );
  2094. INTERNETAPI_(DWORD) InternetConfirmZoneCrossingW(
  2095. IN HWND hWnd,
  2096. IN LPWSTR szUrlPrev,
  2097. IN LPWSTR szUrlNew,
  2098. IN BOOL bPost
  2099. );
  2100. #ifdef UNICODE
  2101. #define InternetConfirmZoneCrossing InternetConfirmZoneCrossingW
  2102. #else
  2103. #ifdef _WINX32_
  2104. #define InternetConfirmZoneCrossing InternetConfirmZoneCrossingA
  2105. #else
  2106. INTERNETAPI_(DWORD) InternetConfirmZoneCrossing(
  2107. IN HWND hWnd,
  2108. IN LPSTR szUrlPrev,
  2109. IN LPSTR szUrlNew,
  2110. IN BOOL bPost
  2111. );
  2112. #endif // _WINX32_
  2113. #endif // !UNICODE
  2114. //#if !defined(_WINERROR_)
  2115. //
  2116. // Internet API error returns
  2117. //
  2118. #define INTERNET_ERROR_BASE 12000
  2119. #define ERROR_INTERNET_OUT_OF_HANDLES (INTERNET_ERROR_BASE + 1)
  2120. #define ERROR_INTERNET_TIMEOUT (INTERNET_ERROR_BASE + 2)
  2121. #define ERROR_INTERNET_EXTENDED_ERROR (INTERNET_ERROR_BASE + 3)
  2122. #define ERROR_INTERNET_INTERNAL_ERROR (INTERNET_ERROR_BASE + 4)
  2123. #define ERROR_INTERNET_INVALID_URL (INTERNET_ERROR_BASE + 5)
  2124. #define ERROR_INTERNET_UNRECOGNIZED_SCHEME (INTERNET_ERROR_BASE + 6)
  2125. #define ERROR_INTERNET_NAME_NOT_RESOLVED (INTERNET_ERROR_BASE + 7)
  2126. #define ERROR_INTERNET_PROTOCOL_NOT_FOUND (INTERNET_ERROR_BASE + 8)
  2127. #define ERROR_INTERNET_INVALID_OPTION (INTERNET_ERROR_BASE + 9)
  2128. #define ERROR_INTERNET_BAD_OPTION_LENGTH (INTERNET_ERROR_BASE + 10)
  2129. #define ERROR_INTERNET_OPTION_NOT_SETTABLE (INTERNET_ERROR_BASE + 11)
  2130. #define ERROR_INTERNET_SHUTDOWN (INTERNET_ERROR_BASE + 12)
  2131. #define ERROR_INTERNET_INCORRECT_USER_NAME (INTERNET_ERROR_BASE + 13)
  2132. #define ERROR_INTERNET_INCORRECT_PASSWORD (INTERNET_ERROR_BASE + 14)
  2133. #define ERROR_INTERNET_LOGIN_FAILURE (INTERNET_ERROR_BASE + 15)
  2134. #define ERROR_INTERNET_INVALID_OPERATION (INTERNET_ERROR_BASE + 16)
  2135. #define ERROR_INTERNET_OPERATION_CANCELLED (INTERNET_ERROR_BASE + 17)
  2136. #define ERROR_INTERNET_INCORRECT_HANDLE_TYPE (INTERNET_ERROR_BASE + 18)
  2137. #define ERROR_INTERNET_INCORRECT_HANDLE_STATE (INTERNET_ERROR_BASE + 19)
  2138. #define ERROR_INTERNET_NOT_PROXY_REQUEST (INTERNET_ERROR_BASE + 20)
  2139. #define ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND (INTERNET_ERROR_BASE + 21)
  2140. #define ERROR_INTERNET_BAD_REGISTRY_PARAMETER (INTERNET_ERROR_BASE + 22)
  2141. #define ERROR_INTERNET_NO_DIRECT_ACCESS (INTERNET_ERROR_BASE + 23)
  2142. #define ERROR_INTERNET_NO_CONTEXT (INTERNET_ERROR_BASE + 24)
  2143. #define ERROR_INTERNET_NO_CALLBACK (INTERNET_ERROR_BASE + 25)
  2144. #define ERROR_INTERNET_REQUEST_PENDING (INTERNET_ERROR_BASE + 26)
  2145. #define ERROR_INTERNET_INCORRECT_FORMAT (INTERNET_ERROR_BASE + 27)
  2146. #define ERROR_INTERNET_ITEM_NOT_FOUND (INTERNET_ERROR_BASE + 28)
  2147. #define ERROR_INTERNET_CANNOT_CONNECT (INTERNET_ERROR_BASE + 29)
  2148. #define ERROR_INTERNET_CONNECTION_ABORTED (INTERNET_ERROR_BASE + 30)
  2149. #define ERROR_INTERNET_CONNECTION_RESET (INTERNET_ERROR_BASE + 31)
  2150. #define ERROR_INTERNET_FORCE_RETRY (INTERNET_ERROR_BASE + 32)
  2151. #define ERROR_INTERNET_INVALID_PROXY_REQUEST (INTERNET_ERROR_BASE + 33)
  2152. #define ERROR_INTERNET_NEED_UI (INTERNET_ERROR_BASE + 34)
  2153. #define ERROR_INTERNET_HANDLE_EXISTS (INTERNET_ERROR_BASE + 36)
  2154. #define ERROR_INTERNET_SEC_CERT_DATE_INVALID (INTERNET_ERROR_BASE + 37)
  2155. #define ERROR_INTERNET_SEC_CERT_CN_INVALID (INTERNET_ERROR_BASE + 38)
  2156. #define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR (INTERNET_ERROR_BASE + 39)
  2157. #define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR (INTERNET_ERROR_BASE + 40)
  2158. #define ERROR_INTERNET_MIXED_SECURITY (INTERNET_ERROR_BASE + 41)
  2159. #define ERROR_INTERNET_CHG_POST_IS_NON_SECURE (INTERNET_ERROR_BASE + 42)
  2160. #define ERROR_INTERNET_POST_IS_NON_SECURE (INTERNET_ERROR_BASE + 43)
  2161. #define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED (INTERNET_ERROR_BASE + 44)
  2162. #define ERROR_INTERNET_INVALID_CA (INTERNET_ERROR_BASE + 45)
  2163. #define ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP (INTERNET_ERROR_BASE + 46)
  2164. #define ERROR_INTERNET_ASYNC_THREAD_FAILED (INTERNET_ERROR_BASE + 47)
  2165. #define ERROR_INTERNET_REDIRECT_SCHEME_CHANGE (INTERNET_ERROR_BASE + 48)
  2166. #define ERROR_INTERNET_DIALOG_PENDING (INTERNET_ERROR_BASE + 49)
  2167. #define ERROR_INTERNET_RETRY_DIALOG (INTERNET_ERROR_BASE + 50)
  2168. ;begin_internal
  2169. #define ERROR_INTERNET_NO_NEW_CONTAINERS (INTERNET_ERROR_BASE + 51)
  2170. ;end_internal
  2171. #define ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR (INTERNET_ERROR_BASE + 52)
  2172. #define ERROR_INTERNET_INSERT_CDROM (INTERNET_ERROR_BASE + 53)
  2173. #define ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED (INTERNET_ERROR_BASE + 54)
  2174. #define ERROR_INTERNET_SEC_CERT_ERRORS (INTERNET_ERROR_BASE + 55)
  2175. #define ERROR_INTERNET_SEC_CERT_NO_REV (INTERNET_ERROR_BASE + 56)
  2176. #define ERROR_INTERNET_SEC_CERT_REV_FAILED (INTERNET_ERROR_BASE + 57)
  2177. //
  2178. // FTP API errors
  2179. //
  2180. #define ERROR_FTP_TRANSFER_IN_PROGRESS (INTERNET_ERROR_BASE + 110)
  2181. #define ERROR_FTP_DROPPED (INTERNET_ERROR_BASE + 111)
  2182. #define ERROR_FTP_NO_PASSIVE_MODE (INTERNET_ERROR_BASE + 112)
  2183. //
  2184. // gopher API errors
  2185. //
  2186. #define ERROR_GOPHER_PROTOCOL_ERROR (INTERNET_ERROR_BASE + 130)
  2187. #define ERROR_GOPHER_NOT_FILE (INTERNET_ERROR_BASE + 131)
  2188. #define ERROR_GOPHER_DATA_ERROR (INTERNET_ERROR_BASE + 132)
  2189. #define ERROR_GOPHER_END_OF_DATA (INTERNET_ERROR_BASE + 133)
  2190. #define ERROR_GOPHER_INVALID_LOCATOR (INTERNET_ERROR_BASE + 134)
  2191. #define ERROR_GOPHER_INCORRECT_LOCATOR_TYPE (INTERNET_ERROR_BASE + 135)
  2192. #define ERROR_GOPHER_NOT_GOPHER_PLUS (INTERNET_ERROR_BASE + 136)
  2193. #define ERROR_GOPHER_ATTRIBUTE_NOT_FOUND (INTERNET_ERROR_BASE + 137)
  2194. #define ERROR_GOPHER_UNKNOWN_LOCATOR (INTERNET_ERROR_BASE + 138)
  2195. //
  2196. // HTTP API errors
  2197. //
  2198. #define ERROR_HTTP_HEADER_NOT_FOUND (INTERNET_ERROR_BASE + 150)
  2199. #define ERROR_HTTP_DOWNLEVEL_SERVER (INTERNET_ERROR_BASE + 151)
  2200. #define ERROR_HTTP_INVALID_SERVER_RESPONSE (INTERNET_ERROR_BASE + 152)
  2201. #define ERROR_HTTP_INVALID_HEADER (INTERNET_ERROR_BASE + 153)
  2202. #define ERROR_HTTP_INVALID_QUERY_REQUEST (INTERNET_ERROR_BASE + 154)
  2203. #define ERROR_HTTP_HEADER_ALREADY_EXISTS (INTERNET_ERROR_BASE + 155)
  2204. #define ERROR_HTTP_REDIRECT_FAILED (INTERNET_ERROR_BASE + 156)
  2205. #define ERROR_HTTP_NOT_REDIRECTED (INTERNET_ERROR_BASE + 160)
  2206. #define ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION (INTERNET_ERROR_BASE + 161)
  2207. #define ERROR_HTTP_COOKIE_DECLINED (INTERNET_ERROR_BASE + 162)
  2208. #define ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION (INTERNET_ERROR_BASE + 168)
  2209. //
  2210. // additional Internet API error codes
  2211. //
  2212. #define ERROR_INTERNET_SECURITY_CHANNEL_ERROR (INTERNET_ERROR_BASE + 157)
  2213. #define ERROR_INTERNET_UNABLE_TO_CACHE_FILE (INTERNET_ERROR_BASE + 158)
  2214. #define ERROR_INTERNET_TCPIP_NOT_INSTALLED (INTERNET_ERROR_BASE + 159)
  2215. #define ERROR_INTERNET_DISCONNECTED (INTERNET_ERROR_BASE + 163)
  2216. #define ERROR_INTERNET_SERVER_UNREACHABLE (INTERNET_ERROR_BASE + 164)
  2217. #define ERROR_INTERNET_PROXY_SERVER_UNREACHABLE (INTERNET_ERROR_BASE + 165)
  2218. #define ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT (INTERNET_ERROR_BASE + 166)
  2219. #define ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT (INTERNET_ERROR_BASE + 167)
  2220. #define ERROR_INTERNET_SEC_INVALID_CERT (INTERNET_ERROR_BASE + 169)
  2221. #define ERROR_INTERNET_SEC_CERT_REVOKED (INTERNET_ERROR_BASE + 170)
  2222. // InternetAutodial specific errors
  2223. #define ERROR_INTERNET_FAILED_DUETOSECURITYCHECK (INTERNET_ERROR_BASE + 171)
  2224. #define ERROR_INTERNET_NOT_INITIALIZED (INTERNET_ERROR_BASE + 172)
  2225. #define ERROR_INTERNET_NEED_MSN_SSPI_PKG (INTERNET_ERROR_BASE + 173)
  2226. #define ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY (INTERNET_ERROR_BASE + 174)
  2227. #define INTERNET_ERROR_LAST ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY
  2228. ;begin_internal
  2229. #define ERROR_INTERNET_OFFLINE ERROR_INTERNET_DISCONNECTED
  2230. //
  2231. // internal error codes that are used to communicate specific information inside
  2232. // of Wininet but which are meaningless at the interface
  2233. //
  2234. #define INTERNET_INTERNAL_ERROR_BASE (INTERNET_ERROR_BASE + 900)
  2235. #define ERROR_INTERNET_INTERNAL_SOCKET_ERROR (INTERNET_INTERNAL_ERROR_BASE + 1)
  2236. #define ERROR_INTERNET_CONNECTION_AVAILABLE (INTERNET_INTERNAL_ERROR_BASE + 2)
  2237. #define ERROR_INTERNET_NO_KNOWN_SERVERS (INTERNET_INTERNAL_ERROR_BASE + 3)
  2238. #define ERROR_INTERNET_PING_FAILED (INTERNET_INTERNAL_ERROR_BASE + 4)
  2239. #define ERROR_INTERNET_NO_PING_SUPPORT (INTERNET_INTERNAL_ERROR_BASE + 5)
  2240. #define ERROR_INTERNET_CACHE_SUCCESS (INTERNET_INTERNAL_ERROR_BASE + 6)
  2241. #define ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION_EX (INTERNET_INTERNAL_ERROR_BASE + 7)
  2242. ;end_internal
  2243. //#endif // !defined(_WINERROR_)
  2244. //
  2245. // URLCACHE APIs
  2246. //
  2247. //
  2248. // datatype definitions.
  2249. //
  2250. //
  2251. // cache entry type flags.
  2252. //
  2253. #define NORMAL_CACHE_ENTRY 0x00000001
  2254. #define STICKY_CACHE_ENTRY 0x00000004
  2255. #define EDITED_CACHE_ENTRY 0x00000008
  2256. #define TRACK_OFFLINE_CACHE_ENTRY 0x00000010
  2257. #define TRACK_ONLINE_CACHE_ENTRY 0x00000020
  2258. #define SPARSE_CACHE_ENTRY 0x00010000
  2259. #define COOKIE_CACHE_ENTRY 0x00100000
  2260. #define URLHISTORY_CACHE_ENTRY 0x00200000
  2261. ;begin_internal
  2262. #define HTTP_1_1_CACHE_ENTRY 0x00000040
  2263. #define STATIC_CACHE_ENTRY 0x00000080
  2264. #define MUST_REVALIDATE_CACHE_ENTRY 0x00000100
  2265. #define COOKIE_ACCEPTED_CACHE_ENTRY 0x00001000
  2266. #define COOKIE_LEASHED_CACHE_ENTRY 0x00002000
  2267. #define COOKIE_DOWNGRADED_CACHE_ENTRY 0x00004000
  2268. #define COOKIE_REJECTED_CACHE_ENTRY 0x00008000
  2269. #define PENDING_DELETE_CACHE_ENTRY 0x00400000
  2270. #define OTHER_USER_CACHE_ENTRY 0x00800000
  2271. #define PRIVACY_IMPACTED_CACHE_ENTRY 0x02000000
  2272. #define POST_RESPONSE_CACHE_ENTRY 0x04000000
  2273. #define INSTALLED_CACHE_ENTRY 0x10000000
  2274. #define POST_CHECK_CACHE_ENTRY 0x20000000
  2275. #define IDENTITY_CACHE_ENTRY 0x80000000
  2276. // We include some entry types even if app doesn't specifically ask for them.
  2277. #define INCLUDE_BY_DEFAULT_CACHE_ENTRY \
  2278. ( HTTP_1_1_CACHE_ENTRY \
  2279. | STATIC_CACHE_ENTRY \
  2280. | MUST_REVALIDATE_CACHE_ENTRY \
  2281. | PRIVACY_IMPACTED_CACHE_ENTRY \
  2282. | POST_CHECK_CACHE_ENTRY \
  2283. | COOKIE_ACCEPTED_CACHE_ENTRY \
  2284. | COOKIE_LEASHED_CACHE_ENTRY \
  2285. | COOKIE_DOWNGRADED_CACHE_ENTRY \
  2286. | COOKIE_REJECTED_CACHE_ENTRY \
  2287. )
  2288. ;end_internal
  2289. #define URLCACHE_FIND_DEFAULT_FILTER NORMAL_CACHE_ENTRY \
  2290. | COOKIE_CACHE_ENTRY \
  2291. | URLHISTORY_CACHE_ENTRY \
  2292. | TRACK_OFFLINE_CACHE_ENTRY \
  2293. | TRACK_ONLINE_CACHE_ENTRY \
  2294. | STICKY_CACHE_ENTRY
  2295. //
  2296. // INTERNET_CACHE_ENTRY_INFO -
  2297. //
  2298. #if _MSC_VER >= 1200
  2299. #pragma warning(push)
  2300. #endif
  2301. #pragma warning(disable:4201)
  2302. typedef struct _INTERNET_CACHE_ENTRY_INFO% {
  2303. DWORD dwStructSize; // version of cache system.
  2304. LPTSTR% lpszSourceUrlName; // embedded pointer to the URL name string.
  2305. LPTSTR% lpszLocalFileName; // embedded pointer to the local file name.
  2306. DWORD CacheEntryType; // cache type bit mask.
  2307. DWORD dwUseCount; // current users count of the cache entry.
  2308. DWORD dwHitRate; // num of times the cache entry was retrieved.
  2309. DWORD dwSizeLow; // low DWORD of the file size.
  2310. DWORD dwSizeHigh; // high DWORD of the file size.
  2311. FILETIME LastModifiedTime; // last modified time of the file in GMT format.
  2312. FILETIME ExpireTime; // expire time of the file in GMT format
  2313. FILETIME LastAccessTime; // last accessed time in GMT format
  2314. FILETIME LastSyncTime; // last time the URL was synchronized
  2315. // with the source
  2316. LPTSTR% lpHeaderInfo; // embedded pointer to the header info.
  2317. DWORD dwHeaderInfoSize; // size of the above header.
  2318. LPTSTR% lpszFileExtension; // File extension used to retrive the urldata as a file.
  2319. union { // Exemption delta from last access time.
  2320. DWORD dwReserved;
  2321. DWORD dwExemptDelta;
  2322. }; // Exemption delta from last access
  2323. } INTERNET_CACHE_ENTRY_INFO%, * LPINTERNET_CACHE_ENTRY_INFO%;
  2324. #if _MSC_VER >= 1200
  2325. #pragma warning(pop)
  2326. #else
  2327. #pragma warning(default:4201)
  2328. #endif
  2329. typedef struct _INTERNET_CACHE_TIMESTAMPS {
  2330. FILETIME ftExpires;
  2331. FILETIME ftLastModified;
  2332. } INTERNET_CACHE_TIMESTAMPS, *LPINTERNET_CACHE_TIMESTAMPS;
  2333. //
  2334. // Cache Group
  2335. //
  2336. typedef LONGLONG GROUPID;
  2337. //
  2338. // Cache Group Flags
  2339. //
  2340. #define CACHEGROUP_ATTRIBUTE_GET_ALL 0xffffffff
  2341. #define CACHEGROUP_ATTRIBUTE_BASIC 0x00000001
  2342. #define CACHEGROUP_ATTRIBUTE_FLAG 0x00000002
  2343. #define CACHEGROUP_ATTRIBUTE_TYPE 0x00000004
  2344. #define CACHEGROUP_ATTRIBUTE_QUOTA 0x00000008
  2345. #define CACHEGROUP_ATTRIBUTE_GROUPNAME 0x00000010
  2346. #define CACHEGROUP_ATTRIBUTE_STORAGE 0x00000020
  2347. #define CACHEGROUP_FLAG_NONPURGEABLE 0x00000001
  2348. #define CACHEGROUP_FLAG_GIDONLY 0x00000004
  2349. #define CACHEGROUP_FLAG_FLUSHURL_ONDELETE 0x00000002
  2350. #define CACHEGROUP_SEARCH_ALL 0x00000000
  2351. #define CACHEGROUP_SEARCH_BYURL 0x00000001
  2352. #define CACHEGROUP_TYPE_INVALID 0x00000001
  2353. //
  2354. // updatable cache group fields
  2355. //
  2356. #define CACHEGROUP_READWRITE_MASK \
  2357. CACHEGROUP_ATTRIBUTE_TYPE \
  2358. | CACHEGROUP_ATTRIBUTE_QUOTA \
  2359. | CACHEGROUP_ATTRIBUTE_GROUPNAME \
  2360. | CACHEGROUP_ATTRIBUTE_STORAGE
  2361. //
  2362. // INTERNET_CACHE_GROUP_INFO
  2363. //
  2364. #define GROUPNAME_MAX_LENGTH 120
  2365. #define GROUP_OWNER_STORAGE_SIZE 4
  2366. typedef struct _INTERNET_CACHE_GROUP_INFO% {
  2367. DWORD dwGroupSize;
  2368. DWORD dwGroupFlags;
  2369. DWORD dwGroupType;
  2370. DWORD dwDiskUsage; // in KB
  2371. DWORD dwDiskQuota; // in KB
  2372. DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];
  2373. TCHAR% szGroupName[GROUPNAME_MAX_LENGTH];
  2374. } INTERNET_CACHE_GROUP_INFO%, * LPINTERNET_CACHE_GROUP_INFO%;
  2375. ;begin_internal
  2376. //
  2377. // Well known sticky group ID
  2378. //
  2379. #define CACHEGROUP_ID_BUILTIN_STICKY 0x1000000000000007
  2380. //
  2381. // INTERNET_CACHE_CONFIG_PATH_ENTRY
  2382. //
  2383. typedef struct _INTERNET_CACHE_CONFIG_PATH_ENTRY% {
  2384. TCHAR% CachePath[MAX_PATH];
  2385. DWORD dwCacheSize; // in KBytes
  2386. } INTERNET_CACHE_CONFIG_PATH_ENTRY%, * LPINTERNET_CACHE_CONFIG_PATH_ENTRY%;
  2387. //
  2388. // INTERNET_CACHE_CONFIG_INFO
  2389. //
  2390. #if _MSC_VER >= 1200
  2391. #pragma warning(push)
  2392. #endif
  2393. #pragma warning(disable:4201)
  2394. typedef struct _INTERNET_CACHE_CONFIG_INFO% {
  2395. DWORD dwStructSize;
  2396. DWORD dwContainer;
  2397. DWORD dwQuota;
  2398. DWORD dwReserved4;
  2399. BOOL fPerUser;
  2400. DWORD dwSyncMode;
  2401. DWORD dwNumCachePaths;
  2402. union
  2403. {
  2404. struct
  2405. {
  2406. TCHAR% CachePath[MAX_PATH];
  2407. DWORD dwCacheSize;
  2408. };
  2409. INTERNET_CACHE_CONFIG_PATH_ENTRY% CachePaths[ANYSIZE_ARRAY];
  2410. };
  2411. DWORD dwNormalUsage;
  2412. DWORD dwExemptUsage;
  2413. } INTERNET_CACHE_CONFIG_INFO%, * LPINTERNET_CACHE_CONFIG_INFO%;
  2414. #if _MSC_VER >= 1200
  2415. #pragma warning(pop)
  2416. #else
  2417. #pragma warning(disable:4201)
  2418. #endif
  2419. BOOLAPI IsUrlCacheEntryExpired%(
  2420. IN LPCTSTR% lpszUrlName,
  2421. IN DWORD dwFlags,
  2422. IN OUT FILETIME* pftLastModified
  2423. );
  2424. ;end_internal
  2425. //
  2426. // Cache APIs
  2427. //
  2428. BOOLAPI CreateUrlCacheEntry%(
  2429. IN LPCTSTR% lpszUrlName,
  2430. IN DWORD dwExpectedFileSize,
  2431. IN LPCTSTR% lpszFileExtension,
  2432. OUT LPTSTR% lpszFileName,
  2433. IN DWORD dwReserved
  2434. );
  2435. #ifndef USE_FIXED_COMMIT_URL_CACHE_ENTRY
  2436. // Temporary state of affairs until we reconcile our apis.
  2437. // Why are we doing this? HeaderInfo _should_ be string data.
  2438. // However, one group is passing binary data instead. For the
  2439. // unicode api, we've decided to disallow this, but this
  2440. // brings up an inconsistency between the u and a apis, which
  2441. // is undesirable.
  2442. // For Beta 1, we'll go with this behaviour, but in future releases
  2443. // we want to make these apis consistent.
  2444. BOOLAPI CommitUrlCacheEntryA(
  2445. IN LPCSTR lpszUrlName,
  2446. IN LPCSTR lpszLocalFileName,
  2447. IN FILETIME ExpireTime,
  2448. IN FILETIME LastModifiedTime,
  2449. IN DWORD CacheEntryType,
  2450. IN LPBYTE lpHeaderInfo,
  2451. IN DWORD dwHeaderSize,
  2452. IN LPCSTR lpszFileExtension,
  2453. IN LPCSTR lpszOriginalUrl
  2454. );
  2455. BOOLAPI CommitUrlCacheEntryW(
  2456. IN LPCWSTR lpszUrlName,
  2457. IN LPCWSTR lpszLocalFileName,
  2458. IN FILETIME ExpireTime,
  2459. IN FILETIME LastModifiedTime,
  2460. IN DWORD CacheEntryType,
  2461. IN LPWSTR lpHeaderInfo,
  2462. IN DWORD dwHeaderSize,
  2463. IN LPCWSTR lpszFileExtension,
  2464. IN LPCWSTR lpszOriginalUrl
  2465. );
  2466. #ifdef UNICODE
  2467. #define CommitUrlCacheEntry CommitUrlCacheEntryW
  2468. #else
  2469. #define CommitUrlCacheEntry CommitUrlCacheEntryA
  2470. #endif
  2471. #else
  2472. CommitUrlCacheEntry%(
  2473. IN LPCTSTR% lpszUrlName,
  2474. IN LPCTSTR% lpszLocalFileName,
  2475. IN FILETIME ExpireTime,
  2476. IN FILETIME LastModifiedTime,
  2477. IN DWORD CacheEntryType,
  2478. IN LPCTSTR% lpHeaderInfo,
  2479. IN DWORD dwHeaderSize,
  2480. IN LPCTSTR% lpszFileExtension,
  2481. IN LPCTSTR% lpszOriginalUrl
  2482. );
  2483. #endif
  2484. BOOLAPI RetrieveUrlCacheEntryFile%(
  2485. IN LPCTSTR% lpszUrlName,
  2486. OUT LPINTERNET_CACHE_ENTRY_INFO% lpCacheEntryInfo,
  2487. IN OUT LPDWORD lpdwCacheEntryInfoBufferSize,
  2488. IN DWORD dwReserved
  2489. );
  2490. BOOLAPI UnlockUrlCacheEntryFileA(
  2491. IN LPCSTR lpszUrlName,
  2492. IN DWORD dwReserved
  2493. );
  2494. BOOLAPI UnlockUrlCacheEntryFileW(
  2495. IN LPCWSTR lpszUrlName,
  2496. IN DWORD dwReserved
  2497. );
  2498. #ifdef UNICODE
  2499. #define UnlockUrlCacheEntryFile UnlockUrlCacheEntryFileW
  2500. #else
  2501. #ifdef _WINX32_
  2502. #define UnlockUrlCacheEntryFile UnlockUrlCacheEntryFileA
  2503. #else
  2504. BOOLAPI UnlockUrlCacheEntryFile(
  2505. IN LPCSTR lpszUrlName,
  2506. IN DWORD dwReserved
  2507. );
  2508. #endif // _WINX32_
  2509. #endif // !UNICODE
  2510. INTERNETAPI_(HANDLE) RetrieveUrlCacheEntryStream%(
  2511. IN LPCTSTR% lpszUrlName,
  2512. OUT LPINTERNET_CACHE_ENTRY_INFO% lpCacheEntryInfo,
  2513. IN OUT LPDWORD lpdwCacheEntryInfoBufferSize,
  2514. IN BOOL fRandomRead,
  2515. IN DWORD dwReserved
  2516. );
  2517. BOOLAPI ReadUrlCacheEntryStream(
  2518. IN HANDLE hUrlCacheStream,
  2519. IN DWORD dwLocation,
  2520. IN OUT LPVOID lpBuffer,
  2521. IN OUT LPDWORD lpdwLen,
  2522. IN DWORD Reserved
  2523. );
  2524. BOOLAPI UnlockUrlCacheEntryStream(
  2525. IN HANDLE hUrlCacheStream,
  2526. IN DWORD Reserved
  2527. );
  2528. URLCACHEAPI_(BOOL) GetUrlCacheEntryInfo%(
  2529. IN LPCTSTR% lpszUrlName,
  2530. OUT LPINTERNET_CACHE_ENTRY_INFO% lpCacheEntryInfo,
  2531. IN OUT LPDWORD lpdwCacheEntryInfoBufferSize
  2532. );
  2533. URLCACHEAPI_(HANDLE) FindFirstUrlCacheGroup(
  2534. IN DWORD dwFlags,
  2535. IN DWORD dwFilter,
  2536. IN LPVOID lpSearchCondition,
  2537. IN DWORD dwSearchCondition,
  2538. OUT GROUPID* lpGroupId,
  2539. IN OUT LPVOID lpReserved
  2540. );
  2541. URLCACHEAPI_(BOOL) FindNextUrlCacheGroup(
  2542. IN HANDLE hFind,
  2543. OUT GROUPID* lpGroupId,
  2544. IN OUT LPVOID lpReserved
  2545. );
  2546. URLCACHEAPI_(BOOL) GetUrlCacheGroupAttribute%(
  2547. IN GROUPID gid,
  2548. IN DWORD dwFlags,
  2549. IN DWORD dwAttributes,
  2550. OUT LPINTERNET_CACHE_GROUP_INFO% lpGroupInfo,
  2551. IN OUT LPDWORD lpdwGroupInfo,
  2552. IN OUT LPVOID lpReserved
  2553. );
  2554. URLCACHEAPI_(BOOL) SetUrlCacheGroupAttribute%(
  2555. IN GROUPID gid,
  2556. IN DWORD dwFlags,
  2557. IN DWORD dwAttributes,
  2558. IN LPINTERNET_CACHE_GROUP_INFO% lpGroupInfo,
  2559. IN OUT LPVOID lpReserved
  2560. );
  2561. INTERNETAPI_(GROUPID) CreateUrlCacheGroup(
  2562. IN DWORD dwFlags,
  2563. IN LPVOID lpReserved
  2564. );
  2565. BOOLAPI DeleteUrlCacheGroup(
  2566. IN GROUPID GroupId,
  2567. IN DWORD dwFlags,
  2568. IN LPVOID lpReserved
  2569. );
  2570. ;begin_internal
  2571. #define INTERNET_CACHE_FLAG_ALLOW_COLLISIONS 0x00000100
  2572. #define INTERNET_CACHE_FLAG_INSTALLED_ENTRY 0x00000200
  2573. #define INTERNET_CACHE_FLAG_ENTRY_OR_MAPPING 0x00000400
  2574. #define INTERNET_CACHE_FLAG_ADD_FILENAME_ONLY 0x00000800
  2575. #define INTERNET_CACHE_FLAG_GET_STRUCT_ONLY 0x00001000
  2576. ;end_internal
  2577. BOOLAPI GetUrlCacheEntryInfoEx%(
  2578. IN LPCTSTR% lpszUrl,
  2579. OUT LPINTERNET_CACHE_ENTRY_INFO% lpCacheEntryInfo,
  2580. IN OUT LPDWORD lpdwCacheEntryInfoBufSize,
  2581. OUT LPTSTR% lpszReserved, // must pass null
  2582. IN OUT LPDWORD lpdwReserved, // must pass null
  2583. LPVOID lpReserved, // must pass null
  2584. DWORD dwFlags // reserved
  2585. );
  2586. #define CACHE_ENTRY_ATTRIBUTE_FC 0x00000004
  2587. #define CACHE_ENTRY_HITRATE_FC 0x00000010
  2588. #define CACHE_ENTRY_MODTIME_FC 0x00000040
  2589. #define CACHE_ENTRY_EXPTIME_FC 0x00000080
  2590. #define CACHE_ENTRY_ACCTIME_FC 0x00000100
  2591. #define CACHE_ENTRY_SYNCTIME_FC 0x00000200
  2592. #define CACHE_ENTRY_HEADERINFO_FC 0x00000400
  2593. #define CACHE_ENTRY_EXEMPT_DELTA_FC 0x00000800
  2594. ;begin_internal
  2595. #define CACHE_ENTRY_TYPE_FC 0x00001000
  2596. #define CACHE_ENTRY_MODIFY_DATA_FC 0x80000000 // this appears unused
  2597. ;end_internal
  2598. BOOLAPI SetUrlCacheEntryInfo%(
  2599. IN LPCTSTR% lpszUrlName,
  2600. IN LPINTERNET_CACHE_ENTRY_INFO% lpCacheEntryInfo,
  2601. IN DWORD dwFieldControl
  2602. );
  2603. //
  2604. // Cache Group Functions
  2605. //
  2606. INTERNETAPI_(GROUPID) CreateUrlCacheGroup(
  2607. IN DWORD dwFlags,
  2608. IN LPVOID lpReserved // must pass NULL
  2609. );
  2610. BOOLAPI DeleteUrlCacheGroup(
  2611. IN GROUPID GroupId,
  2612. IN DWORD dwFlags, // must pass 0
  2613. IN LPVOID lpReserved // must pass NULL
  2614. );
  2615. // Flags for SetUrlCacheEntryGroup
  2616. #define INTERNET_CACHE_GROUP_ADD 0
  2617. #define INTERNET_CACHE_GROUP_REMOVE 1
  2618. BOOLAPI SetUrlCacheEntryGroupA(
  2619. IN LPCSTR lpszUrlName,
  2620. IN DWORD dwFlags,
  2621. IN GROUPID GroupId,
  2622. IN LPBYTE pbGroupAttributes, // must pass NULL
  2623. IN DWORD cbGroupAttributes, // must pass 0
  2624. IN LPVOID lpReserved // must pass NULL
  2625. );
  2626. BOOLAPI SetUrlCacheEntryGroupW(
  2627. IN LPCWSTR lpszUrlName,
  2628. IN DWORD dwFlags,
  2629. IN GROUPID GroupId,
  2630. IN LPBYTE pbGroupAttributes, // must pass NULL
  2631. IN DWORD cbGroupAttributes, // must pass 0
  2632. IN LPVOID lpReserved // must pass NULL
  2633. );
  2634. #ifdef UNICODE
  2635. #define SetUrlCacheEntryGroup SetUrlCacheEntryGroupW
  2636. #else
  2637. #ifdef _WINX32_
  2638. #define SetUrlCacheEntryGroup SetUrlCacheEntryGroupA
  2639. #else
  2640. BOOLAPI SetUrlCacheEntryGroup(
  2641. IN LPCSTR lpszUrlName,
  2642. IN DWORD dwFlags,
  2643. IN GROUPID GroupId,
  2644. IN LPBYTE pbGroupAttributes, // must pass NULL
  2645. IN DWORD cbGroupAttributes, // must pass 0
  2646. IN LPVOID lpReserved // must pass NULL
  2647. );
  2648. #endif // _WINX32_
  2649. #endif // !UNICODE
  2650. INTERNETAPI_(HANDLE) FindFirstUrlCacheEntryEx%(
  2651. IN LPCTSTR% lpszUrlSearchPattern,
  2652. IN DWORD dwFlags,
  2653. IN DWORD dwFilter,
  2654. IN GROUPID GroupId,
  2655. OUT LPINTERNET_CACHE_ENTRY_INFO% lpFirstCacheEntryInfo,
  2656. IN OUT LPDWORD lpdwFirstCacheEntryInfoBufferSize,
  2657. OUT LPVOID lpReserved, // must pass NULL
  2658. IN OUT LPDWORD pcbReserved2, // must pass NULL
  2659. IN LPVOID lpReserved3 // must pass NULL
  2660. );
  2661. BOOLAPI FindNextUrlCacheEntryEx%(
  2662. IN HANDLE hEnumHandle,
  2663. OUT LPINTERNET_CACHE_ENTRY_INFO% lpFirstCacheEntryInfo,
  2664. IN OUT LPDWORD lpdwFirstCacheEntryInfoBufferSize,
  2665. OUT LPVOID lpReserved, // must pass NULL
  2666. IN OUT LPDWORD pcbReserved2, // must pass NULL
  2667. IN LPVOID lpReserved3 // must pass NULL
  2668. );
  2669. INTERNETAPI_(HANDLE) FindFirstUrlCacheEntry%(
  2670. IN LPCTSTR% lpszUrlSearchPattern,
  2671. OUT LPINTERNET_CACHE_ENTRY_INFO% lpFirstCacheEntryInfo,
  2672. IN OUT LPDWORD lpdwFirstCacheEntryInfoBufferSize
  2673. );
  2674. BOOLAPI FindNextUrlCacheEntry%(
  2675. IN HANDLE hEnumHandle,
  2676. OUT LPINTERNET_CACHE_ENTRY_INFO% lpNextCacheEntryInfo,
  2677. IN OUT LPDWORD lpdwNextCacheEntryInfoBufferSize
  2678. );
  2679. ;begin_internal
  2680. // Flags for CreateContainer
  2681. #define INTERNET_CACHE_CONTAINER_NOSUBDIRS (0x1)
  2682. #define INTERNET_CACHE_CONTAINER_AUTODELETE (0x2)
  2683. #define INTERNET_CACHE_CONTAINER_RESERVED1 (0x4)
  2684. #define INTERNET_CACHE_CONTAINER_NODESKTOPINIT (0x8)
  2685. #define INTERNET_CACHE_CONTAINER_MAP_ENABLED (0x10)
  2686. BOOLAPI CreateUrlCacheContainer%(
  2687. IN LPCTSTR% Name,
  2688. IN LPCTSTR% lpCachePrefix,
  2689. LPCTSTR% lpszCachePath,
  2690. IN DWORD KBCacheLimit,
  2691. IN DWORD dwContainerType,
  2692. IN DWORD dwOptions,
  2693. IN OUT LPVOID pvBuffer,
  2694. IN OUT LPDWORD cbBuffer
  2695. );
  2696. BOOLAPI DeleteUrlCacheContainer%(
  2697. IN LPCTSTR% Name,
  2698. IN DWORD dwOptions
  2699. );
  2700. //
  2701. // INTERNET_CACHE_ENTRY_INFO -
  2702. //
  2703. typedef struct _INTERNET_CACHE_CONTAINER_INFO% {
  2704. DWORD dwCacheVersion; // version of software
  2705. LPTSTR% lpszName; // embedded pointer to the container name string.
  2706. LPTSTR% lpszCachePrefix; // embedded pointer to the container URL prefix
  2707. LPTSTR% lpszVolumeLabel; // embedded pointer to the container volume label if any.
  2708. LPTSTR% lpszVolumeTitle; // embedded pointer to the container volume title if any.
  2709. } INTERNET_CACHE_CONTAINER_INFO%, * LPINTERNET_CACHE_CONTAINER_INFO%;
  2710. // FindFirstContainer options
  2711. #define CACHE_FIND_CONTAINER_RETURN_NOCHANGE (0x1)
  2712. INTERNETAPI_(HANDLE) FindFirstUrlCacheContainer%(
  2713. IN OUT LPDWORD pdwModified,
  2714. OUT LPINTERNET_CACHE_CONTAINER_INFO% lpContainerInfo,
  2715. IN OUT LPDWORD lpdwContainerInfoBufferSize,
  2716. IN DWORD dwOptions
  2717. );
  2718. BOOLAPI FindNextUrlCacheContainer%(
  2719. IN HANDLE hEnumHandle,
  2720. OUT LPINTERNET_CACHE_CONTAINER_INFO% lpContainerInfo,
  2721. IN OUT LPDWORD lpdwContainerInfoBufferSize
  2722. );
  2723. ;end_internal
  2724. BOOLAPI FindCloseUrlCache(
  2725. IN HANDLE hEnumHandle
  2726. );
  2727. BOOLAPI DeleteUrlCacheEntryA(
  2728. IN LPCSTR lpszUrlName
  2729. );
  2730. BOOLAPI DeleteUrlCacheEntryW(
  2731. IN LPCWSTR lpszUrlName
  2732. );
  2733. #ifdef UNICODE
  2734. #define DeleteUrlCacheEntry DeleteUrlCacheEntryW
  2735. #else
  2736. #ifdef _WINX32_
  2737. #define DeleteUrlCacheEntry DeleteUrlCacheEntryA
  2738. #else
  2739. BOOLAPI DeleteUrlCacheEntry(
  2740. IN LPCSTR lpszUrlName
  2741. );
  2742. #endif // _WINX32_
  2743. #endif // !UNICODE
  2744. ;begin_internal
  2745. typedef enum {
  2746. WININET_SYNC_MODE_NEVER=0,
  2747. WININET_SYNC_MODE_ON_EXPIRY, // bogus
  2748. WININET_SYNC_MODE_ONCE_PER_SESSION,
  2749. WININET_SYNC_MODE_ALWAYS,
  2750. WININET_SYNC_MODE_AUTOMATIC,
  2751. WININET_SYNC_MODE_DEFAULT = WININET_SYNC_MODE_AUTOMATIC
  2752. } WININET_SYNC_MODE;
  2753. BOOLAPI FreeUrlCacheSpace%(
  2754. IN LPCTSTR% lpszCachePath,
  2755. IN DWORD dwSize,
  2756. IN DWORD dwFilter
  2757. );
  2758. //
  2759. // config APIs.
  2760. //
  2761. #define CACHE_CONFIG_FORCE_CLEANUP_FC 0x00000020
  2762. #define CACHE_CONFIG_DISK_CACHE_PATHS_FC 0x00000040
  2763. #define CACHE_CONFIG_SYNC_MODE_FC 0x00000080
  2764. #define CACHE_CONFIG_CONTENT_PATHS_FC 0x00000100
  2765. #define CACHE_CONFIG_COOKIES_PATHS_FC 0x00000200
  2766. #define CACHE_CONFIG_HISTORY_PATHS_FC 0x00000400
  2767. #define CACHE_CONFIG_QUOTA_FC 0x00000800
  2768. #define CACHE_CONFIG_USER_MODE_FC 0x00001000
  2769. #define CACHE_CONFIG_CONTENT_USAGE_FC 0x00002000
  2770. #define CACHE_CONFIG_STICKY_CONTENT_USAGE_FC 0x00004000
  2771. BOOLAPI GetUrlCacheConfigInfo%(
  2772. OUT LPINTERNET_CACHE_CONFIG_INFO% lpCacheConfigInfo,
  2773. IN OUT LPDWORD lpdwCacheConfigInfoBufferSize,
  2774. IN DWORD dwFieldControl
  2775. );
  2776. BOOLAPI SetUrlCacheConfigInfo%(
  2777. IN LPINTERNET_CACHE_CONFIG_INFO% lpCacheConfigInfo,
  2778. IN DWORD dwFieldControl
  2779. );
  2780. INTERNETAPI_(DWORD) RunOnceUrlCache(
  2781. HWND hwnd,
  2782. HINSTANCE hinst,
  2783. LPSTR lpszCmd,
  2784. int nCmdShow);
  2785. INTERNETAPI_(DWORD) DeleteIE3Cache(
  2786. HWND hwnd,
  2787. HINSTANCE hinst,
  2788. LPSTR lpszCmd,
  2789. int nCmdShow);
  2790. BOOLAPI UpdateUrlCacheContentPath(LPSTR szNewPath);
  2791. // Cache header data defines.
  2792. #define CACHE_HEADER_DATA_CURRENT_SETTINGS_VERSION 0
  2793. #define CACHE_HEADER_DATA_CONLIST_CHANGE_COUNT 1
  2794. #define CACHE_HEADER_DATA_COOKIE_CHANGE_COUNT 2
  2795. ;begin_internal
  2796. #define CACHE_HEADER_DATA_NOTIFICATION_HWND 3
  2797. #define CACHE_HEADER_DATA_NOTIFICATION_MESG 4
  2798. #define CACHE_HEADER_DATA_ROOTGROUP_OFFSET 5
  2799. #define CACHE_HEADER_DATA_GID_LOW 6
  2800. #define CACHE_HEADER_DATA_GID_HIGH 7
  2801. // beta logging stats
  2802. #define CACHE_HEADER_DATA_CACHE_NOT_EXPIRED 8
  2803. #define CACHE_HEADER_DATA_CACHE_NOT_MODIFIED 9
  2804. #define CACHE_HEADER_DATA_CACHE_MODIFIED 10
  2805. #define CACHE_HEADER_DATA_CACHE_RESUMED 11
  2806. #define CACHE_HEADER_DATA_CACHE_NOT_RESUMED 12
  2807. #define CACHE_HEADER_DATA_CACHE_MISS 13
  2808. #define CACHE_HEADER_DATA_DOWNLOAD_PARTIAL 14
  2809. #define CACHE_HEADER_DATA_DOWNLOAD_ABORTED 15
  2810. #define CACHE_HEADER_DATA_DOWNLOAD_CACHED 16
  2811. #define CACHE_HEADER_DATA_DOWNLOAD_NOT_CACHED 17
  2812. #define CACHE_HEADER_DATA_DOWNLOAD_NO_FILE 18
  2813. #define CACHE_HEADER_DATA_DOWNLOAD_FILE_NEEDED 19
  2814. #define CACHE_HEADER_DATA_DOWNLOAD_FILE_NOT_NEEDED 20
  2815. // retail data
  2816. #define CACHE_HEADER_DATA_NOTIFICATION_FILTER 21
  2817. #define CACHE_HEADER_DATA_ROOT_LEAK_OFFSET 22
  2818. // more beta logging stats
  2819. #define CACHE_HEADER_DATA_SYNCSTATE_IMAGE 23
  2820. #define CACHE_HEADER_DATA_SYNCSTATE_VOLATILE 24
  2821. #define CACHE_HEADER_DATA_SYNCSTATE_IMAGE_STATIC 25
  2822. #define CACHE_HEADER_DATA_SYNCSTATE_STATIC_VOLATILE 26
  2823. // retail data
  2824. #define CACHE_HEADER_DATA_ROOT_GROUPLIST_OFFSET 27 // offset to group list
  2825. #define CACHE_HEADER_DATA_ROOT_FIXUP_OFFSET 28 // offset to fixup list
  2826. #define CACHE_HEADER_DATA_ROOT_FIXUP_COUNT 29 // num of fixup items
  2827. #define CACHE_HEADER_DATA_ROOT_FIXUP_TRIGGER 30 // threshhold to fix up
  2828. #define CACHE_HEADER_DATA_HIGH_VERSION_STRING 31 // highest entry ver
  2829. #define CACHE_HEADER_DATA_LAST 31
  2830. // options for cache notification filter
  2831. #define CACHE_NOTIFY_ADD_URL 0x00000001
  2832. #define CACHE_NOTIFY_DELETE_URL 0x00000002
  2833. #define CACHE_NOTIFY_UPDATE_URL 0x00000004
  2834. #define CACHE_NOTIFY_DELETE_ALL 0x00000008
  2835. #define CACHE_NOTIFY_URL_SET_STICKY 0x00000010
  2836. #define CACHE_NOTIFY_URL_UNSET_STICKY 0x00000020
  2837. #define CACHE_NOTIFY_SET_ONLINE 0x00000100
  2838. #define CACHE_NOTIFY_SET_OFFLINE 0x00000200
  2839. #define CACHE_NOTIFY_FILTER_CHANGED 0x10000000
  2840. BOOLAPI
  2841. RegisterUrlCacheNotification(
  2842. IN HWND hWnd,
  2843. IN UINT uMsg,
  2844. IN GROUPID gid,
  2845. IN DWORD dwOpsFilter,
  2846. IN DWORD dwReserved
  2847. );
  2848. ;end_internal
  2849. BOOL
  2850. GetUrlCacheHeaderData(IN DWORD nIdx, OUT LPDWORD lpdwData);
  2851. BOOL
  2852. SetUrlCacheHeaderData(IN DWORD nIdx, IN DWORD dwData);
  2853. BOOL
  2854. IncrementUrlCacheHeaderData(IN DWORD nIdx, OUT LPDWORD lpdwData);
  2855. BOOL
  2856. LoadUrlCacheContent();
  2857. BOOL
  2858. GetUrlCacheContainerInfo%(
  2859. IN LPTSTR% lpszUrlName,
  2860. OUT LPINTERNET_CACHE_CONTAINER_INFO% lpContainerInfo,
  2861. IN OUT LPDWORD lpdwContainerInfoBufferSize,
  2862. IN DWORD dwOptions
  2863. );
  2864. ;end_internal
  2865. ;begin_both
  2866. //
  2867. // Autodial APIs
  2868. //
  2869. INTERNETAPI_(DWORD) InternetDialA(
  2870. IN HWND hwndParent,
  2871. IN LPSTR lpszConnectoid,
  2872. IN DWORD dwFlags,
  2873. OUT DWORD_PTR *lpdwConnection,
  2874. IN DWORD dwReserved
  2875. );
  2876. INTERNETAPI_(DWORD) InternetDialW(
  2877. IN HWND hwndParent,
  2878. IN LPWSTR lpszConnectoid,
  2879. IN DWORD dwFlags,
  2880. OUT DWORD_PTR *lpdwConnection,
  2881. IN DWORD dwReserved
  2882. );
  2883. #ifdef UNICODE
  2884. #define InternetDial InternetDialW
  2885. #else
  2886. #ifdef _WINX32_
  2887. #define InternetDial InternetDialA
  2888. #else
  2889. INTERNETAPI_(DWORD) InternetDial(
  2890. IN HWND hwndParent,
  2891. IN LPSTR lpszConnectoid,
  2892. IN DWORD dwFlags,
  2893. OUT LPDWORD lpdwConnection,
  2894. IN DWORD dwReserved
  2895. );
  2896. #endif // _WINX32_
  2897. #endif // !UNICODE
  2898. // Flags for InternetDial - must not conflict with InternetAutodial flags
  2899. // as they are valid here also.
  2900. #define INTERNET_DIAL_FORCE_PROMPT 0x2000
  2901. #define INTERNET_DIAL_SHOW_OFFLINE 0x4000
  2902. #define INTERNET_DIAL_UNATTENDED 0x8000
  2903. INTERNETAPI_(DWORD) InternetHangUp(
  2904. IN DWORD_PTR dwConnection,
  2905. IN DWORD dwReserved);
  2906. #define INTERENT_GOONLINE_REFRESH 0x00000001
  2907. #define INTERENT_GOONLINE_MASK 0x00000001
  2908. INTERNETAPI_(BOOL) InternetGoOnlineA(
  2909. IN LPSTR lpszURL,
  2910. IN HWND hwndParent,
  2911. IN DWORD dwFlags
  2912. );
  2913. INTERNETAPI_(BOOL) InternetGoOnlineW(
  2914. IN LPWSTR lpszURL,
  2915. IN HWND hwndParent,
  2916. IN DWORD dwFlags
  2917. );
  2918. #ifdef UNICODE
  2919. #define InternetGoOnline InternetGoOnlineW
  2920. #else
  2921. #ifdef _WINX32_
  2922. #define InternetGoOnline InternetGoOnlineA
  2923. #else
  2924. INTERNETAPI_(BOOL) InternetGoOnline(
  2925. IN LPSTR lpszURL,
  2926. IN HWND hwndParent,
  2927. IN DWORD dwFlags
  2928. );
  2929. #endif // _WINX32_
  2930. #endif // !UNICODE
  2931. INTERNETAPI_(BOOL) InternetAutodial(
  2932. IN DWORD dwFlags,
  2933. IN HWND hwndParent);
  2934. // Flags for InternetAutodial
  2935. #define INTERNET_AUTODIAL_FORCE_ONLINE 1
  2936. #define INTERNET_AUTODIAL_FORCE_UNATTENDED 2
  2937. #define INTERNET_AUTODIAL_FAILIFSECURITYCHECK 4
  2938. #define INTERNET_AUTODIAL_OVERRIDE_NET_PRESENT 8
  2939. #define INTERNET_AUTODIAL_FLAGS_MASK (INTERNET_AUTODIAL_FORCE_ONLINE | INTERNET_AUTODIAL_FORCE_UNATTENDED | INTERNET_AUTODIAL_FAILIFSECURITYCHECK | INTERNET_AUTODIAL_OVERRIDE_NET_PRESENT)
  2940. INTERNETAPI_(BOOL) InternetAutodialHangup(
  2941. IN DWORD dwReserved);
  2942. INTERNETAPI_(BOOL) InternetGetConnectedState(
  2943. OUT LPDWORD lpdwFlags,
  2944. IN DWORD dwReserved);
  2945. INTERNETAPI_(BOOL) InternetGetConnectedStateExA(
  2946. OUT LPDWORD lpdwFlags,
  2947. OUT LPSTR lpszConnectionName,
  2948. IN DWORD dwNameLen,
  2949. IN DWORD dwReserved
  2950. );
  2951. INTERNETAPI_(BOOL) InternetGetConnectedStateExW(
  2952. OUT LPDWORD lpdwFlags,
  2953. OUT LPWSTR lpszConnectionName,
  2954. IN DWORD dwNameLen,
  2955. IN DWORD dwReserved
  2956. );
  2957. ;end_both
  2958. ;begin_internal
  2959. INTERNETAPI
  2960. InternetGetDialEngineW(
  2961. IN LPWSTR pwzConnectoid,
  2962. IN IDialEventSink * pdes,
  2963. OUT IDialEngine ** ppde
  2964. );
  2965. INTERNETAPI
  2966. InternetGetDialBrandingW(
  2967. IN LPWSTR pwzConnectoid,
  2968. OUT IDialBranding ** ppdb
  2969. );
  2970. ;end_internal
  2971. #define PROXY_AUTO_DETECT_TYPE_DHCP 1
  2972. #define PROXY_AUTO_DETECT_TYPE_DNS_A 2
  2973. struct AutoProxyHelperFunctions;
  2974. typedef struct AutoProxyHelperVtbl
  2975. {
  2976. BOOL ( __stdcall *IsResolvable )(
  2977. LPSTR lpszHost);
  2978. DWORD ( __stdcall *GetIPAddress )(
  2979. LPSTR lpszIPAddress,
  2980. LPDWORD lpdwIPAddressSize);
  2981. DWORD ( __stdcall *ResolveHostName )(
  2982. LPSTR lpszHostName,
  2983. LPSTR lpszIPAddress,
  2984. LPDWORD lpdwIPAddressSize);
  2985. BOOL ( __stdcall *IsInNet )(
  2986. LPSTR lpszIPAddress,
  2987. LPSTR lpszDest,
  2988. LPSTR lpszMask);
  2989. }AutoProxyHelperVtbl;
  2990. typedef struct
  2991. {
  2992. DWORD dwStructSize; // Size of struct
  2993. LPSTR lpszScriptBuffer; // Buffer to Pass
  2994. DWORD dwScriptBufferSize; // Size of buffer above
  2995. } AUTO_PROXY_SCRIPT_BUFFER, *LPAUTO_PROXY_SCRIPT_BUFFER;
  2996. typedef struct AutoProxyHelperFunctions
  2997. {
  2998. const struct AutoProxyHelperVtbl * lpVtbl;
  2999. } AutoProxyHelperFunctions;
  3000. typedef BOOL ( CALLBACK *pfnInternetInitializeAutoProxyDll)(DWORD dwVersion,
  3001. LPSTR lpszDownloadedTempFile,
  3002. LPSTR lpszMime,
  3003. AutoProxyHelperFunctions* lpAutoProxyCallbacks,
  3004. LPAUTO_PROXY_SCRIPT_BUFFER lpAutoProxyScriptBuffer );
  3005. typedef BOOL (CALLBACK *pfnInternetDeInitializeAutoProxyDll)(LPSTR lpszMime,
  3006. DWORD dwReserved);
  3007. typedef BOOL (CALLBACK *pfnInternetGetProxyInfo)(LPCSTR lpszUrl,
  3008. DWORD dwUrlLength,
  3009. LPSTR lpszUrlHostName,
  3010. DWORD dwUrlHostNameLength,
  3011. LPSTR* lplpszProxyHostName,
  3012. LPDWORD lpdwProxyHostNameLength);
  3013. ;begin_both
  3014. INTERNETAPI_(BOOL) InternetInitializeAutoProxyDll(
  3015. DWORD dwReserved
  3016. );
  3017. INTERNETAPI_(BOOL) DetectAutoProxyUrl(
  3018. IN OUT LPSTR lpszAutoProxyUrl,
  3019. IN DWORD dwAutoProxyUrlLength,
  3020. IN DWORD dwDetectFlags
  3021. );
  3022. INTERNETAPI_(BOOL) CreateMD5SSOHash (
  3023. IN PWSTR pszChallengeInfo,
  3024. IN PWSTR pwszRealm,
  3025. IN PWSTR pwszTarget,
  3026. OUT PBYTE pbHexHash
  3027. );
  3028. #ifdef UNICODE
  3029. #define InternetGetConnectedStateEx InternetGetConnectedStateExW
  3030. #else
  3031. #ifdef _WINX32_
  3032. #define InternetGetConnectedStateEx InternetGetConnectedStateExA
  3033. #else
  3034. INTERNETAPI_(BOOL) InternetGetConnectedStateEx(
  3035. OUT LPDWORD lpdwFlags,
  3036. IN LPSTR lpszConnectionName,
  3037. IN DWORD dwNameLen,
  3038. IN DWORD dwReserved
  3039. );
  3040. #endif // _WINX32_
  3041. #endif // !UNICODE
  3042. // Flags for InternetGetConnectedState and Ex
  3043. #define INTERNET_CONNECTION_MODEM 0x01
  3044. #define INTERNET_CONNECTION_LAN 0x02
  3045. #define INTERNET_CONNECTION_PROXY 0x04
  3046. #define INTERNET_CONNECTION_MODEM_BUSY 0x08 /* no longer used */
  3047. #define INTERNET_RAS_INSTALLED 0x10
  3048. #define INTERNET_CONNECTION_OFFLINE 0x20
  3049. #define INTERNET_CONNECTION_CONFIGURED 0x40
  3050. //
  3051. // Custom dial handler functions
  3052. //
  3053. // Custom dial handler prototype
  3054. typedef DWORD (CALLBACK * PFN_DIAL_HANDLER) (HWND, LPCSTR, DWORD, LPDWORD);
  3055. // Flags for custom dial handler
  3056. #define INTERNET_CUSTOMDIAL_CONNECT 0
  3057. #define INTERNET_CUSTOMDIAL_UNATTENDED 1
  3058. #define INTERNET_CUSTOMDIAL_DISCONNECT 2
  3059. #define INTERNET_CUSTOMDIAL_SHOWOFFLINE 4
  3060. // Custom dial handler supported functionality flags
  3061. #define INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED 1
  3062. #define INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE 2
  3063. #define INTERNET_CUSTOMDIAL_CAN_HANGUP 4
  3064. INTERNETAPI_(BOOL) InternetSetDialStateA(
  3065. IN LPCSTR lpszConnectoid,
  3066. IN DWORD dwState,
  3067. IN DWORD dwReserved
  3068. );
  3069. INTERNETAPI_(BOOL) InternetSetDialStateW(
  3070. IN LPCWSTR lpszConnectoid,
  3071. IN DWORD dwState,
  3072. IN DWORD dwReserved
  3073. );
  3074. #ifdef UNICODE
  3075. #define InternetSetDialState InternetSetDialStateW
  3076. #else
  3077. #ifdef _WINX32_
  3078. #define InternetSetDialState InternetSetDialStateA
  3079. #else
  3080. INTERNETAPI_(BOOL) InternetSetDialState(
  3081. IN LPCSTR lpszConnectoid,
  3082. IN DWORD dwState,
  3083. IN DWORD dwReserved
  3084. );
  3085. #endif // _WINX32_
  3086. #endif // !UNICODE
  3087. // States for InternetSetDialState
  3088. #define INTERNET_DIALSTATE_DISCONNECTED 1
  3089. ;end_both
  3090. ;begin_internal
  3091. // Registry entries used by the dialing code
  3092. // All of these entries are in:
  3093. // HKCU\software\microsoft\windows\current version\internet settings
  3094. #define REGSTR_DIAL_AUTOCONNECT "AutoConnect"
  3095. // Registry entries for legacy cookies
  3096. #define REGSTR_LEASH_LEGACY_COOKIES "LeashLegacyCookies"
  3097. ;end_internal
  3098. ;begin_internal
  3099. // Used by security manager.
  3100. INTERNETAPI_(BOOL) IsHostInProxyBypassList(
  3101. IN INTERNET_SCHEME tScheme,
  3102. IN LPCSTR lpszHost,
  3103. IN DWORD cchHost);
  3104. // Used by Shell to determine if anyone has loaded wininet yet
  3105. // Shell code calls OpenMutex with this name and if no mutex is
  3106. // obtained, we know that no copy of wininet has been loaded yet
  3107. #define WININET_STARTUP_MUTEX "WininetStartupMutex"
  3108. ;end_internal
  3109. ;begin_internal
  3110. BOOL DoConnectoidsExist(void); // Returns TRUE if any RAS connectoids exist and FALSE otherwise
  3111. BOOL GetDiskInfoA(
  3112. IN PSTR pszPath,
  3113. IN OUT PDWORD pdwClusterSize,
  3114. IN OUT PDWORDLONG pdlAvail,
  3115. IN OUT PDWORDLONG pdlTotal);
  3116. typedef BOOL (*CACHE_OPERATOR)(INTERNET_CACHE_ENTRY_INFO* pcei, PDWORD pcbcei, PVOID pOpData);
  3117. BOOL PerformOperationOverUrlCacheA(
  3118. IN PCSTR pszUrlSearchPattern,
  3119. IN DWORD dwFlags,
  3120. IN DWORD dwFilter,
  3121. IN GROUPID GroupId,
  3122. OUT PVOID pReserved1,
  3123. IN OUT PDWORD pdwReserved2,
  3124. IN PVOID pReserved3,
  3125. IN CACHE_OPERATOR op,
  3126. IN OUT PVOID pOperatorData
  3127. );
  3128. BOOL IsProfilesCapable();
  3129. // in cookimp.cxx and cookexp.cxx
  3130. BOOLAPI ImportCookieFile%( IN LPCTSTR% szFilename );
  3131. BOOLAPI ExportCookieFile%( IN LPCTSTR% szFilename, BOOL fAppend);
  3132. BOOLAPI IsDomainLegalCookieDomain%( IN LPCTSTR% pchDomain, IN LPCTSTR% pchFullDomain); // in "wininet\http\cookie.cxx"
  3133. ;end_internal
  3134. INTERNETAPI_(BOOL) InternetSetPerSiteCookieDecision%( IN LPCTSTR% pchHostName, DWORD dwDecision);
  3135. INTERNETAPI_(BOOL) InternetGetPerSiteCookieDecision%( IN LPCTSTR% pchHostName, unsigned long* pResult);
  3136. INTERNETAPI_(BOOL) InternetClearAllPerSiteCookieDecisions();
  3137. ;begin_both
  3138. INTERNETAPI_(BOOL) InternetEnumPerSiteCookieDecision%(OUT LPTSTR% pszSiteName, IN OUT unsigned long *pcSiteNameSize, OUT unsigned long *pdwDecision, IN unsigned long dwIndex);
  3139. ;end_both
  3140. #define INTERNET_IDENTITY_FLAG_PRIVATE_CACHE 0x01
  3141. #define INTERNET_IDENTITY_FLAG_SHARED_CACHE 0x02
  3142. #define INTERNET_IDENTITY_FLAG_CLEAR_DATA 0x04
  3143. #define INTERNET_IDENTITY_FLAG_CLEAR_COOKIES 0x08
  3144. #define INTERNET_IDENTITY_FLAG_CLEAR_HISTORY 0x10
  3145. #define INTERNET_IDENTITY_FLAG_CLEAR_CONTENT 0x20
  3146. #define INTERNET_SUPPRESS_RESET_ALL 0x00
  3147. #define INTERNET_SUPPRESS_COOKIE_POLICY 0x01
  3148. #define INTERNET_SUPPRESS_COOKIE_POLICY_RESET 0x02
  3149. ;begin_both
  3150. //
  3151. // Privacy settings values and APIs
  3152. //
  3153. #define PRIVACY_TEMPLATE_NO_COOKIES 0
  3154. #define PRIVACY_TEMPLATE_HIGH 1
  3155. #define PRIVACY_TEMPLATE_MEDIUM_HIGH 2
  3156. #define PRIVACY_TEMPLATE_MEDIUM 3
  3157. #define PRIVACY_TEMPLATE_MEDIUM_LOW 4
  3158. #define PRIVACY_TEMPLATE_LOW 5
  3159. #define PRIVACY_TEMPLATE_CUSTOM 100
  3160. #define PRIVACY_TEMPLATE_ADVANCED 101
  3161. #define PRIVACY_TEMPLATE_MAX PRIVACY_TEMPLATE_LOW
  3162. #define PRIVACY_TYPE_FIRST_PARTY 0
  3163. #define PRIVACY_TYPE_THIRD_PARTY 1
  3164. INTERNETAPI_(DWORD)
  3165. PrivacySetZonePreferenceW(
  3166. DWORD dwZone,
  3167. DWORD dwType,
  3168. DWORD dwTemplate,
  3169. LPCWSTR pszPreference
  3170. );
  3171. INTERNETAPI_(DWORD)
  3172. PrivacyGetZonePreferenceW(
  3173. DWORD dwZone,
  3174. DWORD dwType,
  3175. LPDWORD pdwTemplate,
  3176. LPWSTR pszBuffer,
  3177. LPDWORD pdwBufferLength
  3178. );
  3179. ;end_both
  3180. ;begin_internal
  3181. #define _P3PGLOBAL_H_
  3182. typedef char P3PCHAR;
  3183. typedef char *P3PURL;
  3184. typedef char *P3PVERB;
  3185. typedef const char *P3PCURL;
  3186. typedef BSTR P3PCXSL;
  3187. typedef void *P3PHANDLE;
  3188. #define URL_LIMIT INTERNET_MAX_URL_LENGTH
  3189. struct P3PResource {
  3190. P3PCURL pszLocation;
  3191. P3PVERB pszVerb;
  3192. P3PCURL pszP3PHeaderRef;
  3193. P3PCURL pszLinkTagRef;
  3194. struct P3PResource *pContainer;
  3195. };
  3196. struct P3PSignal {
  3197. /* Window handle for PostMessage and corresponding msg value */
  3198. HWND hwnd;
  3199. unsigned int message;
  3200. /* Event handle to signal */
  3201. HANDLE hEvent;
  3202. /* Application-defined context */
  3203. void *pContext;
  3204. /* OUT: request handle */
  3205. P3PHANDLE hRequest;
  3206. };
  3207. typedef enum {
  3208. P3P_Done = 0x0,
  3209. P3P_Success = 0x0,
  3210. P3P_NoPolicy = 0x2,
  3211. P3P_InProgress = 0x3,
  3212. P3P_Failed = 0x4,
  3213. P3P_NotFound = 0x5,
  3214. P3P_FormatErr = 0x6,
  3215. P3P_Cancelled = 0x7,
  3216. P3P_NotStarted = 0x8,
  3217. P3P_XMLError = 0x9,
  3218. P3P_Expired = 0xA,
  3219. P3P_Error = 0xFF,
  3220. }
  3221. P3PStatus;
  3222. INTERNETAPI_(int) MapResourceToPolicy(struct P3PResource *pResource, P3PURL pszPolicy, unsigned long dwSize, struct P3PSignal *pSignal);
  3223. INTERNETAPI_(int) GetP3PPolicy(P3PCURL pszPolicyURL, HANDLE hDestination, P3PCXSL pszXSLtransform, struct P3PSignal *pSignal);
  3224. INTERNETAPI_(int) FreeP3PObject(P3PHANDLE hObject);
  3225. INTERNETAPI_(int) GetP3PRequestStatus(P3PHANDLE hObject);
  3226. ;end_internal
  3227. ;begin_both
  3228. #if defined(__cplusplus)
  3229. }
  3230. #endif
  3231. ;end_both
  3232. /*
  3233. * Return packing to whatever it was before we
  3234. * entered this file
  3235. */
  3236. #include <poppack.h>
  3237. ;begin_internal
  3238. #endif // !define(_WININETEX_)
  3239. ;end_internal
  3240. #endif // !defined(_WININET_)