ole32: Fix a few failing tests in win2k.
[wine] / include / urlmon.idl
1 /*
2  * Copyright (C) 2000 Ulrich Czekalla
3  * Copyright (C) 2003 Alexandre Julliard
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18  */
19
20 import "objidl.idl";
21 import "oleidl.idl";
22 import "servprov.idl";
23 import "msxml.idl";
24
25 interface IInternetProtocolSink;
26
27 /*****************************************************************************
28  * IInternet interface
29  */
30 [
31     object,
32     uuid(79eac9e0-baf9-11ce-8c82-00aa004ba90b),
33     pointer_default(unique),
34     local
35 ]
36 interface IInternet : IUnknown
37 {
38     typedef [unique] IInternet *LPIINTERNET;
39 }
40
41 /*****************************************************************************
42  * IBinding interface
43  */
44 [
45     object,
46     uuid(79eac9c0-baf9-11ce-8c82-00aa004ba90b),
47     pointer_default(unique)
48 ]
49 interface IBinding : IUnknown
50 {
51     typedef [unique] IBinding *LPBINDING;
52
53     HRESULT Abort();
54     HRESULT Suspend();
55     HRESULT Resume();
56
57     HRESULT SetPriority(
58         [in] LONG nPriority);
59
60     HRESULT GetPriority(
61         [out] LONG * pnPriority);
62
63     [local]
64     HRESULT GetBindResult(
65         [out] CLSID *pclsidProtocol,
66         [out] DWORD *pdwResult,
67         [out] LPOLESTR *pszResult,
68         [in, out] DWORD *pdwReserved);
69
70     [call_as(GetBindResult)]
71     HRESULT RemoteGetBindResult(
72         [out] CLSID *pclsidProtocol,
73         [out] DWORD *pdwResult,
74         [out] LPOLESTR *pszResult,
75         [in] DWORD dwReserved);
76 }
77
78
79 /*****************************************************************************
80  * IBindStatusCallback interface
81  */
82 [
83     object,
84     uuid(79eac9c1-baf9-11ce-8c82-00aa004ba90b),
85     pointer_default(unique)
86 ]
87 interface IBindStatusCallback : IUnknown
88 {
89     typedef [unique] IBindStatusCallback *LPBINDSTATUSCALLBACK;
90
91     typedef enum
92     {
93         BINDVERB_GET    = 0x00000000,
94         BINDVERB_POST   = 0x00000001,
95         BINDVERB_PUT    = 0x00000002,
96         BINDVERB_CUSTOM = 0x00000003
97     } BINDVERB;
98
99     typedef enum
100     {
101         BINDINFOF_URLENCODESTGMEDDATA = 0x00000001,
102         BINDINFOF_URLENCODEDEXTRAINFO = 0x00000002
103     } BINDINFOF;
104
105     typedef enum
106     {
107         BINDF_ASYNCHRONOUS = 0x00000001,
108         BINDF_ASYNCSTORAGE = 0x00000002,
109         BINDF_NOPROGRESSIVERENDERING = 0x00000004,
110         BINDF_OFFLINEOPERATION = 0x00000008,
111         BINDF_GETNEWESTVERSION = 0x00000010,
112         BINDF_NOWRITECACHE = 0x00000020,
113         BINDF_NEEDFILE = 0x00000040,
114         BINDF_PULLDATA = 0x00000080,
115         BINDF_IGNORESECURITYPROBLEM = 0x00000100,
116         BINDF_RESYNCHRONIZE = 0x00000200,
117         BINDF_HYPERLINK = 0x00000400,
118         BINDF_NO_UI = 0x00000800,
119         BINDF_SILENTOPERATION = 0x00001000,
120         BINDF_PRAGMA_NO_CACHE = 0x00002000,
121         BINDF_GETCLASSOBJECT = 0x00004000,
122         BINDF_RESERVED_1 = 0x00008000,
123         BINDF_FREE_THREADED = 0x00010000,
124         BINDF_DIRECT_READ = 0x00020000,
125         BINDF_FORMS_SUBMIT = 0x00040000,
126         BINDF_GETFROMCACHE_IF_NET_FAIL = 0x00080000,
127         BINDF_FROMURLMON = 0x00100000,
128         BINDF_FWD_BACK = 0x00200000,
129         BINDF_PREFERDEFAULTHANDLER = 0x00400000,
130         BINDF_ENFORCERESTRICTED = 0x00800000
131     } BINDF;
132
133     typedef enum
134     {
135         URL_ENCODING_NONE         = 0x00000000,
136         URL_ENCODING_ENABLE_UTF8  = 0x10000000,
137         URL_ENCODING_DISABLE_UTF8 = 0x20000000
138     } URL_ENCODING;
139
140     typedef struct _tagBINDINFO
141     {
142         ULONG cbSize;
143         LPWSTR szExtraInfo;
144         STGMEDIUM stgmedData;
145         DWORD grfBindInfoF;
146         DWORD dwBindVerb;
147         LPWSTR szCustomVerb;
148         DWORD cbstgmedData;
149         DWORD dwOptions;
150         DWORD dwOptionsFlags;
151         DWORD dwCodePage;
152         SECURITY_ATTRIBUTES securityAttributes;
153         IID iid;
154         IUnknown *pUnk;
155         DWORD dwReserved;
156     } BINDINFO;
157
158     typedef struct _REMSECURITY_ATTRIBUTES
159     {
160         DWORD nLength;
161         DWORD lpSecurityDescriptor;
162         BOOL bInheritHandle;
163     } REMSECURITY_ATTRIBUTES, *PREMSECURITY_ATTRIBUTES, *LPREMSECURITY_ATTRIBUTES;
164
165     typedef struct _tagRemBINDINFO
166     {
167         ULONG cbSize;
168         LPWSTR szExtraInfo;
169         DWORD grfBindInfoF;
170         DWORD dwBindVerb;
171         LPWSTR szCustomVerb;
172         DWORD cbstgmedData;
173         DWORD dwOptions;
174         DWORD dwOptionsFlags;
175         DWORD dwCodePage;
176         REMSECURITY_ATTRIBUTES securityAttributes;
177         IID iid;
178         IUnknown *pUnk;
179         DWORD dwReserved;
180     } RemBINDINFO;
181
182     typedef struct tagRemFORMATETC
183     {
184         DWORD cfFormat;
185         DWORD ptd;
186         DWORD dwAspect;
187         LONG lindex;
188         DWORD tymed;
189     } RemFORMATETC, *LPREMFORMATETC;
190
191     typedef enum
192     {
193         BSCF_FIRSTDATANOTIFICATION = 0x01,
194         BSCF_INTERMEDIATEDATANOTIFICATION = 0x02,
195         BSCF_LASTDATANOTIFICATION = 0x04,
196         BSCF_DATAFULLYAVAILABLE = 0x08,
197         BSCF_AVAILABLEDATASIZEUNKNOWN = 0x10
198     } BSCF;
199
200     typedef enum BINDSTATUS
201     {
202         BINDSTATUS_FINDINGRESOURCE = 1,
203         BINDSTATUS_CONNECTING,
204         BINDSTATUS_REDIRECTING,
205         BINDSTATUS_BEGINDOWNLOADDATA,
206         BINDSTATUS_DOWNLOADINGDATA,
207         BINDSTATUS_ENDDOWNLOADDATA,
208         BINDSTATUS_BEGINDOWNLOADCOMPONENTS,
209         BINDSTATUS_INSTALLINGCOMPONENTS,
210         BINDSTATUS_ENDDOWNLOADCOMPONENTS,
211         BINDSTATUS_USINGCACHEDCOPY,
212         BINDSTATUS_SENDINGREQUEST,
213         BINDSTATUS_CLASSIDAVAILABLE,
214         BINDSTATUS_MIMETYPEAVAILABLE,
215         BINDSTATUS_CACHEFILENAMEAVAILABLE,
216         BINDSTATUS_BEGINSYNCOPERATION,
217         BINDSTATUS_ENDSYNCOPERATION,
218         BINDSTATUS_BEGINUPLOADDATA,
219         BINDSTATUS_UPLOADINGDATA,
220         BINDSTATUS_ENDUPLOADINGDATA,
221         BINDSTATUS_PROTOCOLCLASSID,
222         BINDSTATUS_ENCODING,
223         BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE,
224         BINDSTATUS_CLASSINSTALLLOCATION,
225         BINDSTATUS_DECODING,
226         BINDSTATUS_LOADINGMIMEHANDLER,
227         BINDSTATUS_CONTENTDISPOSITIONATTACH,
228         BINDSTATUS_FILTERREPORTMIMETYPE,
229         BINDSTATUS_CLSIDCANINSTANTIATE,
230         BINDSTATUS_IUNKNOWNAVAILABLE,
231         BINDSTATUS_DIRECTBIND,
232         BINDSTATUS_RAWMIMETYPE,
233         BINDSTATUS_PROXYDETECTING,
234         BINDSTATUS_ACCEPTRANGES,
235         BINDSTATUS_COOKIE_SENT,
236         BINDSTATUS_COMPACT_POLICY_RECEIVED,
237         BINDSTATUS_COOKIE_SUPPRESSED,
238         BINDSTATUS_COOKIE_STATE_UNKNOWN,
239         BINDSTATUS_COOKIE_STATE_ACCEPT,
240         BINDSTATUS_COOKIE_STATE_REJECT,
241         BINDSTATUS_COOKIE_STATE_PROMPT,
242         BINDSTATUS_COOKIE_STATE_LEASH,
243         BINDSTATUS_COOKIE_STATE_DOWNGRADE,
244         BINDSTATUS_POLICY_HREF,
245         BINDSTATUS_P3P_HEADER,
246         BINDSTATUS_SESSION_COOKIE_RECEIVED,
247         BINDSTATUS_PERSISTENT_COOKIE_RECEIVED,
248         BINDSTATUS_SESSION_COOKIES_ALLOWED,
249         BINDSTATUS_CACHECONTROL,
250         BINDSTATUS_CONTENTDISPOSITIONFILENAME,
251         BINDSTATUS_MIMETEXTPLAINMISMATCH,
252         BINDSTATUS_PUBLISHERAVAILABLE,
253         BINDSTATUS_DISPLAYNAMEAVAILABLE
254     } BINDSTATUS;
255
256
257     HRESULT OnStartBinding(
258         [in] DWORD dwReserved,
259         [in] IBinding * pib);
260
261     HRESULT GetPriority(
262         [out] LONG * pnPriority);
263
264     HRESULT OnLowResource(
265         [in] DWORD reserved);
266
267     HRESULT OnProgress(
268         [in] ULONG ulProgress,
269         [in] ULONG ulProgressMax,
270         [in] ULONG ulStatusCode,
271         [in] LPCWSTR szStatusText);
272
273     HRESULT OnStopBinding(
274         [in] HRESULT hresult,
275         [in, unique] LPCWSTR szError);
276
277     [local]
278     HRESULT GetBindInfo(
279         [out] DWORD *grfBINDF,
280         [in, out, unique] BINDINFO * pbindinfo);
281
282     [call_as(GetBindInfo)]
283     HRESULT RemoteGetBindInfo(
284         [out] DWORD *grfBINDF,
285         [in, out, unique] RemBINDINFO * pbindinfo,
286         [in, out, unique] RemSTGMEDIUM* pstgmed);
287
288     [local]
289     HRESULT OnDataAvailable(
290         [in] DWORD grfBSCF,
291         [in] DWORD dwSize,
292         [in] FORMATETC* pformatetc,
293         [in] STGMEDIUM* pstgmed);
294
295     [call_as(OnDataAvailable)]
296     HRESULT RemoteOnDataAvailable(
297         [in] DWORD grfBSCF,
298         [in] DWORD dwSize,
299         [in] RemFORMATETC *pformatetc,
300         [in] RemSTGMEDIUM* pstgmed);
301
302     HRESULT OnObjectAvailable(
303         [in] REFIID riid,
304         [in, iid_is(riid)] IUnknown* punk);
305 }
306
307 /*****************************************************************************
308  * IAuthenticate interface
309  */
310 [
311     local,
312     object,
313     uuid(79EAC9D0-BAf9-11CE-8C82-00AA004BA90B),
314     pointer_default(unique)
315 ]
316 interface IAuthenticate : IUnknown
317 {
318     typedef [unique] IAuthenticate *LPAUTHENTICATION;
319
320     HRESULT Authenticate(
321         [out] HWND* phwnd,
322         [out] LPWSTR *pszUsername,
323         [out] LPWSTR *pszPassword);
324 }
325
326 /*****************************************************************************
327  * IHttpNegotiate interface
328  */
329 [
330     object,
331     uuid(79EAC9D2-BAF9-11CE-8C82-00AA004BA90B),
332     pointer_default(unique)
333 ]
334 interface IHttpNegotiate : IUnknown
335 {
336     typedef [unique] IHttpNegotiate *LPHTTPNEGOTIATE;
337
338     HRESULT BeginningTransaction(
339         [in] LPCWSTR szURL,
340         [in, unique] LPCWSTR szHeaders,
341         [in] DWORD dwReserved,
342         [out] LPWSTR *pszAdditionalHeaders);
343
344     HRESULT OnResponse(
345         [in] DWORD dwResponseCode,
346         [in, unique] LPCWSTR szResponseHeaders,
347         [in, unique] LPCWSTR szRequestHeaders,
348         [out] LPWSTR *pszAdditionalRequestHeaders);
349 }
350
351 /*****************************************************************************
352  * IHttpNegotiate2 interface
353  */
354 [
355     object,
356     uuid(4F9F9FCB-E0F4-48eb-B7AB-FA2EA9365CB4),
357     pointer_default(unique)
358 ]
359 interface IHttpNegotiate2 : IHttpNegotiate
360 {
361     typedef [unique] IHttpNegotiate2 *LPHTTPNEGOTIATE2;
362
363     HRESULT GetRootSecurityId(
364          [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,
365          [in, out] DWORD *pcbSecurityId,
366          [in] DWORD_PTR dwReserved);
367 }
368
369 /*****************************************************************************
370  * IBindHost interface
371  */
372 cpp_quote("#define SID_IBindHost IID_IBindHost")
373 cpp_quote("#define SID_SBindHost IID_IBindHost")
374 [
375     object,
376     uuid(fc4801a1-2ba9-11cf-a229-00aa003d7352),
377     pointer_default(unique)
378 ]
379 interface IBindHost : IUnknown
380 {
381     typedef [unique] IBindHost *LPBINDHOST;
382
383     HRESULT CreateMoniker(
384         [in] LPOLESTR szName,
385         [in] IBindCtx *pBC,
386         [out] IMoniker** ppmk,
387         [in] DWORD dwReserved);
388
389     [local]
390     HRESULT MonikerBindToStorage(
391         [in] IMoniker *pMk,
392         [in] IBindCtx *pBC,
393         [in] IBindStatusCallback *pBSC,
394         [in] REFIID riid,
395         [out] void **ppvObj);
396
397     [call_as(MonikerBindToStorage)]
398     HRESULT RemoteMonikerBindToStorage(
399         [in, unique] IMoniker *pMk,
400         [in, unique] IBindCtx *pBC,
401         [in, unique] IBindStatusCallback *pBSC,
402         [in] REFIID riid,
403         [out, iid_is(riid)] IUnknown **ppvObj);
404
405     [local]
406     HRESULT MonikerBindToObject(
407         [in] IMoniker *pMk,
408         [in] IBindCtx *pBC,
409         [in] IBindStatusCallback *pBSC,
410         [in] REFIID riid,
411         [out] void **ppvObj);
412
413     [call_as(MonikerBindToObject)]
414     HRESULT RemoteMonikerBindToObject(
415         [in, unique] IMoniker *pMk,
416         [in, unique] IBindCtx *pBC,
417         [in, unique] IBindStatusCallback *pBSC,
418         [in] REFIID riid,
419         [out, iid_is(riid)] IUnknown **ppvObj);
420 }
421
422
423 /*****************************************************************************
424  * IWinInetInfo interface
425  */
426 [
427     object,
428     uuid(79eac9d6-bafa-11ce-8c82-00aa004ba90b),
429     pointer_default(unique)
430 ]
431 interface IWinInetInfo : IUnknown
432 {
433     typedef [unique] IWinInetInfo *LPWININETINFO;
434
435     [local]
436     HRESULT QueryOption(
437         [in] DWORD dwOption,
438         [in, out, size_is(*pcbBuf)] LPVOID pBuffer,
439         [in, out] DWORD *pcbBuf);
440
441     [call_as(QueryOption)]
442     HRESULT RemoteQueryOption(
443         [in] DWORD  dwOption,
444         [in, out, size_is(*pcbBuf)] BYTE *pBuffer,
445         [in, out] DWORD *pcbBuf);
446 }
447
448
449
450 /*****************************************************************************
451  * IWinInetHttpInfo interface
452  */
453 [
454     object,
455     uuid(79eac9d8-bafa-11ce-8c82-00aa004ba90b),
456     pointer_default(unique)
457 ]
458 interface IWinInetHttpInfo : IWinInetInfo
459 {
460     typedef [unique] IWinInetHttpInfo *LPWININETHTTPINFO;
461
462     [local]
463     HRESULT QueryInfo(
464         [in] DWORD dwOption,
465         [in, out,size_is(*pcbBuf)] LPVOID pBuffer,
466         [in, out] DWORD *pcbBuf,
467         [in, out] DWORD *pdwFlags,
468         [in, out] DWORD *pdwReserved);
469
470     [call_as(QueryInfo)]
471     HRESULT RemoteQueryInfo(
472         [in] DWORD dwOption,
473         [in,out,size_is(*pcbBuf)] BYTE *pBuffer,
474         [in, out] DWORD *pcbBuf,
475         [in, out] DWORD *pdwFlags,
476         [in, out] DWORD *pdwReserved);
477 }
478
479 /*****************************************************************************
480  * IWindowForBindingUI interface
481  */
482 [
483     local,
484     object,
485     uuid(79eac9d5-bafa-11ce-8c82-00aa004ba90b),
486     pointer_default(unique)
487 ]
488 interface IWindowForBindingUI : IUnknown
489 {
490     typedef [unique] IWindowForBindingUI *LPWINDOWFORBINDINGUI;
491
492     HRESULT GetWindow(
493         [in] REFGUID rguidReason,
494         [out] HWND *phwnd);
495 }
496
497 /*****************************************************************************
498  * IHttpSecurity interface
499  */
500 [
501     object,
502     uuid(79eac9d7-bafa-11ce-8c82-00aa004ba90b),
503     pointer_default(unique)
504 ]
505 interface IHttpSecurity : IWindowForBindingUI
506 {
507     typedef [unique] IHttpSecurity *LPHTTPSECURITY;
508
509     HRESULT OnSecurityProblem(
510         [in] DWORD dwProblem);
511 }
512
513
514 /*****************************************************************************
515  * IPersistMoniker interface
516  */
517 [
518     object,
519     uuid(79eac9c9-baf9-11ce-8c82-00aa004ba90b),
520     pointer_default(unique)
521 ]
522 interface IPersistMoniker : IUnknown
523 {
524     typedef [unique] IPersistMoniker *LPPERSISTMONIKER;
525
526     HRESULT GetClassID(
527         [out] CLSID *pClassID);
528
529     HRESULT IsDirty();
530
531     HRESULT Load(
532         [in] BOOL fFullyAvailable,
533         [in] IMoniker *pimkName,
534         [in] LPBC pibc,
535         [in] DWORD grfMode);
536
537     HRESULT Save(
538         [in] IMoniker *pimkName,
539         [in] LPBC pbc,
540         [in] BOOL fRemember);
541
542     HRESULT SaveCompleted(
543         [in] IMoniker *pimkName,
544         [in] LPBC pibc);
545
546     HRESULT GetCurMoniker(
547         [out] IMoniker **ppimkName);
548 }
549
550 /*****************************************************************************
551  * IMonikerProp interface
552  */
553 [
554     object,
555     uuid(A5CA5F7F-1847-4D87-9C5B-918509F7511D),
556     pointer_default(unique)
557 ]
558 interface IMonikerProp : IUnknown
559 {
560     typedef [unique] IMonikerProp *LPMONIKERPROP;
561
562     typedef enum {
563         MIMETYPEPROP        = 0,
564         USE_SRC_URL         = 1,
565         CLASSIDPROP         = 2,
566         TRUSTEDDOWNLOADPROP = 3,
567         POPUPLEVELPROP      = 4
568     } MONIKERPROPERTY;
569
570     HRESULT PutProperty(
571         [in] MONIKERPROPERTY mkp,
572         [in] LPCWSTR val);
573 }
574
575 cpp_quote("#ifndef _LPBINDPROTOCOL_DEFINED")
576 cpp_quote("#define _LPBINDPROTOCOL_DEFINED")
577
578 /*****************************************************************************
579  * IBindProtocol interface
580  */
581 [
582     local,
583     object,
584     uuid(79EAC9CD-BAF9-11CE-8C82-00AA004BA90B),
585     pointer_default(unique)
586 ]
587 interface IBindProtocol : IUnknown
588 {
589     typedef [unique] IBindProtocol *LPBINDPROTOCOL;
590
591     HRESULT CreateBinding(
592         [in] LPCWSTR szUrl,
593         [in] IBindCtx *pbc,
594         [out] IBinding **ppb);
595 }
596
597 cpp_quote("#endif /* !defined _LPBINDPROTOCOL_DEFINED */")
598
599 /*****************************************************************************
600  * IInternetBindInfo interface
601  */
602 [
603     local,
604     object,
605     uuid(79EAC9E1-BAF9-11CE-8C82-00AA004BA90B),
606     pointer_default(unique)
607 ]
608 interface IInternetBindInfo : IUnknown
609 {
610     typedef [unique] IInternetBindInfo *LPIINTERNETBINDINFO;
611
612     typedef enum tagBINDSTRING
613     {
614         BINDSTRING_HEADERS = 1,
615         BINDSTRING_ACCEPT_MIMES,
616         BINDSTRING_EXTRA_URL,
617         BINDSTRING_LANGUAGE,
618         BINDSTRING_USERNAME,
619         BINDSTRING_PASSWORD,
620         BINDSTRING_UA_PIXELS,
621         BINDSTRING_UA_COLOR,
622         BINDSTRING_OS,
623         BINDSTRING_USER_AGENT,
624         BINDSTRING_ACCEPT_ENCODINGS,
625         BINDSTRING_POST_COOKIE,
626         BINDSTRING_POST_DATA_MIME,
627         BINDSTRING_URL,
628         BINDSTRING_IID,
629         BINDSTRING_FLAG_BIND_TO_OBJECT,
630         BINDSTRING_PTR_BIND_CONTEXT
631     } BINDSTRING;
632
633     HRESULT GetBindInfo(
634         [out] DWORD *grfBINDF,
635         [in, out, unique] BINDINFO *pbindinfo);
636
637     HRESULT GetBindString(
638         [in]      ULONG ulStringType,
639         [in, out] LPOLESTR *ppwzStr,
640         [in]      ULONG cEl,
641         [in, out] ULONG *pcElFetched);
642 }
643
644 /*****************************************************************************
645  * IInternetPriority interface
646  */
647 [
648     local,
649     object,
650     uuid(79EAC9EB-BAF9-11CE-8C82-00AA004BA90B),
651     pointer_default(unique)
652 ]
653 interface IInternetPriority : IUnknown
654 {
655     typedef [unique] IInternetPriority *LPIINTERNETPRIORITY;
656
657     HRESULT SetPriority([in] LONG nPriority);
658     HRESULT GetPriority([out] LONG *pnPriority);
659 }
660
661 /*****************************************************************************
662  * IInternetProtocolRoot interface
663  */
664 [
665     local,
666     object,
667     uuid(79EAC9E3-BAF9-11CE-8C82-00AA004BA90B),
668     pointer_default(unique)
669 ]
670 interface IInternetProtocolRoot : IUnknown
671 {
672     typedef [unique] IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT;
673
674     typedef enum _tagPI_FLAGS
675     {
676         PI_PARSE_URL         = 0x00000001,
677         PI_FILTER_MODE       = 0x00000002,
678         PI_FORCE_ASYNC       = 0x00000004,
679         PI_USE_WORKERTHREAD  = 0x00000008,
680         PI_MIMEVERIFICATION  = 0x00000010,
681         PI_CLSIDLOOKUP       = 0x00000020,
682         PI_DATAPROGRESS      = 0x00000040,
683         PI_SYNCHRONOUS       = 0x00000080,
684         PI_APARTMENTTHREADED = 0x00000100,
685         PI_CLASSINSTALL      = 0x00000200,
686         PD_FORCE_SWITCH      = 0x00010000
687     } PI_FLAGS;
688
689     typedef struct _tagPROTOCOLDATA
690     {
691         DWORD grfFlags;
692         DWORD dwState;
693         LPVOID pData;
694         ULONG cbData;
695     } PROTOCOLDATA;
696
697     HRESULT Start(
698         [in] LPCWSTR szUrl,
699         [in] IInternetProtocolSink *pOIProtSink,
700         [in] IInternetBindInfo *pOIBindInfo,
701         [in] DWORD grfPI,
702         [in] DWORD dwReserved);
703
704     HRESULT Continue(
705         [in] PROTOCOLDATA *pProtocolData);
706
707     HRESULT Abort(
708         [in] HRESULT hrReason,
709         [in] DWORD dwOptions);
710
711     HRESULT Terminate(
712         [in] DWORD dwOptions);
713
714     HRESULT Suspend();
715
716     HRESULT Resume();
717 }
718
719 /*****************************************************************************
720  * IInternetProtocolSink interface
721  */
722 [
723     local,
724     object,
725     uuid(79EAC9E5-BAF9-11CE-8C82-00AA004BA90B),
726     pointer_default(unique)
727 ]
728 interface IInternetProtocolSink : IUnknown
729 {
730     typedef [unique] IInternetProtocolSink *LPIINTERNETPROTOCOLSINK;
731
732     HRESULT Switch(
733         [in] PROTOCOLDATA *pProtocolData);
734
735     HRESULT ReportProgress(
736         [in] ULONG ulStatusCode,
737         [in] LPCWSTR szStatusText);
738
739     HRESULT ReportData(
740         [in] DWORD grfBSCF,
741         [in] ULONG ulProgress,
742         [in] ULONG ulProgressMax);
743
744     HRESULT ReportResult(
745         [in] HRESULT hrResult,
746         [in] DWORD dwError,
747         [in] LPCWSTR szResult);
748 }
749
750 /*****************************************************************************
751  * IInternetProtocol interface
752  */
753 [
754     local,
755     object,
756     uuid(79EAC9E4-BAF9-11CE-8C82-00AA004BA90B),
757     pointer_default(unique)
758 ]
759 interface IInternetProtocol : IInternetProtocolRoot
760 {
761     typedef [unique] IInternetProtocol *LPIINTERNETPROTOCOL;
762
763     HRESULT Read(
764         [in,out, size_is(cb), length_is(*pcbRead)] void *pv,
765         [in]  ULONG cb,
766         [out] ULONG *pcbRead);
767
768     HRESULT Seek(
769         [in]  LARGE_INTEGER dlibMove,
770         [in]  DWORD dwOrigin,
771         [out] ULARGE_INTEGER *plibNewPosition);
772
773     HRESULT LockRequest(
774         [in] DWORD dwOptions);
775
776     HRESULT UnlockRequest();
777 }
778
779 /*****************************************************************************
780  * IInternetProtocolInfo interface
781  */
782 [
783     local,
784     object,
785     uuid(79eac9ec-baf9-11ce-8c82-00aa004ba90b),
786     pointer_default(unique)
787 ]
788 interface IInternetProtocolInfo : IUnknown
789 {
790     typedef [unique] IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO;
791
792     typedef enum _tagPARSEACTION
793     {
794         PARSE_CANONICALIZE = 1,
795         PARSE_FRIENDLY,
796         PARSE_SECURITY_URL,
797         PARSE_ROOTDOCUMENT,
798         PARSE_DOCUMENT,
799         PARSE_ANCHOR,
800         PARSE_ENCODE,
801         PARSE_DECODE,
802         PARSE_PATH_FROM_URL,
803         PARSE_URL_FROM_PATH,
804         PARSE_MIME,
805         PARSE_SERVER,
806         PARSE_SCHEMA,
807         PARSE_SITE,
808         PARSE_DOMAIN,
809         PARSE_LOCATION,
810         PARSE_SECURITY_DOMAIN,
811         PARSE_ESCAPE,
812         PARSE_UNESCAPE
813     } PARSEACTION;
814
815     typedef enum _tagPSUACTION
816     {
817         PSU_DEFAULT = 1,
818         PSU_SECURITY_URL_ONLY
819     } PSUACTION;
820
821     typedef enum _tagQUERYOPTION
822     {
823         QUERY_EXPIRATION_DATE = 1,
824         QUERY_TIME_OF_LAST_CHANGE,
825         QUERY_CONTENT_ENCODING,
826         QUERY_CONTENT_TYPE,
827         QUERY_REFRESH,
828         QUERY_RECOMBINE,
829         QUERY_CAN_NAVIGATE,
830         QUERY_USES_NETWORK,
831         QUERY_IS_CACHED,
832         QUERY_IS_INSTALLEDENTRY,
833         QUERY_IS_CACHED_OR_MAPPED,
834         QUERY_USES_CACHE,
835         QUERY_IS_SECURE,
836         QUERY_IS_SAFE,
837         QUERY_USES_HISTORYFOLDER
838     } QUERYOPTION;
839
840     HRESULT ParseUrl(
841         [in] LPCWSTR pwzUrl,
842         [in] PARSEACTION ParseAction,
843         [in] DWORD dwParseFlags,
844         [out] LPWSTR pwzResult,
845         [in] DWORD cchResult,
846         [out] DWORD *pcchResult,
847         [in] DWORD dwReserved);
848
849     HRESULT CombineUrl(
850         [in] LPCWSTR pwzBaseUrl,
851         [in] LPCWSTR pwzRelativeUrl,
852         [in] DWORD dwCombineFlags,
853         [out] LPWSTR pwzResult,
854         [in] DWORD cchResult,
855         [out] DWORD *pcchResult,
856         [in] DWORD dwReserved);
857
858     HRESULT CompareUrl(
859         [in] LPCWSTR pwzUrl1,
860         [in] LPCWSTR pwzUrl2,
861         [in] DWORD dwCompareFlags);
862
863     HRESULT QueryInfo(
864         [in] LPCWSTR pwzUrl,
865         [in] QUERYOPTION OueryOption,
866         [in] DWORD dwQueryFlags,
867         [in, out,size_is(*pcbBuf)] LPVOID pBuffer,
868         [in] DWORD cbBuffer,
869         [in, out] DWORD *pcbBuf,
870         [in] DWORD dwReserved);
871 }
872
873 /*****************************************************************************
874  * IInternetSession interface
875  */
876 [
877     local,
878     object,
879     uuid(79eac9e7-baf9-11ce-8c82-00aa004ba90b),
880     pointer_default(unique)
881 ]
882 interface IInternetSession : IUnknown
883 {
884     typedef [unique] IInternetSession *LPIINTERNETSESSION;
885
886     typedef enum _tagOIBDG_FLAGS
887     {
888         OIBDG_APARTMENTTHREADED = 0x0100,
889         OIBDG_DATAONLY          = 0x1000
890     } OIBDG_FLAGS;
891
892     HRESULT RegisterNameSpace(
893         [in] IClassFactory *pCF,
894         [in] REFCLSID rclsid,
895         [in] LPCWSTR pwzProtocol,
896         [in] ULONG cPatterns,
897         [in] const LPCWSTR *ppwzPatterns,
898         [in] DWORD dwReserved);
899
900     HRESULT UnregisterNameSpace(
901         [in] IClassFactory *pCF,
902         [in] LPCWSTR pszProtocol);
903
904     HRESULT RegisterMimeFilter(
905         [in] IClassFactory *pCF,
906         [in] REFCLSID rclsid,
907         [in] LPCWSTR pwzType);
908
909     HRESULT UnregisterMimeFilter(
910         [in] IClassFactory *pCF,
911         [in] LPCWSTR pwzType);
912
913     HRESULT CreateBinding(
914         [in] LPBC pBC,
915         [in] LPCWSTR szUrl,
916         [in] IUnknown *pUnkOuter,
917         [out, unique] IUnknown **ppUnk,
918         [out, unique] IInternetProtocol **ppOInetProt,
919         [in] DWORD dwOption);
920
921     HRESULT SetSessionOption(
922         [in] DWORD dwOption,
923         [in] LPVOID pBuffer,
924         [in] DWORD dwBufferLength,
925         [in] DWORD dwReserved);
926 }
927
928 /*****************************************************************************
929  * IInternetSecurityMgrSite interface
930  */
931 [
932     local,
933     object,
934     uuid(79eac9ed-baf9-11ce-8c82-00aa004ba90b),
935     pointer_default(unique)
936 ]
937 interface IInternetSecurityMgrSite : IUnknown
938 {
939     HRESULT GetWindow(
940         [out] HWND *phwnd);
941
942     HRESULT EnableModeless(
943         [in] BOOL fEnable);
944 }
945
946
947 /*****************************************************************************
948  * IInternetSecurityManager interface
949  */
950 cpp_quote("#define SID_SInternetSecurityManager IID_IInternetSecurityManager")
951
952 [
953     object,
954     uuid(79eac9ee-baf9-11ce-8c82-00aa004ba90b),
955     pointer_default(unique)
956 ]
957 interface IInternetSecurityManager : IUnknown
958 {
959     HRESULT SetSecuritySite(
960         [in, unique] IInternetSecurityMgrSite *pSite);
961
962     HRESULT GetSecuritySite(
963         [out] IInternetSecurityMgrSite **ppSite);
964
965     HRESULT MapUrlToZone(
966         [in] LPCWSTR pwszUrl,
967         [out] DWORD *pdwZone,
968         [in] DWORD dwFlags);
969
970 cpp_quote("#define MAX_SIZE_SECURITY_ID 512")
971
972     HRESULT GetSecurityId(
973         [in] LPCWSTR pwszUrl,
974         [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,
975         [in, out] DWORD *pcbSecurityId,
976         [in] DWORD_PTR dwReserved);
977
978
979     typedef enum {
980         PUAF_DEFAULT                = 0x00,
981         PUAF_NOUI                   = 0x01,
982         PUAF_ISFILE                 = 0x02,
983         PUAF_WARN_IF_DENIED         = 0x04,
984         PUAF_FORCEUI_FOREGROUND     = 0x08,
985         PUAF_CHECK_TIPS             = 0x10
986     } PUAF;
987
988     HRESULT ProcessUrlAction(
989         [in] LPCWSTR pwszUrl,
990         [in] DWORD dwAction,
991         [out, size_is(cbPolicy)] BYTE *pPolicy,
992         [in] DWORD cbPolicy,
993         [in] BYTE *pContext,
994         [in] DWORD cbContext,
995         [in] DWORD dwFlags,
996         [in] DWORD dwReserved);
997
998     HRESULT QueryCustomPolicy(
999         [in] LPCWSTR pwszUrl,
1000         [in] REFGUID guidKey,
1001         [out, size_is(,*pcbPolicy)] BYTE **ppPolicy,
1002         [out] DWORD *pcbPolicy,
1003         [in] BYTE *pContext,
1004         [in] DWORD cbContext,
1005         [in] DWORD dwReserved);
1006
1007     typedef enum {
1008         SZM_CREATE = 0x0,
1009         SZM_DELETE = 0x1
1010     } SZM_FLAGS;
1011
1012     HRESULT SetZoneMapping(
1013         [in] DWORD dwZone,
1014         [in] LPCWSTR lpszPattern,
1015         [in] DWORD dwFlags);
1016
1017     HRESULT GetZoneMappings(
1018         [in] DWORD dwZone,
1019         [out] IEnumString **ppenumString,
1020         [in] DWORD dwFlags);
1021 }
1022
1023 cpp_quote("#define URLACTION_MIN                        0x00001000")
1024 cpp_quote("#define URLACTION_DOWNLOAD_MIN               0x00001000")
1025 cpp_quote("#define URLACTION_DOWNLOAD_SIGNED_ACTIVEX    0x00001001")
1026 cpp_quote("#define URLACTION_DOWNLOAD_UNSIGNED_ACTIVEX  0x00001004")
1027 cpp_quote("#define URLACTION_DOWNLOAD_CURR_MAX          0x00001004")
1028 cpp_quote("#define URLACTION_DOWNLOAD_MAX               0x000011ff")
1029
1030 cpp_quote("#define URLACTION_ACTIVEX_MIN                     0x00001200")
1031 cpp_quote("#define URLACTION_ACTIVEX_RUN                     0x00001200")
1032 cpp_quote("#define URLPOLICY_ACTIVEX_CHECK_LIST              0x00010000")
1033 cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_OBJECT_SAFETY  0x00001201")
1034 cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_DATA_SAFETY    0x00001202")
1035 cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_SCRIPT_SAFETY  0x00001203")
1036 cpp_quote("#define URLACTION_SCRIPT_OVERRIDE_SAFETY          0x00001401")
1037 cpp_quote("#define URLACTION_ACTIVEX_CONFIRM_NOOBJECTSAFETY  0x00001204")
1038 cpp_quote("#define URLACTION_ACTIVEX_TREATASUNTRUSTED        0x00001205")
1039 cpp_quote("#define URLACTION_ACTIVEX_CURR_MAX                0x00001205")
1040 cpp_quote("#define URLACTION_ACTIVEX_MAX                     0x000013ff")
1041
1042 cpp_quote("#define URLACTION_SCRIPT_MIN           0x00001400")
1043 cpp_quote("#define URLACTION_SCRIPT_RUN           0x00001400")
1044 cpp_quote("#define URLACTION_SCRIPT_JAVA_USE      0x00001402")
1045 cpp_quote("#define URLACTION_SCRIPT_SAFE_ACTIVEX  0x00001405")
1046 cpp_quote("#define URLACTION_CROSS_DOMAIN_DATA    0x00001406")
1047 cpp_quote("#define URLACTION_SCRIPT_PASTE         0x00001407")
1048 cpp_quote("#define URLACTION_SCRIPT_CURR_MAX      0x00001407")
1049 cpp_quote("#define URLACTION_SCRIPT_MAX           0x000015ff")
1050
1051 cpp_quote("#define URLACTION_HTML_MIN                0x00001600")
1052 cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS       0x00001601")
1053 cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_FROM  0x00001602")
1054 cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_TO    0x00001603")
1055 cpp_quote("#define URLACTION_HTML_FONT_DOWNLOAD      0x00001604")
1056 cpp_quote("#define URLACTION_HTML_JAVA_RUN           0x00001605")
1057 cpp_quote("#define URLACTION_HTML_USERDATA_SAVE      0x00001606")
1058 cpp_quote("#define URLACTION_HTML_SUBFRAME_NAVIGATE  0x00001607")
1059 cpp_quote("#define URLACTION_HTML_META_REFRESH       0x00001608")
1060 cpp_quote("#define URLACTION_HTML_MIXED_CONTENT      0x00001609")
1061 cpp_quote("#define URLACTION_HTML_MAX                0x000017ff")
1062
1063 cpp_quote("#define URLACTION_SHELL_MIN              0x00001800")
1064 cpp_quote("#define URLACTION_SHELL_INSTALL_DTITEMS  0x00001800")
1065 cpp_quote("#define URLACTION_SHELL_MOVE_OR_COPY     0x00001802")
1066 cpp_quote("#define URLACTION_SHELL_FILE_DOWNLOAD    0x00001803")
1067 cpp_quote("#define URLACTION_SHELL_VERB             0x00001804")
1068 cpp_quote("#define URLACTION_SHELL_WEBVIEW_VERB     0x00001805")
1069 cpp_quote("#define URLACTION_SHELL_CURR_MAX         0x00001805")
1070 cpp_quote("#define URLACTION_SHELL_MAX              0x000019ff")
1071
1072 cpp_quote("#define URLACTION_NETWORK_MIN                  0x00001a00")
1073 cpp_quote("#define URLACTION_CREDENTIALS_USE              0x00001a00")
1074 cpp_quote("#define URLACTION_AUTHENTICATE_CLIENT          0x00001a01")
1075 cpp_quote("#define URLACTION_COOKIES                      0x00001a02")
1076 cpp_quote("#define URLACTION_COOKIES_SESSION              0x00001a03")
1077 cpp_quote("#define URLACTION_CLIENT_CERT_PROMPT           0x00001a04")
1078 cpp_quote("#define URLACTION_COOKIES_THIRD_PARTY          0x00001a05")
1079 cpp_quote("#define URLACTION_COOKIES_SESSION_THIRD_PARTY  0x00001a06")
1080 cpp_quote("#define URLACTION_COOKIES_ENABLED              0x00001a10")
1081 cpp_quote("#define URLACTION_NETWORK_CURR_MAX             0x00001a10")
1082 cpp_quote("#define URLACTION_NETWORK_MAX                  0x00001bff")
1083
1084 cpp_quote("#define URLACTION_JAVA_MIN          0x00001c00")
1085 cpp_quote("#define URLACTION_JAVA_PERMISSIONS  0x00001c00")
1086 cpp_quote("#define URLPOLICY_JAVA_PROHIBIT     0x00000000")
1087 cpp_quote("#define URLPOLICY_JAVA_HIGH         0x00010000")
1088 cpp_quote("#define URLPOLICY_JAVA_MEDIUM       0x00020000")
1089 cpp_quote("#define URLPOLICY_JAVA_LOW          0x00030000")
1090 cpp_quote("#define URLPOLICY_JAVA_CUSTOM       0x00800000")
1091 cpp_quote("#define URLACTION_JAVA_CURR_MAX     0x00001c00")
1092 cpp_quote("#define URLACTION_JAVA_MAX          0x00001cff")
1093
1094 cpp_quote("#define URLACTION_INFODELIVERY_MIN                        0x00001d00")
1095 cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_CHANNELS         0x00001d00")
1096 cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_CHANNELS        0x00001d01")
1097 cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_CHANNELS       0x00001d02")
1098 cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_SUBSCRIPTIONS    0x00001d03")
1099 cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_SUBSCRIPTIONS   0x00001d04")
1100 cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_SUBSCRIPTIONS  0x00001d05")
1101 cpp_quote("#define URLACTION_INFODELIVERY_NO_CHANNEL_LOGGING         0x00001d06")
1102 cpp_quote("#define URLACTION_INFODELIVERY_CURR_MAX                   0x00001d06")
1103 cpp_quote("#define URLACTION_INFODELIVERY_MAX                        0x00001dff")
1104
1105 cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MIN          0x00001e00")
1106 cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_PERMISSIONS  0x00001e05")
1107 cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PROHIBIT     0x00010000")
1108 cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PRECACHE     0x00020000")
1109 cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_AUTOINSTALL  0x00030000")
1110 cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MAX          0x00001eff")
1111
1112 cpp_quote("#define URLPOLICY_ALLOW     0x00")
1113 cpp_quote("#define URLPOLICY_QUERY     0x01")
1114 cpp_quote("#define URLPOLICY_DISALLOW  0x03")
1115
1116 cpp_quote("#define URLPOLICY_NOTIFY_ON_ALLOW     0x10")
1117 cpp_quote("#define URLPOLICY_NOTIFY_ON_DISALLOW  0x20")
1118
1119 cpp_quote("#define URLPOLICY_LOG_ON_ALLOW     0x40")
1120 cpp_quote("#define URLPOLICY_LOG_ON_DISALLOW  0x80")
1121
1122 cpp_quote("#define URLPOLICY_DONTCHECKDLGBOX     0x100")
1123
1124 cpp_quote("#define URLPOLICY_CREDENTIALS_SILENT_LOGON_OK     0x00000000")
1125 cpp_quote("#define URLPOLICY_CREDENTIALS_MUST_PROMPT_USER    0x00010000")
1126 cpp_quote("#define URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT  0x00020000")
1127 cpp_quote("#define URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY      0x00030000")
1128
1129 cpp_quote("#define URLPOLICY_AUTHENTICATE_CLEARTEXT_OK        0x00000000")
1130 cpp_quote("#define URLPOLICY_AUTHENTICATE_CHALLENGE_RESPONSE  0x00010000")
1131 cpp_quote("#define URLPOLICY_AUTHENTICATE_MUTUAL_ONLY         0x00030000")
1132
1133 cpp_quote("#define URLPOLICY_MASK_PERMISSIONS  0x0f")
1134 cpp_quote("#define GetUrlPolicyPermissions(dw)      (dw & URLPOLICY_MASK_PERMISSIONS)")
1135 cpp_quote("#define SetUrlPolicyPermissions(dw,dw2)  ((dw) = ((dw) & ~URLPOLICY_MASK_PERMISSIONS) | (dw2))")
1136
1137 /*****************************************************************************
1138  * IInternetZoneManager interface
1139  */
1140 [
1141     local,
1142     object,
1143     uuid(79EAC9EF-BAf9-11CE-8C82-00AA004BA90B),
1144     pointer_default(unique)
1145 ]
1146 interface IInternetZoneManager : IUnknown
1147 {
1148     typedef [unique] IInternetZoneManager* LPURLZONEMANAGER;
1149
1150     typedef enum tagURLZONE
1151     {
1152         URLZONE_PREDEFINED_MIN  = 0,
1153         URLZONE_LOCAL_MACHINE   = 0,
1154         URLZONE_INTRANET        = 1,
1155         URLZONE_TRUSTED         = 2,
1156         URLZONE_INTERNET        = 3,
1157         URLZONE_UNTRUSTED       = 4,
1158         URLZONE_PREDEFINED_MAX  = 999,
1159         URLZONE_USER_MIN        = 1000,
1160         URLZONE_USER_MAX        = 10000,
1161     }  URLZONE;
1162
1163     typedef enum tagURLTEMPLATE
1164     {
1165         URLTEMPLATE_CUSTOM         = 0x00000,
1166         URLTEMPLATE_PREDEFINED_MIN = 0x10000,
1167         URLTEMPLATE_LOW            = 0x10000,
1168         URLTEMPLATE_MEDIUM         = 0x11000,
1169         URLTEMPLATE_HIGH           = 0x12000,
1170         URLTEMPLATE_PREDEFINED_MAX = 0x20000,
1171     } URLTEMPLATE ;
1172
1173     typedef enum {
1174         ZAFLAGS_CUSTOM_EDIT            = 0x00000001,
1175         ZAFLAGS_ADD_SITES              = 0x00000002,
1176         ZAFLAGS_REQUIRE_VERIFICATION   = 0x00000004,
1177         ZAFLAGS_INCLUDE_PROXY_OVERRIDE = 0x00000008,
1178         ZAFLAGS_INCLUDE_INTRANET_SITES = 0x00000010,
1179         ZAFLAGS_NO_UI                  = 0x00000020,
1180         ZAFLAGS_SUPPORTS_VERIFICATION  = 0x00000040,
1181         ZAFLAGS_UNC_AS_INTRANET        = 0x00000080,
1182     } ZAFLAGS ;
1183
1184     enum {
1185         MAX_ZONE_PATH        = 260,
1186         MAX_ZONE_DESCRIPTION = 200
1187     };
1188
1189     typedef struct _ZONEATTRIBUTES {
1190         ULONG cbSize;
1191         WCHAR szDisplayName[MAX_ZONE_PATH];
1192         WCHAR szDescription[MAX_ZONE_DESCRIPTION];
1193         WCHAR szIconPath[MAX_ZONE_PATH];
1194         DWORD dwTemplateMinLevel;
1195         DWORD dwTemplateRecommended;
1196         DWORD dwTemplateCurrentLevel;
1197         DWORD dwFlags;
1198     } ZONEATTRIBUTES, *LPZONEATTRIBUTES;
1199
1200     typedef enum _URLZONEREG {
1201         URLZONEREG_DEFAULT,
1202         URLZONEREG_HKLM,
1203         URLZONEREG_HKCU
1204     } URLZONEREG;
1205
1206     HRESULT GetZoneAttributes(
1207         [in]              DWORD dwZone,
1208         [in, out, unique] ZONEATTRIBUTES* pZoneAttributes);
1209
1210     HRESULT SetZoneAttributes(
1211         [in] DWORD dwZone,
1212         [in] ZONEATTRIBUTES* pZoneAttributes);
1213
1214     HRESULT GetZoneCustomPolicy(
1215         [in]  DWORD dwZone,
1216         [in]  REFGUID guidKey,
1217         [out] BYTE **ppPolicy,
1218         [out] DWORD* pcbPolicy,
1219         [in]  URLZONEREG ulrZoneReg);
1220
1221     HRESULT SetZoneCustomPolicy(
1222         [in] DWORD dwZone,
1223         [in] REFGUID guidKey,
1224         [in] BYTE *ppPolicy,
1225         [in] DWORD pcbPolicy,
1226         [in] URLZONEREG ulrZoneReg);
1227
1228     HRESULT GetZoneActionPolicy(
1229         [in]  DWORD dwZone,
1230         [in]  DWORD dwAction,
1231         [out] BYTE* pPolicy,
1232         [in]  DWORD cbPolicy,
1233         [in]  URLZONEREG urlZoneReg);
1234
1235     HRESULT SetZoneActionPolicy(
1236         [in] DWORD dwZone,
1237         [in] DWORD dwAction,
1238         [in] BYTE* pPolicy,
1239         [in] DWORD cbPolicy,
1240         [in] URLZONEREG urlZoneReg);
1241
1242     HRESULT PromptAction(
1243         [in] DWORD dwAction,
1244         [in] HWND hwndParent,
1245         [in] LPCWSTR pwszUrl,
1246         [in] LPCWSTR pwszText,
1247         [in] DWORD dwPromptFlags );
1248
1249     HRESULT LogAction(
1250         [in] DWORD dwAction,
1251         [in] LPCWSTR pwszUrl,
1252         [in] LPCWSTR pwszText,
1253         [in] DWORD dwLogFlags);
1254
1255     HRESULT CreateZoneEnumerator(
1256         [out] DWORD* pdwEnum,
1257         [out] DWORD* pdwCount,
1258         [in]  DWORD dwFlags);
1259
1260     HRESULT GetZoneAt(
1261         [in]  DWORD dwEnum,
1262         [in]  DWORD dwIndex,
1263         [out] DWORD* pdwZone);
1264
1265     HRESULT DestroyZoneEnumerator(
1266         [in] DWORD dwEnum);
1267
1268     HRESULT CopyTemplatePoliciesToZone(
1269         [in] DWORD dwTemplate,
1270         [in] DWORD dwZone,
1271         [in] DWORD dwReserved);
1272 }
1273
1274 typedef struct _tagSOFTDISTINFO
1275 {
1276     ULONG cbSize;
1277     DWORD dwFlags;
1278     DWORD dwAdState;
1279     LPWSTR szTitle;
1280     LPWSTR szAbstract;
1281     LPWSTR szHREF;
1282     DWORD dwInstalledVersionMS;
1283     DWORD dwInstalledVersionLS;
1284     DWORD dwUpdateVersionMS;
1285     DWORD dwUpdateVersionLS;
1286     DWORD dwAdvertisedVersionMS;
1287     DWORD dwAdvertisedVersionLS;
1288     DWORD dwReserved;
1289 } SOFTDISTINFO, *LPSOFTDISTINFO;
1290
1291 typedef struct _tagCODEBASEHOLD
1292 {
1293     DWORD cbSize;
1294     LPWSTR szDistUnit;
1295     LPWSTR szCodeBase;
1296     DWORD dwVersionMS;
1297     DWORD dwVersionLS;
1298     DWORD dwStyle;
1299 } CODEBASEHOLD, *LPCODEBASEHOLD;
1300
1301 [
1302     local,
1303     object,
1304     uuid(b15b8dc1-c7e1-11d0-8680-00aa00bdcb71),
1305     pointer_default(unique)
1306 ]
1307 interface ISoftDistExt : IUnknown
1308 {
1309     HRESULT ProcessSoftDist(
1310         [in] LPCWSTR szCDFURL,
1311         [in] IXMLElement *pSoftDistElement,
1312         [in, out] LPSOFTDISTINFO lpsdi );
1313
1314     HRESULT GetFirstCodeBase(
1315         [in] LPWSTR *szCodeBase,
1316         [in] LPDWORD dwMaxSize );
1317
1318     HRESULT GetNextCodeBase(
1319         [in] LPWSTR *szCodeBase,
1320         [in] LPDWORD dwMaxSize );
1321
1322     HRESULT AsyncInstallDistributionUnit(
1323         [in] IBindCtx *pbc,
1324         [in] LPVOID lpReserved,
1325         [in] DWORD flags,
1326         [in] LPCODEBASEHOLD lpcbh);
1327 }
1328
1329 typedef enum _tagINTERNETFEATURELIST
1330 {
1331     FEATURE_OBJECT_CACHING,
1332     FEATURE_ZONE_ELEVATION,
1333     FEATURE_MIME_HANDLING,
1334     FEATURE_MIME_SNIFFING,
1335     FEATURE_WINDOW_RESTRICTIONS,
1336     FEATURE_WEBOC_POPUPMANAGEMENT,
1337     FEATURE_BEHAVIORS,
1338     FEATURE_DISABLE_MK_PROTOCOL,
1339     FEATURE_LOCALMACHINE_LOCKDOWN,
1340     FEATURE_SECURITYBAND,
1341     FEATURE_RESTRICT_ACTIVEXINSTALL,
1342     FEATURE_VALIDATE_NAVIGATE_URL,
1343     FEATURE_RESTRICT_FILEDOWNLOAD,
1344     FEATURE_ADDON_MANAGEMENT,
1345     FEATURE_PROTOCOL_LOCKDOWN,
1346     FEATURE_HTTP_USERNAME_PASSWORD_DISABLE,
1347     FEATURE_SAFE_BINDTOOBJECT,
1348     FEATURE_UNC_SAVEDFILECHECK,
1349     FEATURE_GET_URL_DOM_FILEPATH_UNENCODED,
1350     FEATURE_TABBED_BROWSING,
1351     FEATURE_SSLUX,
1352     FEATURE_DISABLE_NAVIGATION_SOUNDS,
1353     FEATURE_DISABLE_LEGACY_COMPRESSION,
1354     FEATURE_FORCE_ADDR_AND_STATUS,
1355     FEATURE_XMLHTTP,
1356     FEATURE_DISABLE_TELNET_PROTOCOL,
1357     FEATURE_FEEDS,
1358     FEATURE_BLOCK_INPUT_PROMPTS,
1359     FEATURE_DOMSTORAGE,
1360     FEATURE_XDOMAINREQUEST,
1361     FEATURE_DATAURI,
1362     FEATURE_AJAX_CONNECTIONSERVICES,
1363     FEATURE_ENTRY_COUNT
1364 } INTERNETFEATURELIST;
1365
1366 cpp_quote("DEFINE_GUID(CLSID_InternetSecurityManager, 0x7b8a2d94, 0x0ac9, 0x11d1, 0x89, 0x6c, 0x00, 0xc0, 0x4f, 0xB6, 0xbf, 0xc4);")
1367 cpp_quote("DEFINE_GUID(CLSID_InternetZoneManager, 0x7B8A2D95, 0x0AC9, 0x11D1, 0x89, 0x6C, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4);")
1368 cpp_quote("DEFINE_GUID(IID_IAsyncMoniker, 0x79EAC9D3, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
1369 cpp_quote("DEFINE_GUID(IID_IAsyncBindCtx, 0x79EAC9D4, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
1370 cpp_quote("DEFINE_GUID(CLSID_StdURLMoniker, 0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
1371
1372 cpp_quote("DEFINE_GUID(CLSID_CdlProtocol, 0x3dd53d40, 0x7b8b, 0x11D0, 0xb0,0x13, 0x00,0xaa,0x00,0x59,0xce,0x02);")
1373 cpp_quote("DEFINE_GUID(CLSID_FileProtocol, 0x79EAC9E7, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1374 cpp_quote("DEFINE_GUID(CLSID_FtpProtocol, 0x79EAC9E3, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1375 cpp_quote("DEFINE_GUID(CLSID_GopherProtocol, 0x79EAC9E4, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1376 cpp_quote("DEFINE_GUID(CLSID_HttpProtocol, 0x79EAC9E2, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1377 cpp_quote("DEFINE_GUID(CLSID_HttpSProtocol, 0x79EAC9E5, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1378 cpp_quote("DEFINE_GUID(CLSID_MkProtocol, 0x79EAC9E6, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1379
1380 cpp_quote("#define URLMON_OPTION_USERAGENT          0x10000001")
1381 cpp_quote("#define URLMON_OPTION_USERAGENT_REFRESH  0x10000002")
1382 cpp_quote("#define URLMON_OPTION_URL_ENCODING       0x10000004")
1383
1384 cpp_quote("#define MK_S_ASYNCHRONOUS                0x000401E8")
1385 cpp_quote("#ifndef S_ASYNCHRONOUS")
1386 cpp_quote("#define S_ASYNCHRONOUS                   MK_S_ASYNCHRONOUS")
1387 cpp_quote("#endif")
1388
1389 cpp_quote("#define INET_E_ERROR_FIRST               0x800C0002")
1390 cpp_quote("#define INET_E_INVALID_URL               0x800C0002")
1391 cpp_quote("#define INET_E_NO_SESSION                0x800C0003")
1392 cpp_quote("#define INET_E_CANNOT_CONNECT            0x800C0004")
1393 cpp_quote("#define INET_E_RESOURCE_NOT_FOUND        0x800C0005")
1394 cpp_quote("#define INET_E_OBJECT_NOT_FOUND          0x800C0006")
1395 cpp_quote("#define INET_E_DATA_NOT_AVAILABLE        0x800C0007")
1396 cpp_quote("#define INET_E_DOWNLOAD_FAILURE          0x800C0008")
1397 cpp_quote("#define INET_E_AUTHENTICATION_REQUIRED   0x800C0009")
1398 cpp_quote("#define INET_E_NO_VALID_MEDIA            0x800C000A")
1399 cpp_quote("#define INET_E_CONNECTION_TIMEOUT        0x800C000B")
1400 cpp_quote("#define INET_E_INVALID_REQUEST           0x800C000C")
1401 cpp_quote("#define INET_E_UNKNOWN_PROTOCOL          0x800C000D")
1402 cpp_quote("#define INET_E_SECURITY_PROBLEM          0x800C000E")
1403 cpp_quote("#define INET_E_CANNOT_LOAD_DATA          0x800C000F")
1404 cpp_quote("#define INET_E_CANNOT_INSTANTIATE_OBJECT 0x800C0010")
1405 cpp_quote("#define INET_E_USE_DEFAULT_PROTOCOLHANDLER 0x800C0011")
1406 cpp_quote("#define INET_E_QUERYOPTION_UNKNOWN       0x800C0013")
1407 cpp_quote("#define INET_E_REDIRECT_FAILED           0x800C0014")
1408 cpp_quote("#define INET_E_REDIRECT_TO_DIR           0x800C0015")
1409 cpp_quote("#define INET_E_CANNOT_LOCK_REQUEST       0x800C0016")
1410 cpp_quote("#define INET_E_ERROR_LAST                INET_E_REDIRECT_TO_DIR")
1411 cpp_quote("#define INET_E_DEFAULT_ACTION            INET_E_USE_DEFAULT_PROTOCOLHANDLER")
1412
1413 cpp_quote("HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);")
1414 cpp_quote("HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);")
1415 cpp_quote("HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);")
1416 cpp_quote("HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);")
1417 cpp_quote("HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
1418 cpp_quote("HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
1419 cpp_quote("HRESULT WINAPI URLDownloadToCacheFileA(LPUNKNOWN,LPCSTR,LPSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);")
1420 cpp_quote("HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN,LPCWSTR,LPWSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);")
1421 cpp_quote("HRESULT WINAPI CoInternetGetSession(DWORD,IInternetSession**,DWORD);")
1422 cpp_quote("HRESULT WINAPI MkParseDisplayNameEx(IBindCtx*,LPCWSTR,ULONG*,IMoniker**);")
1423 cpp_quote("HRESULT WINAPI IsAsyncMoniker(IMoniker* pmk);")
1424 cpp_quote("HRESULT WINAPI CreateAsyncBindCtx(DWORD, IBindStatusCallback*, IEnumFORMATETC*, IBindCtx**);")
1425 cpp_quote("HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx*,DWORD,IBindStatusCallback*,IEnumFORMATETC*,IBindCtx**,DWORD);")
1426 cpp_quote("HRESULT WINAPI CoInternetCreateSecurityManager(IServiceProvider*,IInternetSecurityManager**,DWORD);")
1427 cpp_quote("HRESULT WINAPI CoInternetCombineUrl(LPCWSTR,LPCWSTR,DWORD,LPWSTR,DWORD,DWORD*,DWORD);")
1428 cpp_quote("HRESULT WINAPI CoInternetCompareUrl(LPCWSTR,LPCWSTR,DWORD);")
1429 cpp_quote("HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IInternetZoneManager**, DWORD);")
1430 cpp_quote("HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);")
1431 cpp_quote("HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);")
1432 cpp_quote("HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);")
1433 cpp_quote("HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);")
1434 cpp_quote("HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);")
1435 cpp_quote("HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);")
1436 cpp_quote("HRESULT WINAPI FindMimeFromData(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,LPWSTR*,DWORD);")
1437 cpp_quote("HRESULT WINAPI GetClassFileOrMime(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,CLSID*);")
1438 cpp_quote("HRESULT WINAPI HlinkGoBack(IUnknown*);")
1439 cpp_quote("HRESULT WINAPI HlinkGoForward(IUnknown*);")
1440 cpp_quote("HRESULT WINAPI HlinkNavigateMoniker(IUnknown*,IMoniker*);")
1441 cpp_quote("HRESULT WINAPI HlinkNavigateString(IUnknown*,LPCWSTR);")
1442 cpp_quote("HRESULT WINAPI HlinkSimpleNavigateToMoniker(IMoniker*,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);")
1443 cpp_quote("HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);")
1444 cpp_quote("HRESULT WINAPI IsValidURL(LPBC,LPCWSTR,DWORD);")
1445 cpp_quote("HRESULT WINAPI ObtainUserAgentString(DWORD,LPSTR,DWORD*);")
1446 cpp_quote("HRESULT WINAPI RegisterFormatEnumerator(LPBC,IEnumFORMATETC*,DWORD);")
1447 cpp_quote("HRESULT WINAPI RevokeFormatEnumerator(LPBC,IEnumFORMATETC*);")
1448 cpp_quote("HRESULT WINAPI RevokeBindStatusCallback(LPBC,IBindStatusCallback*);")
1449 cpp_quote("HRESULT WINAPI CopyStgMedium(const STGMEDIUM*,STGMEDIUM*);")
1450 cpp_quote("void WINAPI ReleaseBindInfo(BINDINFO*);")
1451 cpp_quote("HRESULT WINAPI UrlMkGetSessionOption(DWORD,LPVOID,DWORD,DWORD*,DWORD);")
1452 cpp_quote("HRESULT WINAPI UrlMkSetSessionOption(DWORD,LPVOID,DWORD,DWORD);")
1453 cpp_quote("HRESULT WINAPI URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
1454 cpp_quote("HRESULT WINAPI URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
1455 cpp_quote("HRESULT WINAPI URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
1456 cpp_quote("HRESULT WINAPI URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
1457 cpp_quote("HRESULT WINAPI URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);")
1458 cpp_quote("HRESULT WINAPI URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);")
1459
1460 cpp_quote("#define OInetCombineUrl CoInternetCombineUrl")
1461 cpp_quote("#define OInetCompareUrl CoInternetCompareUrl")
1462 cpp_quote("#define OInetGetSession CoInternetGetSession")
1463
1464 cpp_quote("#define MKSYS_URLMONIKER 6")
1465 cpp_quote("#define URL_MK_LEGACY            0")
1466 cpp_quote("#define URL_MK_UNIFORM           1")