snmpapi: Test and correct SnmpUtilOidNCmp when count is less than Oid length.
[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     } QUERYOPTION;
838
839     HRESULT ParseUrl(
840         [in] LPCWSTR pwzUrl,
841         [in] PARSEACTION ParseAction,
842         [in] DWORD dwParseFlags,
843         [out] LPWSTR pwzResult,
844         [in] DWORD cchResult,
845         [out] DWORD *pcchResult,
846         [in] DWORD dwReserved);
847
848     HRESULT CombineUrl(
849         [in] LPCWSTR pwzBaseUrl,
850         [in] LPCWSTR pwzRelativeUrl,
851         [in] DWORD dwCombineFlags,
852         [out] LPWSTR pwzResult,
853         [in] DWORD cchResult,
854         [out] DWORD *pcchResult,
855         [in] DWORD dwReserved);
856
857     HRESULT CompareUrl(
858         [in] LPCWSTR pwzUrl1,
859         [in] LPCWSTR pwzUrl2,
860         [in] DWORD dwCompareFlags);
861
862     HRESULT QueryInfo(
863         [in] LPCWSTR pwzUrl,
864         [in] QUERYOPTION OueryOption,
865         [in] DWORD dwQueryFlags,
866         [in, out,size_is(*pcbBuf)] LPVOID pBuffer,
867         [in] DWORD cbBuffer,
868         [in, out] DWORD *pcbBuf,
869         [in] DWORD dwReserved);
870 }
871
872 /*****************************************************************************
873  * IInternetSession interface
874  */
875 [
876     local,
877     object,
878     uuid(79eac9e7-baf9-11ce-8c82-00aa004ba90b),
879     pointer_default(unique)
880 ]
881 interface IInternetSession : IUnknown
882 {
883     typedef [unique] IInternetSession *LPIINTERNETSESSION;
884
885     typedef enum _tagOIBDG_FLAGS
886     {
887         OIBDG_APARTMENTTHREADED = 0x0100,
888         OIBDG_DATAONLY          = 0x1000
889     } OIBDG_FLAGS;
890
891     HRESULT RegisterNameSpace(
892         [in] IClassFactory *pCF,
893         [in] REFCLSID rclsid,
894         [in] LPCWSTR pwzProtocol,
895         [in] ULONG cPatterns,
896         [in] const LPCWSTR *ppwzPatterns,
897         [in] DWORD dwReserved);
898
899     HRESULT UnregisterNameSpace(
900         [in] IClassFactory *pCF,
901         [in] LPCWSTR pszProtocol);
902
903     HRESULT RegisterMimeFilter(
904         [in] IClassFactory *pCF,
905         [in] REFCLSID rclsid,
906         [in] LPCWSTR pwzType);
907
908     HRESULT UnregisterMimeFilter(
909         [in] IClassFactory *pCF,
910         [in] LPCWSTR pwzType);
911
912     HRESULT CreateBinding(
913         [in] LPBC pBC,
914         [in] LPCWSTR szUrl,
915         [in] IUnknown *pUnkOuter,
916         [out, unique] IUnknown **ppUnk,
917         [out, unique] IInternetProtocol **ppOInetProt,
918         [in] DWORD dwOption);
919
920     HRESULT SetSessionOption(
921         [in] DWORD dwOption,
922         [in] LPVOID pBuffer,
923         [in] DWORD dwBufferLength,
924         [in] DWORD dwReserved);
925 }
926
927 /*****************************************************************************
928  * IInternetSecurityMgrSite interface
929  */
930 [
931     local,
932     object,
933     uuid(79eac9ed-baf9-11ce-8c82-00aa004ba90b),
934     pointer_default(unique)
935 ]
936 interface IInternetSecurityMgrSite : IUnknown
937 {
938     HRESULT GetWindow(
939         [out] HWND *phwnd);
940
941     HRESULT EnableModeless(
942         [in] BOOL fEnable);
943 }
944
945
946 /*****************************************************************************
947  * IInternetSecurityManager interface
948  */
949 cpp_quote("#define SID_SInternetSecurityManager IID_IInternetSecurityManager")
950
951 [
952     object,
953     uuid(79eac9ee-baf9-11ce-8c82-00aa004ba90b),
954     pointer_default(unique)
955 ]
956 interface IInternetSecurityManager : IUnknown
957 {
958     HRESULT SetSecuritySite(
959         [in, unique] IInternetSecurityMgrSite *pSite);
960
961     HRESULT GetSecuritySite(
962         [out] IInternetSecurityMgrSite **ppSite);
963
964     HRESULT MapUrlToZone(
965         [in] LPCWSTR pwszUrl,
966         [out] DWORD *pdwZone,
967         [in] DWORD dwFlags);
968
969 cpp_quote("#define MAX_SIZE_SECURITY_ID 512")
970
971     HRESULT GetSecurityId(
972         [in] LPCWSTR pwszUrl,
973         [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,
974         [in, out] DWORD *pcbSecurityId,
975         [in] DWORD_PTR dwReserved);
976
977
978     typedef enum {
979         PUAF_DEFAULT                = 0x00,
980         PUAF_NOUI                   = 0x01,
981         PUAF_ISFILE                 = 0x02,
982         PUAF_WARN_IF_DENIED         = 0x04,
983         PUAF_FORCEUI_FOREGROUND     = 0x08,
984         PUAF_CHECK_TIPS             = 0x10
985     } PUAF;
986
987     HRESULT ProcessUrlAction(
988         [in] LPCWSTR pwszUrl,
989         [in] DWORD dwAction,
990         [out, size_is(cbPolicy)] BYTE *pPolicy,
991         [in] DWORD cbPolicy,
992         [in] BYTE *pContext,
993         [in] DWORD cbContext,
994         [in] DWORD dwFlags,
995         [in] DWORD dwReserved);
996
997     HRESULT QueryCustomPolicy(
998         [in] LPCWSTR pwszUrl,
999         [in] REFGUID guidKey,
1000         [out, size_is(,*pcbPolicy)] BYTE **ppPolicy,
1001         [out] DWORD *pcbPolicy,
1002         [in] BYTE *pContext,
1003         [in] DWORD cbContext,
1004         [in] DWORD dwReserved);
1005
1006     typedef enum {
1007         SZM_CREATE = 0x0,
1008         SZM_DELETE = 0x1
1009     } SZM_FLAGS;
1010
1011     HRESULT SetZoneMapping(
1012         [in] DWORD dwZone,
1013         [in] LPCWSTR lpszPattern,
1014         [in] DWORD dwFlags);
1015
1016     HRESULT GetZoneMappings(
1017         [in] DWORD dwZone,
1018         [out] IEnumString **ppenumString,
1019         [in] DWORD dwFlags);
1020 }
1021
1022 cpp_quote("#define URLACTION_MIN                        0x00001000")
1023 cpp_quote("#define URLACTION_DOWNLOAD_MIN               0x00001000")
1024 cpp_quote("#define URLACTION_DOWNLOAD_SIGNED_ACTIVEX    0x00001001")
1025 cpp_quote("#define URLACTION_DOWNLOAD_UNSIGNED_ACTIVEX  0x00001004")
1026 cpp_quote("#define URLACTION_DOWNLOAD_CURR_MAX          0x00001004")
1027 cpp_quote("#define URLACTION_DOWNLOAD_MAX               0x000011ff")
1028
1029 cpp_quote("#define URLACTION_ACTIVEX_MIN                     0x00001200")
1030 cpp_quote("#define URLACTION_ACTIVEX_RUN                     0x00001200")
1031 cpp_quote("#define URLPOLICY_ACTIVEX_CHECK_LIST              0x00010000")
1032 cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_OBJECT_SAFETY  0x00001201")
1033 cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_DATA_SAFETY    0x00001202")
1034 cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_SCRIPT_SAFETY  0x00001203")
1035 cpp_quote("#define URLACTION_SCRIPT_OVERRIDE_SAFETY          0x00001401")
1036 cpp_quote("#define URLACTION_ACTIVEX_CONFIRM_NOOBJECTSAFETY  0x00001204")
1037 cpp_quote("#define URLACTION_ACTIVEX_TREATASUNTRUSTED        0x00001205")
1038 cpp_quote("#define URLACTION_ACTIVEX_CURR_MAX                0x00001205")
1039 cpp_quote("#define URLACTION_ACTIVEX_MAX                     0x000013ff")
1040
1041 cpp_quote("#define URLACTION_SCRIPT_MIN           0x00001400")
1042 cpp_quote("#define URLACTION_SCRIPT_RUN           0x00001400")
1043 cpp_quote("#define URLACTION_SCRIPT_JAVA_USE      0x00001402")
1044 cpp_quote("#define URLACTION_SCRIPT_SAFE_ACTIVEX  0x00001405")
1045 cpp_quote("#define URLACTION_CROSS_DOMAIN_DATA    0x00001406")
1046 cpp_quote("#define URLACTION_SCRIPT_PASTE         0x00001407")
1047 cpp_quote("#define URLACTION_SCRIPT_CURR_MAX      0x00001407")
1048 cpp_quote("#define URLACTION_SCRIPT_MAX           0x000015ff")
1049
1050 cpp_quote("#define URLACTION_HTML_MIN                0x00001600")
1051 cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS       0x00001601")
1052 cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_FROM  0x00001602")
1053 cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_TO    0x00001603")
1054 cpp_quote("#define URLACTION_HTML_FONT_DOWNLOAD      0x00001604")
1055 cpp_quote("#define URLACTION_HTML_JAVA_RUN           0x00001605")
1056 cpp_quote("#define URLACTION_HTML_USERDATA_SAVE      0x00001606")
1057 cpp_quote("#define URLACTION_HTML_SUBFRAME_NAVIGATE  0x00001607")
1058 cpp_quote("#define URLACTION_HTML_META_REFRESH       0x00001608")
1059 cpp_quote("#define URLACTION_HTML_MIXED_CONTENT      0x00001609")
1060 cpp_quote("#define URLACTION_HTML_MAX                0x000017ff")
1061
1062 cpp_quote("#define URLACTION_SHELL_MIN              0x00001800")
1063 cpp_quote("#define URLACTION_SHELL_INSTALL_DTITEMS  0x00001800")
1064 cpp_quote("#define URLACTION_SHELL_MOVE_OR_COPY     0x00001802")
1065 cpp_quote("#define URLACTION_SHELL_FILE_DOWNLOAD    0x00001803")
1066 cpp_quote("#define URLACTION_SHELL_VERB             0x00001804")
1067 cpp_quote("#define URLACTION_SHELL_WEBVIEW_VERB     0x00001805")
1068 cpp_quote("#define URLACTION_SHELL_CURR_MAX         0x00001805")
1069 cpp_quote("#define URLACTION_SHELL_MAX              0x000019ff")
1070
1071 cpp_quote("#define URLACTION_NETWORK_MIN                  0x00001a00")
1072 cpp_quote("#define URLACTION_CREDENTIALS_USE              0x00001a00")
1073 cpp_quote("#define URLACTION_AUTHENTICATE_CLIENT          0x00001a01")
1074 cpp_quote("#define URLACTION_COOKIES                      0x00001a02")
1075 cpp_quote("#define URLACTION_COOKIES_SESSION              0x00001a03")
1076 cpp_quote("#define URLACTION_CLIENT_CERT_PROMPT           0x00001a04")
1077 cpp_quote("#define URLACTION_COOKIES_THIRD_PARTY          0x00001a05")
1078 cpp_quote("#define URLACTION_COOKIES_SESSION_THIRD_PARTY  0x00001a06")
1079 cpp_quote("#define URLACTION_COOKIES_ENABLED              0x00001a10")
1080 cpp_quote("#define URLACTION_NETWORK_CURR_MAX             0x00001a10")
1081 cpp_quote("#define URLACTION_NETWORK_MAX                  0x00001bff")
1082
1083 cpp_quote("#define URLACTION_JAVA_MIN          0x00001c00")
1084 cpp_quote("#define URLACTION_JAVA_PERMISSIONS  0x00001c00")
1085 cpp_quote("#define URLPOLICY_JAVA_PROHIBIT     0x00000000")
1086 cpp_quote("#define URLPOLICY_JAVA_HIGH         0x00010000")
1087 cpp_quote("#define URLPOLICY_JAVA_MEDIUM       0x00020000")
1088 cpp_quote("#define URLPOLICY_JAVA_LOW          0x00030000")
1089 cpp_quote("#define URLPOLICY_JAVA_CUSTOM       0x00800000")
1090 cpp_quote("#define URLACTION_JAVA_CURR_MAX     0x00001c00")
1091 cpp_quote("#define URLACTION_JAVA_MAX          0x00001cff")
1092
1093 cpp_quote("#define URLACTION_INFODELIVERY_MIN                        0x00001d00")
1094 cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_CHANNELS         0x00001d00")
1095 cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_CHANNELS        0x00001d01")
1096 cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_CHANNELS       0x00001d02")
1097 cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_SUBSCRIPTIONS    0x00001d03")
1098 cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_SUBSCRIPTIONS   0x00001d04")
1099 cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_SUBSCRIPTIONS  0x00001d05")
1100 cpp_quote("#define URLACTION_INFODELIVERY_NO_CHANNEL_LOGGING         0x00001d06")
1101 cpp_quote("#define URLACTION_INFODELIVERY_CURR_MAX                   0x00001d06")
1102 cpp_quote("#define URLACTION_INFODELIVERY_MAX                        0x00001dff")
1103
1104 cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MIN          0x00001e00")
1105 cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_PERMISSIONS  0x00001e05")
1106 cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PROHIBIT     0x00010000")
1107 cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PRECACHE     0x00020000")
1108 cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_AUTOINSTALL  0x00030000")
1109 cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MAX          0x00001eff")
1110
1111 cpp_quote("#define URLPOLICY_ALLOW     0x00")
1112 cpp_quote("#define URLPOLICY_QUERY     0x01")
1113 cpp_quote("#define URLPOLICY_DISALLOW  0x03")
1114
1115 cpp_quote("#define URLPOLICY_NOTIFY_ON_ALLOW     0x10")
1116 cpp_quote("#define URLPOLICY_NOTIFY_ON_DISALLOW  0x20")
1117
1118 cpp_quote("#define URLPOLICY_LOG_ON_ALLOW     0x40")
1119 cpp_quote("#define URLPOLICY_LOG_ON_DISALLOW  0x80")
1120
1121 cpp_quote("#define URLPOLICY_DONTCHECKDLGBOX     0x100")
1122
1123 cpp_quote("#define URLPOLICY_CREDENTIALS_SILENT_LOGON_OK     0x00000000")
1124 cpp_quote("#define URLPOLICY_CREDENTIALS_MUST_PROMPT_USER    0x00010000")
1125 cpp_quote("#define URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT  0x00020000")
1126 cpp_quote("#define URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY      0x00030000")
1127
1128 cpp_quote("#define URLPOLICY_AUTHENTICATE_CLEARTEXT_OK        0x00000000")
1129 cpp_quote("#define URLPOLICY_AUTHENTICATE_CHALLENGE_RESPONSE  0x00010000")
1130 cpp_quote("#define URLPOLICY_AUTHENTICATE_MUTUAL_ONLY         0x00030000")
1131
1132 cpp_quote("#define URLPOLICY_MASK_PERMISSIONS  0x0f")
1133 cpp_quote("#define GetUrlPolicyPermissions(dw)      (dw & URLPOLICY_MASK_PERMISSIONS)")
1134 cpp_quote("#define SetUrlPolicyPermissions(dw,dw2)  ((dw) = ((dw) & ~URLPOLICY_MASK_PERMISSIONS) | (dw2))")
1135
1136 /*****************************************************************************
1137  * IInternetZoneManager interface
1138  */
1139 [
1140     local,
1141     object,
1142     uuid(79EAC9EF-BAf9-11CE-8C82-00AA004BA90B),
1143     pointer_default(unique)
1144 ]
1145 interface IInternetZoneManager : IUnknown
1146 {
1147     typedef [unique] IInternetZoneManager* LPURLZONEMANAGER;
1148
1149     typedef enum tagURLZONE
1150     {
1151         URLZONE_PREDEFINED_MIN  = 0,
1152         URLZONE_LOCAL_MACHINE   = 0,
1153         URLZONE_INTRANET        = 1,
1154         URLZONE_TRUSTED         = 2,
1155         URLZONE_INTERNET        = 3,
1156         URLZONE_UNTRUSTED       = 4,
1157         URLZONE_PREDEFINED_MAX  = 999,
1158         URLZONE_USER_MIN        = 1000,
1159         URLZONE_USER_MAX        = 10000,
1160     }  URLZONE;
1161
1162     typedef enum tagURLTEMPLATE
1163     {
1164         URLTEMPLATE_CUSTOM         = 0x00000,
1165         URLTEMPLATE_PREDEFINED_MIN = 0x10000,
1166         URLTEMPLATE_LOW            = 0x10000,
1167         URLTEMPLATE_MEDIUM         = 0x11000,
1168         URLTEMPLATE_HIGH           = 0x12000,
1169         URLTEMPLATE_PREDEFINED_MAX = 0x20000,
1170     } URLTEMPLATE ;
1171
1172     typedef enum {
1173         ZAFLAGS_CUSTOM_EDIT            = 0x00000001,
1174         ZAFLAGS_ADD_SITES              = 0x00000002,
1175         ZAFLAGS_REQUIRE_VERIFICATION   = 0x00000004,
1176         ZAFLAGS_INCLUDE_PROXY_OVERRIDE = 0x00000008,
1177         ZAFLAGS_INCLUDE_INTRANET_SITES = 0x00000010,
1178         ZAFLAGS_NO_UI                  = 0x00000020,
1179         ZAFLAGS_SUPPORTS_VERIFICATION  = 0x00000040,
1180         ZAFLAGS_UNC_AS_INTRANET        = 0x00000080,
1181     } ZAFLAGS ;
1182
1183     enum {
1184         MAX_ZONE_PATH        = 260,
1185         MAX_ZONE_DESCRIPTION = 200
1186     };
1187
1188     typedef struct _ZONEATTRIBUTES {
1189         ULONG cbSize;
1190         WCHAR szDisplayName[MAX_ZONE_PATH];
1191         WCHAR szDescription[MAX_ZONE_DESCRIPTION];
1192         WCHAR szIconPath[MAX_ZONE_PATH];
1193         DWORD dwTemplateMinLevel;
1194         DWORD dwTemplateRecommended;
1195         DWORD dwTemplateCurrentLevel;
1196         DWORD dwFlags;
1197     } ZONEATTRIBUTES, *LPZONEATTRIBUTES;
1198
1199     typedef enum _URLZONEREG {
1200         URLZONEREG_DEFAULT,
1201         URLZONEREG_HKLM,
1202         URLZONEREG_HKCU
1203     } URLZONEREG;
1204
1205     HRESULT GetZoneAttributes(
1206         [in]              DWORD dwZone,
1207         [in, out, unique] ZONEATTRIBUTES* pZoneAttributes);
1208
1209     HRESULT SetZoneAttributes(
1210         [in] DWORD dwZone,
1211         [in] ZONEATTRIBUTES* pZoneAttributes);
1212
1213     HRESULT GetZoneCustomPolicy(
1214         [in]  DWORD dwZone,
1215         [in]  REFGUID guidKey,
1216         [out] BYTE **ppPolicy,
1217         [out] DWORD* pcbPolicy,
1218         [in]  URLZONEREG ulrZoneReg);
1219
1220     HRESULT SetZoneCustomPolicy(
1221         [in] DWORD dwZone,
1222         [in] REFGUID guidKey,
1223         [in] BYTE *ppPolicy,
1224         [in] DWORD pcbPolicy,
1225         [in] URLZONEREG ulrZoneReg);
1226
1227     HRESULT GetZoneActionPolicy(
1228         [in]  DWORD dwZone,
1229         [in]  DWORD dwAction,
1230         [out] BYTE* pPolicy,
1231         [in]  DWORD cbPolicy,
1232         [in]  URLZONEREG urlZoneReg);
1233
1234     HRESULT SetZoneActionPolicy(
1235         [in] DWORD dwZone,
1236         [in] DWORD dwAction,
1237         [in] BYTE* pPolicy,
1238         [in] DWORD cbPolicy,
1239         [in] URLZONEREG urlZoneReg);
1240
1241     HRESULT PromptAction(
1242         [in] DWORD dwAction,
1243         [in] HWND hwndParent,
1244         [in] LPCWSTR pwszUrl,
1245         [in] LPCWSTR pwszText,
1246         [in] DWORD dwPromptFlags );
1247
1248     HRESULT LogAction(
1249         [in] DWORD dwAction,
1250         [in] LPCWSTR pwszUrl,
1251         [in] LPCWSTR pwszText,
1252         [in] DWORD dwLogFlags);
1253
1254     HRESULT CreateZoneEnumerator(
1255         [out] DWORD* pdwEnum,
1256         [out] DWORD* pdwCount,
1257         [in]  DWORD dwFlags);
1258
1259     HRESULT GetZoneAt(
1260         [in]  DWORD dwEnum,
1261         [in]  DWORD dwIndex,
1262         [out] DWORD* pdwZone);
1263
1264     HRESULT DestroyZoneEnumerator(
1265         [in] DWORD dwEnum);
1266
1267     HRESULT CopyTemplatePoliciesToZone(
1268         [in] DWORD dwTemplate,
1269         [in] DWORD dwZone,
1270         [in] DWORD dwReserved);
1271 }
1272
1273 typedef struct _tagSOFTDISTINFO
1274 {
1275     ULONG cbSize;
1276     DWORD dwFlags;
1277     DWORD dwAdState;
1278     LPWSTR szTitle;
1279     LPWSTR szAbstract;
1280     LPWSTR szHREF;
1281     DWORD dwInstalledVersionMS;
1282     DWORD dwInstalledVersionLS;
1283     DWORD dwUpdateVersionMS;
1284     DWORD dwUpdateVersionLS;
1285     DWORD dwAdvertisedVersionMS;
1286     DWORD dwAdvertisedVersionLS;
1287     DWORD dwReserved;
1288 } SOFTDISTINFO, *LPSOFTDISTINFO;
1289
1290 typedef struct _tagCODEBASEHOLD
1291 {
1292     DWORD cbSize;
1293     LPWSTR szDistUnit;
1294     LPWSTR szCodeBase;
1295     DWORD dwVersionMS;
1296     DWORD dwVersionLS;
1297     DWORD dwStyle;
1298 } CODEBASEHOLD, *LPCODEBASEHOLD;
1299
1300 [
1301     local,
1302     object,
1303     uuid(b15b8dc1-c7e1-11d0-8680-00aa00bdcb71),
1304     pointer_default(unique)
1305 ]
1306 interface ISoftDistExt : IUnknown
1307 {
1308     HRESULT ProcessSoftDist(
1309         [in] LPCWSTR szCDFURL,
1310         [in] IXMLElement *pSoftDistElement,
1311         [in, out] LPSOFTDISTINFO lpsdi );
1312
1313     HRESULT GetFirstCodeBase(
1314         [in] LPWSTR *szCodeBase,
1315         [in] LPDWORD dwMaxSize );
1316
1317     HRESULT GetNextCodeBase(
1318         [in] LPWSTR *szCodeBase,
1319         [in] LPDWORD dwMaxSize );
1320
1321     HRESULT AsyncInstallDistributionUnit(
1322         [in] IBindCtx *pbc,
1323         [in] LPVOID lpReserved,
1324         [in] DWORD flags,
1325         [in] LPCODEBASEHOLD lpcbh);
1326 }
1327
1328 typedef enum _tagINTERNETFEATURELIST
1329 {
1330     FEATURE_OBJECT_CACHING,
1331     FEATURE_ZONE_ELEVATION,
1332     FEATURE_MIME_HANDLING,
1333     FEATURE_MIME_SNIFFING,
1334     FEATURE_WINDOW_RESTRICTIONS,
1335     FEATURE_WEBOC_POPUPMANAGEMENT,
1336     FEATURE_BEHAVIORS,
1337     FEATURE_DISABLE_MK_PROTOCOL,
1338     FEATURE_LOCALMACHINE_LOCKDOWN,
1339     FEATURE_SECURITYBAND,
1340     FEATURE_RESTRICT_ACTIVEXINSTALL,
1341     FEATURE_VALIDATE_NAVIGATE_URL,
1342     FEATURE_RESTRICT_FILEDOWNLOAD,
1343     FEATURE_ADDON_MANAGEMENT,
1344     FEATURE_PROTOCOL_LOCKDOWN,
1345     FEATURE_HTTP_USERNAME_PASSWORD_DISABLE,
1346     FEATURE_SAFE_BINDTOOBJECT,
1347     FEATURE_UNC_SAVEDFILECHECK,
1348     FEATURE_GET_URL_DOM_FILEPATH_UNENCODED,
1349     FEATURE_TABBED_BROWSING,
1350     FEATURE_SSLUX,
1351     FEATURE_DISABLE_NAVIGATION_SOUNDS,
1352     FEATURE_DISABLE_LEGACY_COMPRESSION,
1353     FEATURE_FORCE_ADDR_AND_STATUS,
1354     FEATURE_XMLHTTP,
1355     FEATURE_DISABLE_TELNET_PROTOCOL,
1356     FEATURE_FEEDS,
1357     FEATURE_BLOCK_INPUT_PROMPTS,
1358     FEATURE_DOMSTORAGE,
1359     FEATURE_XDOMAINREQUEST,
1360     FEATURE_DATAURI,
1361     FEATURE_AJAX_CONNECTIONSERVICES,
1362     FEATURE_ENTRY_COUNT
1363 } INTERNETFEATURELIST;
1364
1365 cpp_quote("DEFINE_GUID(CLSID_InternetSecurityManager, 0x7b8a2d94, 0x0ac9, 0x11d1, 0x89, 0x6c, 0x00, 0xc0, 0x4f, 0xB6, 0xbf, 0xc4);")
1366 cpp_quote("DEFINE_GUID(CLSID_InternetZoneManager, 0x7B8A2D95, 0x0AC9, 0x11D1, 0x89, 0x6C, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4);")
1367 cpp_quote("DEFINE_GUID(IID_IAsyncMoniker, 0x79EAC9D3, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
1368 cpp_quote("DEFINE_GUID(IID_IAsyncBindCtx, 0x79EAC9D4, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
1369 cpp_quote("DEFINE_GUID(CLSID_StdURLMoniker, 0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
1370
1371 cpp_quote("DEFINE_GUID(CLSID_CdlProtocol, 0x3dd53d40, 0x7b8b, 0x11D0, 0xb0,0x13, 0x00,0xaa,0x00,0x59,0xce,0x02);")
1372 cpp_quote("DEFINE_GUID(CLSID_FileProtocol, 0x79EAC9E7, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1373 cpp_quote("DEFINE_GUID(CLSID_FtpProtocol, 0x79EAC9E3, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1374 cpp_quote("DEFINE_GUID(CLSID_GopherProtocol, 0x79EAC9E4, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1375 cpp_quote("DEFINE_GUID(CLSID_HttpProtocol, 0x79EAC9E2, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1376 cpp_quote("DEFINE_GUID(CLSID_HttpSProtocol, 0x79EAC9E5, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1377 cpp_quote("DEFINE_GUID(CLSID_MkProtocol, 0x79EAC9E6, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
1378
1379 cpp_quote("#define URLMON_OPTION_USERAGENT          0x10000001")
1380 cpp_quote("#define URLMON_OPTION_USERAGENT_REFRESH  0x10000002")
1381 cpp_quote("#define URLMON_OPTION_URL_ENCODING       0x10000004")
1382
1383 cpp_quote("#define MK_S_ASYNCHRONOUS                0x000401E8")
1384 cpp_quote("#ifndef S_ASYNCHRONOUS")
1385 cpp_quote("#define S_ASYNCHRONOUS                   MK_S_ASYNCHRONOUS")
1386 cpp_quote("#endif")
1387
1388 cpp_quote("#define INET_E_ERROR_FIRST               0x800C0002")
1389 cpp_quote("#define INET_E_INVALID_URL               0x800C0002")
1390 cpp_quote("#define INET_E_NO_SESSION                0x800C0003")
1391 cpp_quote("#define INET_E_CANNOT_CONNECT            0x800C0004")
1392 cpp_quote("#define INET_E_RESOURCE_NOT_FOUND        0x800C0005")
1393 cpp_quote("#define INET_E_OBJECT_NOT_FOUND          0x800C0006")
1394 cpp_quote("#define INET_E_DATA_NOT_AVAILABLE        0x800C0007")
1395 cpp_quote("#define INET_E_DOWNLOAD_FAILURE          0x800C0008")
1396 cpp_quote("#define INET_E_AUTHENTICATION_REQUIRED   0x800C0009")
1397 cpp_quote("#define INET_E_NO_VALID_MEDIA            0x800C000A")
1398 cpp_quote("#define INET_E_CONNECTION_TIMEOUT        0x800C000B")
1399 cpp_quote("#define INET_E_INVALID_REQUEST           0x800C000C")
1400 cpp_quote("#define INET_E_UNKNOWN_PROTOCOL          0x800C000D")
1401 cpp_quote("#define INET_E_SECURITY_PROBLEM          0x800C000E")
1402 cpp_quote("#define INET_E_CANNOT_LOAD_DATA          0x800C000F")
1403 cpp_quote("#define INET_E_CANNOT_INSTANTIATE_OBJECT 0x800C0010")
1404 cpp_quote("#define INET_E_USE_DEFAULT_PROTOCOLHANDLER 0x800C0011")
1405 cpp_quote("#define INET_E_QUERYOPTION_UNKNOWN       0x800C0013")
1406 cpp_quote("#define INET_E_REDIRECT_FAILED           0x800C0014")
1407 cpp_quote("#define INET_E_REDIRECT_TO_DIR           0x800C0015")
1408 cpp_quote("#define INET_E_CANNOT_LOCK_REQUEST       0x800C0016")
1409 cpp_quote("#define INET_E_ERROR_LAST                INET_E_REDIRECT_TO_DIR")
1410 cpp_quote("#define INET_E_DEFAULT_ACTION            INET_E_USE_DEFAULT_PROTOCOLHANDLER")
1411
1412 cpp_quote("HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);")
1413 cpp_quote("HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);")
1414 cpp_quote("HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);")
1415 cpp_quote("HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);")
1416 cpp_quote("HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
1417 cpp_quote("HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
1418 cpp_quote("HRESULT WINAPI URLDownloadToCacheFileA(LPUNKNOWN,LPCSTR,LPSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);")
1419 cpp_quote("HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN,LPCWSTR,LPWSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);")
1420 cpp_quote("HRESULT WINAPI CoInternetGetSession(DWORD,IInternetSession**,DWORD);")
1421 cpp_quote("HRESULT WINAPI MkParseDisplayNameEx(IBindCtx*,LPCWSTR,ULONG*,IMoniker**);")
1422 cpp_quote("HRESULT WINAPI IsAsyncMoniker(IMoniker* pmk);")
1423 cpp_quote("HRESULT WINAPI CreateAsyncBindCtx(DWORD, IBindStatusCallback*, IEnumFORMATETC*, IBindCtx**);")
1424 cpp_quote("HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx*,DWORD,IBindStatusCallback*,IEnumFORMATETC*,IBindCtx**,DWORD);")
1425 cpp_quote("HRESULT WINAPI CoInternetCreateSecurityManager(IServiceProvider*,IInternetSecurityManager**,DWORD);")
1426 cpp_quote("HRESULT WINAPI CoInternetCombineUrl(LPCWSTR,LPCWSTR,DWORD,LPWSTR,DWORD,DWORD*,DWORD);")
1427 cpp_quote("HRESULT WINAPI CoInternetCompareUrl(LPCWSTR,LPCWSTR,DWORD);")
1428 cpp_quote("HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IInternetZoneManager**, DWORD);")
1429 cpp_quote("HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);")
1430 cpp_quote("HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);")
1431 cpp_quote("HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);")
1432 cpp_quote("HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);")
1433 cpp_quote("HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);")
1434 cpp_quote("HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);")
1435 cpp_quote("HRESULT WINAPI FindMimeFromData(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,LPWSTR*,DWORD);")
1436 cpp_quote("HRESULT WINAPI GetClassFileOrMime(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,CLSID*);")
1437 cpp_quote("HRESULT WINAPI HlinkGoBack(IUnknown*);")
1438 cpp_quote("HRESULT WINAPI HlinkGoForward(IUnknown*);")
1439 cpp_quote("HRESULT WINAPI HlinkNavigateMoniker(IUnknown*,IMoniker*);")
1440 cpp_quote("HRESULT WINAPI HlinkNavigateString(IUnknown*,LPCWSTR);")
1441 cpp_quote("HRESULT WINAPI HlinkSimpleNavigateToMoniker(IMoniker*,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);")
1442 cpp_quote("HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);")
1443 cpp_quote("HRESULT WINAPI IsValidURL(LPBC,LPCWSTR,DWORD);")
1444 cpp_quote("HRESULT WINAPI ObtainUserAgentString(DWORD,LPSTR,DWORD*);")
1445 cpp_quote("HRESULT WINAPI RegisterFormatEnumerator(LPBC,IEnumFORMATETC*,DWORD);")
1446 cpp_quote("HRESULT WINAPI RevokeFormatEnumerator(LPBC,IEnumFORMATETC*);")
1447 cpp_quote("HRESULT WINAPI RevokeBindStatusCallback(LPBC,IBindStatusCallback*);")
1448 cpp_quote("HRESULT WINAPI CopyStgMedium(const STGMEDIUM*,STGMEDIUM*);")
1449 cpp_quote("void WINAPI ReleaseBindInfo(BINDINFO*);")
1450 cpp_quote("HRESULT WINAPI UrlMkGetSessionOption(DWORD,LPVOID,DWORD,DWORD*,DWORD);")
1451 cpp_quote("HRESULT WINAPI UrlMkSetSessionOption(DWORD,LPVOID,DWORD,DWORD);")
1452 cpp_quote("HRESULT WINAPI URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
1453 cpp_quote("HRESULT WINAPI URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
1454 cpp_quote("HRESULT WINAPI URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
1455 cpp_quote("HRESULT WINAPI URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
1456 cpp_quote("HRESULT WINAPI URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);")
1457 cpp_quote("HRESULT WINAPI URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);")
1458
1459 cpp_quote("#define OInetCombineUrl CoInternetCombineUrl")
1460 cpp_quote("#define OInetCompareUrl CoInternetCompareUrl")
1461 cpp_quote("#define OInetGetSession CoInternetGetSession")
1462
1463 cpp_quote("#define MKSYS_URLMONIKER 6")
1464 cpp_quote("#define URL_MK_LEGACY            0")
1465 cpp_quote("#define URL_MK_UNIFORM           1")