WinInet.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:125k
源码类别:

模拟服务器

开发平台:

C/C++

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