/*
 * Copyright (C) 2005 Vijay Kiran Kamuju
 * Copyright (C) 2008 Alistair Leslie-Hughes
 * Copyright (C) 2010 Nikolay Sivov for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include <msxml6did.h>
#include <idispids.h>

import "unknwn.idl";
import "objidl.idl";
import "oaidl.idl";

#ifndef __WIDL__
#define threading(model)
#define progid(str)
#define vi_progid(str)
#endif

interface IXMLDOMImplementation;
interface IXMLDOMNode;
interface IXMLDOMDocumentFragment;
interface IXMLDOMDocument;
interface IXMLDOMSchemaCollection;
interface IXMLDOMDocument2;
interface IXMLDOMNodeList;
interface IXMLDOMNamedNodeMap;
interface IXMLDOMCharacterData;
interface IXMLDOMAttribute;
interface IXMLDOMElement;
interface IXMLDOMText;
interface IXMLDOMComment;
interface IXMLDOMProcessingInstruction;
interface IXMLDOMCDATASection;
interface IXMLDOMDocumentType;
interface IXMLDOMNotation;
interface IXMLDOMEntity;
interface IXMLDOMEntityReference;
interface IXMLDOMParseError;
interface IXMLDOMParseErrorCollection;
interface IXMLHTTPRequest2Callback;
interface IXMLHTTPRequest3Callback;
interface IXTLRuntime;
interface IXSLTemplate;
interface IXSLProcessor;

/* SAX Interfaces */
interface ISAXAttributes;
interface ISAXContentHandler;
interface ISAXDeclHandler;
interface ISAXDTDHandler;
interface ISAXEntityResolver;
interface ISAXErrorHandler;
interface ISAXLexicalHandler;
interface ISAXLocator;
interface ISAXXMLFilter;
interface ISAXXMLReader;

interface IVBSAXAttributes;
interface IVBSAXContentHandler;
interface IVBSAXDeclHandler;
interface IVBSAXDTDHandler;
interface IVBSAXEntityResolver;
interface IVBSAXErrorHandler;
interface IVBSAXLexicalHandler;
interface IVBSAXLocator;
interface IVBSAXXMLFilter;
interface IVBSAXXMLReader;

interface IMXAttributes;
interface IMXReaderControl;
interface IMXWriter;

interface IXMLDOMSchemaCollection2;
interface ISchemaStringCollection;
interface ISchemaItemCollection;
interface ISchemaItem;
interface ISchema;
interface ISchemaParticle;
interface ISchemaAttribute;
interface ISchemaElement;
interface ISchemaType;
interface ISchemaComplexType;
interface ISchemaAttributeGroup;
interface ISchemaModelGroup;
interface ISchemaAny;
interface ISchemaIdentityConstraint;
interface ISchemaNotation;

cpp_quote("#ifdef __ISAXXMLReader_INTERFACE_DEFINED__")
cpp_quote("#undef __MSXML2_LIBRARY_DEFINED__")
cpp_quote("#endif")

cpp_quote("#ifndef __MSXML_DOMNODETYPE_DEFINED")
cpp_quote("#define __MSXML_DOMNODETYPE_DEFINED")
typedef enum tagDOMNodeType
{
    NODE_INVALID  		= 0,
    NODE_ELEMENT  		= 1,
    NODE_ATTRIBUTE		= 2,
    NODE_TEXT			= 3,
    NODE_CDATA_SECTION		= 4,
    NODE_ENTITY_REFERENCE 	= 5,
    NODE_ENTITY 		= 6,
    NODE_PROCESSING_INSTRUCTION = 7,
    NODE_COMMENT		= 8,
    NODE_DOCUMENT		= 9,
    NODE_DOCUMENT_TYPE		= 10,
    NODE_DOCUMENT_FRAGMENT 	= 11,
    NODE_NOTATION 		= 12
} DOMNodeType;
cpp_quote("#endif")

cpp_quote("#ifndef __msxml_som_enums__")
cpp_quote("#define __msxml_som_enums__")
typedef enum _SOMITEMTYPE
{
    SOMITEM_SCHEMA                      = 0x1000,
    SOMITEM_ATTRIBUTE                   = 0x1001,
    SOMITEM_ATTRIBUTEGROUP              = 0x1002,
    SOMITEM_NOTATION                    = 0x1003,
    SOMITEM_IDENTITYCONSTRAINT          = 0x1100,
    SOMITEM_KEY                         = 0x1101,
    SOMITEM_KEYREF                      = 0x1102,
    SOMITEM_UNIQUE                      = 0x1103,
    SOMITEM_ANYTYPE                     = 0x2000,
    SOMITEM_DATATYPE                    = 0x2100,
    SOMITEM_DATATYPE_ANYTYPE            = 0x2101,
    SOMITEM_DATATYPE_ANYURI             = 0x2102,
    SOMITEM_DATATYPE_BASE64BINARY       = 0x2103,
    SOMITEM_DATATYPE_BOOLEAN            = 0x2104,
    SOMITEM_DATATYPE_BYTE               = 0x2105,
    SOMITEM_DATATYPE_DATE               = 0x2106,
    SOMITEM_DATATYPE_DATETIME           = 0x2107,
    SOMITEM_DATATYPE_DAY                = 0x2108,
    SOMITEM_DATATYPE_DECIMAL            = 0x2109,
    SOMITEM_DATATYPE_DOUBLE             = 0x210A,
    SOMITEM_DATATYPE_DURATION           = 0x210B,
    SOMITEM_DATATYPE_ENTITIES           = 0x210C,
    SOMITEM_DATATYPE_ENTITY             = 0x210D,
    SOMITEM_DATATYPE_FLOAT              = 0x210E,
    SOMITEM_DATATYPE_HEXBINARY          = 0x210F,
    SOMITEM_DATATYPE_ID                 = 0x2110,
    SOMITEM_DATATYPE_IDREF              = 0x2111,
    SOMITEM_DATATYPE_IDREFS             = 0x2112,
    SOMITEM_DATATYPE_INT                = 0x2113,
    SOMITEM_DATATYPE_INTEGER            = 0x2114,
    SOMITEM_DATATYPE_LANGUAGE           = 0x2115,
    SOMITEM_DATATYPE_LONG               = 0x2116,
    SOMITEM_DATATYPE_MONTH              = 0x2117,
    SOMITEM_DATATYPE_MONTHDAY           = 0x2118,
    SOMITEM_DATATYPE_NAME               = 0x2119,
    SOMITEM_DATATYPE_NCNAME             = 0x211A,
    SOMITEM_DATATYPE_NEGATIVEINTEGER    = 0x211B,
    SOMITEM_DATATYPE_NMTOKEN            = 0x211C,
    SOMITEM_DATATYPE_NMTOKENS           = 0x211D,
    SOMITEM_DATATYPE_NONNEGATIVEINTEGER = 0x211E,
    SOMITEM_DATATYPE_NONPOSITIVEINTEGER = 0x211F,
    SOMITEM_DATATYPE_NORMALIZEDSTRING   = 0x2120,
    SOMITEM_DATATYPE_NOTATION           = 0x2121,
    SOMITEM_DATATYPE_POSITIVEINTEGER    = 0x2122,
    SOMITEM_DATATYPE_QNAME              = 0x2123,
    SOMITEM_DATATYPE_SHORT              = 0x2124,
    SOMITEM_DATATYPE_STRING             = 0x2125,
    SOMITEM_DATATYPE_TIME               = 0x2126,
    SOMITEM_DATATYPE_TOKEN              = 0x2127,
    SOMITEM_DATATYPE_UNSIGNEDBYTE       = 0x2128,
    SOMITEM_DATATYPE_UNSIGNEDINT        = 0x2129,
    SOMITEM_DATATYPE_UNSIGNEDLONG       = 0x212A,
    SOMITEM_DATATYPE_UNSIGNEDSHORT      = 0x212B,
    SOMITEM_DATATYPE_YEAR               = 0x212C,
    SOMITEM_DATATYPE_YEARMONTH          = 0x212D,
    SOMITEM_DATATYPE_ANYSIMPLETYPE      = 0x21FF,
    SOMITEM_SIMPLETYPE                  = 0x2200,
    SOMITEM_COMPLEXTYPE                 = 0x2400,
    SOMITEM_PARTICLE                    = 0x4000,
    SOMITEM_ANY                         = 0x4001,
    SOMITEM_ANYATTRIBUTE                = 0x4002,
    SOMITEM_ELEMENT                     = 0x4003,
    SOMITEM_GROUP                       = 0x4100,
    SOMITEM_ALL                         = 0x4101,
    SOMITEM_CHOICE                      = 0x4102,
    SOMITEM_SEQUENCE                    = 0x4103,
    SOMITEM_EMPTYPARTICLE               = 0x4104,
    SOMITEM_NULL                        = 0x0800,
    SOMITEM_NULL_TYPE                   = 0x2800,
    SOMITEM_NULL_ANY                    = 0x4801,
    SOMITEM_NULL_ANYATTRIBUTE           = 0x4802,
    SOMITEM_NULL_ELEMENT                = 0x4803,
} SOMITEMTYPE;

typedef enum _SCHEMAUSE
{
    SCHEMAUSE_OPTIONAL,
    SCHEMAUSE_PROHIBITED,
    SCHEMAUSE_REQUIRED,
} SCHEMAUSE;

typedef enum _SCHEMADERIVATIONMETHOD
{
    SCHEMADERIVATIONMETHOD_EMPTY        = 0x0000,
    SCHEMADERIVATIONMETHOD_SUBSTITUTION = 0x0001,
    SCHEMADERIVATIONMETHOD_EXTENSION    = 0x0002,
    SCHEMADERIVATIONMETHOD_RESTRICTION  = 0x0004,
    SCHEMADERIVATIONMETHOD_LIST         = 0x0008,
    SCHEMADERIVATIONMETHOD_UNION        = 0x0010,
    SCHEMADERIVATIONMETHOD_ALL          = 0x00FF,
    SCHEMADERIVATIONMETHOD_NONE         = 0x0100,
} SCHEMADERIVATIONMETHOD;

typedef enum _SCHEMACONTENTTYPE
{
    SCHEMACONTENTTYPE_EMPTY,
    SCHEMACONTENTTYPE_TEXTONLY,
    SCHEMACONTENTTYPE_ELEMENTONLY,
    SCHEMACONTENTTYPE_MIXED,
} SCHEMACONTENTTYPE;

typedef enum _SCHEMAPROCESSCONTENTS
{
    SCHEMAPROCESSCONTENTS_NONE,
    SCHEMAPROCESSCONTENTS_SKIP,
    SCHEMAPROCESSCONTENTS_LAX,
    SCHEMAPROCESSCONTENTS_STRICT,
} SCHEMAPROCESSCONTENTS;

typedef enum _SCHEMAWHITESPACE
{
    SCHEMAWHITESPACE_NONE       = -1,
    SCHEMAWHITESPACE_PRESERVE   =  0,
    SCHEMAWHITESPACE_REPLACE    =  1,
    SCHEMAWHITESPACE_COLLAPSE   =  2,
} SCHEMAWHITESPACE;


typedef enum _SCHEMATYPEVARIETY
{
    SCHEMATYPEVARIETY_NONE      = -1,
    SCHEMATYPEVARIETY_ATOMIC    =  0,
    SCHEMATYPEVARIETY_LIST      =  1,
    SCHEMATYPEVARIETY_UNION     =  2,
} SCHEMATYPEVARIETY;
cpp_quote("#endif /* __msxml_som_enums__ */")

typedef [v1_enum] enum _XHR_CRED_PROMPT
{
    XHR_CRED_PROMPT_ALL,
    XHR_CRED_PROMPT_NONE,
    XHR_CRED_PROMPT_PROXY
} XHR_CRED_PROMPT;

typedef [v1_enum] enum _XHR_AUTH
{
    XHR_AUTH_ALL,
    XHR_AUTH_NONE,
    XHR_AUTH_PROXY
} XHR_AUTH;

typedef [v1_enum] enum _XHR_PROPERTY
{
    XHR_PROP_NO_CRED_PROMPT,
    XHR_PROP_NO_AUTH,
    XHR_PROP_TIMEOUT,
    XHR_PROP_NO_DEFAULT_HEADERS,
    XHR_PROP_REPORT_REDIRECT_STATUS,
    XHR_PROP_NO_CACHE,
    XHR_PROP_EXTENDED_ERROR,
    XHR_PROP_QUERY_STRING_UTF8,
    XHR_PROP_IGNORE_CERT_ERRORS,
    XHR_PROP_ONDATA_THRESHOLD,
    XHR_PROP_SET_ENTERPRISEID,
    XHR_PROP_MAX_CONNECTIONS
} XHR_PROPERTY;

typedef struct tagXHR_COOKIE
{
    [ref, string] WCHAR *pwszUrl;
    [ref, string] WCHAR *pwszName;
    [unique, string] WCHAR *pwszValue;
    [unique, string] WCHAR *pwszP3PPolicy;
    FILETIME ftExpires;
    DWORD dwFlags;
} XHR_COOKIE;

typedef struct tagXHR_CERT
{
    DWORD cbCert;
    [ref, size_is(cbCert)] BYTE *pbCert;
} XHR_CERT;

[
local,
object,
dual,
oleautomation,
uuid (2933BF80-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMNode : IDispatch
{
    [propget, id(DISPID_DOM_NODE_NODENAME)]
    HRESULT nodeName([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_NODE_NODEVALUE)]
    HRESULT nodeValue([retval, out] VARIANT *var1);

    [propput, id(DISPID_DOM_NODE_NODEVALUE)]
    HRESULT nodeValue([in] VARIANT var1);

    [propget, id(DISPID_DOM_NODE_NODETYPE)]
    HRESULT nodeType([retval, out] DOMNodeType *domNodeType);

    [propget, id(DISPID_DOM_NODE_PARENTNODE)]
    HRESULT parentNode([retval, out] IXMLDOMNode **parent);

    [propget, id(DISPID_DOM_NODE_CHILDNODES)]
    HRESULT childNodes([retval, out] IXMLDOMNodeList **outList);

    [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]
    HRESULT firstChild([retval, out] IXMLDOMNode **domNode);

    [propget, id(DISPID_DOM_NODE_LASTCHILD)]
    HRESULT lastChild([retval, out] IXMLDOMNode **domNode);

    [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]
    HRESULT previousSibling([retval, out] IXMLDOMNode **domNode);

    [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]
    HRESULT nextSibling([retval, out] IXMLDOMNode **domNode);

    [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]
    HRESULT attributes([retval, out] IXMLDOMNamedNodeMap **attributeMap);

    [id(DISPID_DOM_NODE_INSERTBEFORE)]
    HRESULT insertBefore(
        [in] IXMLDOMNode *newNode,
        [in] VARIANT var1,
        [retval, out] IXMLDOMNode **outOldNode);

    [id(DISPID_DOM_NODE_REPLACECHILD)]
    HRESULT replaceChild(
        [in] IXMLDOMNode *newNode,
        [in] IXMLDOMNode *oldNode,
        [retval, out] IXMLDOMNode **outOldNode);

    [id(DISPID_DOM_NODE_REMOVECHILD)]
    HRESULT removeChild(
        [in] IXMLDOMNode *domNode,
        [retval, out] IXMLDOMNode **oldNode);

    [id(DISPID_DOM_NODE_APPENDCHILD)]
    HRESULT appendChild(
        [in] IXMLDOMNode *newNode,
        [retval, out] IXMLDOMNode **outNewNode);

    [id(DISPID_DOM_NODE_HASCHILDNODES)]
    HRESULT hasChildNodes(
        [retval, out] VARIANT_BOOL *pbool);

    [propget, id(DISPID_DOM_NODE_OWNERDOC)]
    HRESULT ownerDocument([retval, out] IXMLDOMDocument **domDocument);

    [id(DISPID_DOM_NODE_CLONENODE)]
    HRESULT cloneNode(
        [in] VARIANT_BOOL pbool,
        [retval, out] IXMLDOMNode **outNode);

    [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]
    HRESULT nodeTypeString([retval, out] BSTR *p);

    [propget, id(DISPID_XMLDOM_NODE_TEXT)]
    HRESULT text([retval, out] BSTR *p);

    [propput, id(DISPID_XMLDOM_NODE_TEXT)]
    HRESULT text([in] BSTR p);

    [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]
    HRESULT specified([retval, out] VARIANT_BOOL *pbool);

    [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]
    HRESULT definition([retval,out] IXMLDOMNode **domNode);

    [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
    HRESULT nodeTypedValue([retval, out] VARIANT *var1);

    [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
    HRESULT nodeTypedValue([in] VARIANT var1);

    [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]
    HRESULT dataType([retval, out] VARIANT *var1);

    [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]
    HRESULT dataType([in] BSTR p);

    [propget, id(DISPID_XMLDOM_NODE_XML)]
    HRESULT xml([retval, out] BSTR *p);

    [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]
    HRESULT transformNode(
        [in] IXMLDOMNode *domNode,
        [retval, out] BSTR *p);

    [id(DISPID_XMLDOM_NODE_SELECTNODES)]
    HRESULT selectNodes(
        [in] BSTR p,
        [retval, out] IXMLDOMNodeList **outList);

    [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]
    HRESULT selectSingleNode(
        [in] BSTR p,
        [retval, out] IXMLDOMNode **outNode);

    [propget,id(DISPID_XMLDOM_NODE_PARSED)]
    HRESULT parsed([retval, out] VARIANT_BOOL *pbool);

    [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]
    HRESULT namespaceURI([retval, out] BSTR *p);

    [propget, id(DISPID_XMLDOM_NODE_PREFIX)]
    HRESULT prefix([retval, out] BSTR *p);

    [propget, id(DISPID_XMLDOM_NODE_BASENAME)]
    HRESULT baseName([retval, out] BSTR *p);

    [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]
    HRESULT transformNodeToObject(
        [in] IXMLDOMNode *domNode,
        [in] VARIANT var1);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF81-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMDocument : IXMLDOMNode
{
    [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]
    HRESULT doctype([retval, out] IXMLDOMDocumentType **docType);

    [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]
    HRESULT implementation([retval, out] IXMLDOMImplementation **impl);

    [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
    HRESULT documentElement([retval, out] IXMLDOMElement **domElement);

    [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
    HRESULT documentElement([in] IXMLDOMElement *domElement);

    [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]
    HRESULT createElement(
        [in] BSTR p,
        [retval, out] IXMLDOMElement **domElement);

    [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]
    HRESULT createDocumentFragment(
        [retval, out] IXMLDOMDocumentFragment **docFrag);

    [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]
    HRESULT createTextNode(
        [in] BSTR p,
        [retval, out] IXMLDOMText **text);

    [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]
    HRESULT createComment(
        [in] BSTR p,
        [retval, out] IXMLDOMComment **comment);

    [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]
    HRESULT createCDATASection(
        [in] BSTR p,
        [retval, out] IXMLDOMCDATASection **cdata);

    [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]
    HRESULT createProcessingInstruction(
        [in] BSTR target,
        [in] BSTR data,
        [retval, out] IXMLDOMProcessingInstruction **pi);

    [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]
    HRESULT createAttribute(
        [in] BSTR p,
        [retval, out] IXMLDOMAttribute **attribute);

    [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]
    HRESULT createEntityReference(
        [in] BSTR p,
        [retval, out] IXMLDOMEntityReference **entityRef);

    [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]
    HRESULT getElementsByTagName(
        [in] BSTR p,
        [retval, out] IXMLDOMNodeList **resultList);

    [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]
    HRESULT createNode(
        [in] VARIANT var,
        [in] BSTR name,
        [in] BSTR uri,
        [retval, out] IXMLDOMNode **node);

    [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]
    HRESULT nodeFromID(
        [in] BSTR id,
        [retval, out] IXMLDOMNode **node);

    [id(DISPID_XMLDOM_DOCUMENT_LOAD)]
    HRESULT load(
        [in] VARIANT var1,
        [retval, out] VARIANT_BOOL *pbool);

    [propget, id(DISPID_READYSTATE)]
    HRESULT readyState([retval, out] LONG *value);

    [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]
    HRESULT parseError([retval, out] IXMLDOMParseError **err);

    [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]
    HRESULT url([retval, out] BSTR *p);

    [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
    HRESULT async([retval, out] VARIANT_BOOL *pbool);

    [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
    HRESULT async([in] VARIANT_BOOL pbool);

    [id(DISPID_XMLDOM_DOCUMENT_ABORT)]
    HRESULT abort();

    [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]
    HRESULT loadXML(
        [in] BSTR p,
        [out, retval] VARIANT_BOOL *pbool);

    [id(DISPID_XMLDOM_DOCUMENT_SAVE)]
    HRESULT save(
        [in] VARIANT var1);

    [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
    HRESULT validateOnParse([retval, out] VARIANT_BOOL *pbool);

    [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
    HRESULT validateOnParse([in] VARIANT_BOOL pbool);

    [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
    HRESULT resolveExternals([retval,out] VARIANT_BOOL *pbool);

    [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
    HRESULT resolveExternals([in] VARIANT_BOOL pbool);

    [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
    HRESULT preserveWhiteSpace([retval,out] VARIANT_BOOL *pbool);

    [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
    HRESULT preserveWhiteSpace([in] VARIANT_BOOL pbool);

    [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]
    HRESULT onreadystatechange([in] VARIANT var1);

    [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]
    HRESULT ondataavailable([in] VARIANT var1);

    [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]
    HRESULT ontransformnode([in] VARIANT var1);
}

[
local,
object,
dual,
oleautomation,
uuid (373984c8-b845-449b-91e7-45ac83036ade)
]
interface IXMLDOMSchemaCollection : IDispatch
{
    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADD)]
    HRESULT add(
        [in] BSTR uri,
        [in] VARIANT var);

    [id(DISPID_XMLDOM_SCHEMACOLLECTION_GET)]
    HRESULT get(
        [in] BSTR uri,
        [retval, out] IXMLDOMNode **node);

    [id(DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE)]
    HRESULT remove(
        [in] BSTR uri);

    [propget, id(DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH)]
    HRESULT length(
        [retval, out] LONG *length);

    [propget, id(DISPID_VALUE)]
    HRESULT namespaceURI([in] LONG index, [out, retval] BSTR *len);

    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION)]
    HRESULT addCollection(
        [in] IXMLDOMSchemaCollection *otherCollection);

    [propget, id(DISPID_NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
}

[
    local,
    object,
    dual,
    oleautomation,
    uuid(50ea08b0-dd1b-4664-9a50-c2f40f4bd79a),
]
interface IXMLDOMSchemaCollection2 : IXMLDOMSchemaCollection
{
    [id(DISPID_SOM_VALIDATE)]
    HRESULT validate();

    [propput, id(DISPID_SOM_VALIDATEONLOAD)]
    HRESULT validateOnLoad(
        [in] VARIANT_BOOL validateOnLoad);

    [propget, id(DISPID_SOM_VALIDATEONLOAD)]
    HRESULT validateOnLoad(
        [out,retval] VARIANT_BOOL* validateOnLoad);

    [id(DISPID_SOM_GETSCHEMA)]
    HRESULT getSchema(
        [in] BSTR namespaceURI,
        [out,retval] ISchema** schema);

    [id(DISPID_SOM_GETDECLARATION)]
    HRESULT getDeclaration(
        [in] IXMLDOMNode* node,
        [out,retval]ISchemaItem** item);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF95-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMDocument2 : IXMLDOMDocument
{
    [propget, id(DISPID_XMLDOM_DOCUMENT2_NAMESPACES)]
    HRESULT namespaces([retval, out] IXMLDOMSchemaCollection **schemaCollection);

    [propget, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
    HRESULT schemas([retval, out] VARIANT *var1);

    [propputref, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
    HRESULT schemas([in] VARIANT var1);

    [id(DISPID_XMLDOM_DOCUMENT2_VALIDATE)]
    HRESULT validate(
        [retval, out] IXMLDOMParseError **err);

    [id(DISPID_XMLDOM_DOCUMENT2_SETPROPERTY)]
    HRESULT setProperty(
        [in] BSTR p,
        [in] VARIANT var);

    [id(DISPID_XMLDOM_DOCUMENT2_GETPROPERTY)]
    HRESULT getProperty(
        [in] BSTR p,
        [retval, out] VARIANT *var);
}

[
    local,
    object,
    dual,
    uuid(2933bf96-7b36-11d2-b20e-00c04f983e60),
    oleautomation,
]
interface IXMLDOMDocument3 : IXMLDOMDocument2
{
    [id(DISPID_XMLDOM_DOCUMENT3_VALIDATENODE)]
    HRESULT validateNode(
        [in] IXMLDOMNode *node,
        [out, retval] IXMLDOMParseError **error);

    [id(DISPID_XMLDOM_DOCUMENT3_IMPORTNODE)]
    HRESULT importNode(
        [in] IXMLDOMNode *node,
        [in] VARIANT_BOOL deep,
        [out, retval] IXMLDOMNode **clone);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF82-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMNodeList : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);

    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
    HRESULT length([retval, out] LONG *lLength);

    [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]
    HRESULT nextNode(
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_XMLDOM_NODELIST_RESET)]
    HRESULT reset();

    [propget, id(DISPID_NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
}

[
local,
object,
dual,
oleautomation,
uuid (AA634FC7-5888-44a7-A257-3A47150D3A0E)
]
interface IXMLDOMSelection : IXMLDOMNodeList
{
    [propget, id(DISPID_XMLDOM_SELECTION_EXPR)]
    HRESULT expr([retval, out] BSTR *p);

    [propput, id(DISPID_XMLDOM_SELECTION_EXPR)]
    HRESULT expr([in] BSTR p);

    [propget, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
    HRESULT context([retval, out] IXMLDOMNode **ppNode);

    [propputref, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
    HRESULT context([in] IXMLDOMNode * pNode);

    [id(DISPID_XMLDOM_SELECTION_PEEKNODE)]
    HRESULT peekNode(
        [retval, out] IXMLDOMNode **ppNode);

    [id(DISPID_XMLDOM_SELECTION_MATCHES)]
    HRESULT matches(
        [in] IXMLDOMNode *pNode,
        [retval, out] IXMLDOMNode **ppNode);

    [id(DISPID_XMLDOM_SELECTION_REMOVENEXT)]
    HRESULT removeNext(
        [retval, out] IXMLDOMNode **ppNode);

    [id(DISPID_XMLDOM_SELECTION_REMOVEALL)]
    HRESULT removeAll();

    [id(DISPID_XMLDOM_SELECTION_CLONE)]
    HRESULT clone(
        [retval, out] IXMLDOMSelection **ppNode);

    [id(DISPID_XMLDOM_SELECTION_GETPROPERTY)]
    HRESULT getProperty(
        [in] BSTR p,
        [retval, out] VARIANT * var);

    [id(DISPID_XMLDOM_SELECTION_SETPROPERTY)]
    HRESULT setProperty(
        [in] BSTR p,
        [in] VARIANT var);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF83-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMNamedNodeMap : IDispatch
{
    [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]
    HRESULT getNamedItem(
        [in] BSTR p,
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]
    HRESULT setNamedItem(
        [in] IXMLDOMNode *newNode,
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]
    HRESULT removeNamedItem(
        [in] BSTR p,
        [retval, out] IXMLDOMNode **outNode);

    [propget, id(DISPID_VALUE)]
    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);

    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
    HRESULT length([retval, out] LONG *lLength);

    [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]
    HRESULT getQualifiedItem(
        [in] BSTR name,
        [in] BSTR uri,
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]
    HRESULT removeQualifiedItem(
        [in] BSTR name,
        [in] BSTR uri,
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]
    HRESULT nextNode(
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]
    HRESULT reset();

    [propget, id(DISPID_NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
}

[
local,
object,
dual,
oleautomation,
uuid (3efaa413-272f-11d2-836f-0000f87a7782)
]
interface IXMLDOMDocumentFragment : IXMLDOMNode
{
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF84-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMCharacterData : IXMLDOMNode
{
    [propget, id(DISPID_DOM_DATA_DATA)]
    HRESULT data([retval, out] BSTR *p);

    [propput, id(DISPID_DOM_DATA_DATA)]
    HRESULT data([in] BSTR data);

    [propget, id(DISPID_DOM_DATA_LENGTH)]
    HRESULT length([retval, out] LONG *len);

    [id(DISPID_DOM_DATA_SUBSTRING)]
    HRESULT substringData(
        [in] LONG offset,
        [in] LONG count,
        [retval, out] BSTR *p);

    [id(DISPID_DOM_DATA_APPEND)]
    HRESULT appendData(
        [in] BSTR p);

    [id(DISPID_DOM_DATA_INSERT)]
    HRESULT insertData(
        [in] LONG offset,
        [in] BSTR p);

    [id(DISPID_DOM_DATA_DELETE)]
    HRESULT deleteData(
        [in] LONG offset,
        [in] LONG count);

    [id(DISPID_DOM_DATA_REPLACE)]
    HRESULT replaceData(
        [in] LONG offset,
        [in] LONG count,
        [in] BSTR p);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF85-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMAttribute : IXMLDOMNode
{
    [propget, id(DISPID_DOM_ATTRIBUTE_GETNAME)]
    HRESULT name([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_ATTRIBUTE_VALUE)]
    HRESULT value([retval, out] VARIANT *var1);

    [propput, id(DISPID_DOM_ATTRIBUTE_VALUE)]
    HRESULT value([in] VARIANT var1);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF86-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMElement : IXMLDOMNode
{
    [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]
    HRESULT tagName([retval, out] BSTR *p);

    [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR p,
        [retval, out] VARIANT *var);

    [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] BSTR p,
        [in] VARIANT var);

    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]
    HRESULT removeAttribute(
        [in] BSTR p);

    [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]
    HRESULT getAttributeNode(
        [in] BSTR p,
        [retval, out] IXMLDOMAttribute **attributeNode);

    [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]
    HRESULT setAttributeNode(
        [in] IXMLDOMAttribute *domAttribute,
        [retval, out] IXMLDOMAttribute **attributeNode);

    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]
    HRESULT removeAttributeNode(
        [in] IXMLDOMAttribute *domAttribute,
        [retval, out] IXMLDOMAttribute **attributeNode);

    [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]
    HRESULT getElementsByTagName(
        [in] BSTR p,
        [retval, out] IXMLDOMNodeList **resultList);

    [id(DISPID_DOM_ELEMENT_NORMALIZE)]
    HRESULT normalize();
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF87-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMText : IXMLDOMCharacterData
{
    [id(DISPID_DOM_TEXT_SPLITTEXT)]
    HRESULT splitText(
        [in] LONG offset,
        [retval, out] IXMLDOMText **txtNode);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF88-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMComment : IXMLDOMCharacterData
{
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF89-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMProcessingInstruction : IXMLDOMNode
{
    [propget, id(DISPID_DOM_PI_TARGET)]
    HRESULT target([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_PI_DATA)]
    HRESULT data([retval, out] BSTR *p);

    [propput, id(DISPID_DOM_PI_DATA)]
    HRESULT data([in] BSTR p);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF8A-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMCDATASection : IXMLDOMText
{
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF8B-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMDocumentType : IXMLDOMNode
{
    [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]
    HRESULT name([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]
    HRESULT entities([retval, out] IXMLDOMNamedNodeMap **entityMap);

    [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]
    HRESULT notations([retval, out] IXMLDOMNamedNodeMap **notationMap);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF8C-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMNotation : IXMLDOMNode
{
    [propget, id(DISPID_DOM_NOTATION_PUBLICID)]
    HRESULT publicId([retval, out] VARIANT *id);

    [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]
    HRESULT systemId([retval, out] VARIANT *id);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF8D-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMEntity : IXMLDOMNode
{
    [propget, id(DISPID_DOM_ENTITY_PUBLICID)]
    HRESULT publicId([retval, out] VARIANT *id1);

    [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]
    HRESULT systemId([retval, out] VARIANT *id1);

    [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]
    HRESULT notationName([retval, out] BSTR *p);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF8E-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMEntityReference : IXMLDOMNode
{
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF8F-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMImplementation : IDispatch
{
    [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]
    HRESULT hasFeature(
        [in] BSTR feature,
        [in] BSTR version,
        [retval, out] VARIANT_BOOL *pbool);
}

[
local,
object,
dual,
oleautomation,
uuid (3efaa425-272f-11d2-836f-0000f87a7782)
]
interface IXTLRuntime : IXMLDOMNode
{
    [id(DISPID_XTLRUNTIME_UNIQUEID)]
    HRESULT uniqueID(
        [in]IXMLDOMNode *pNode,
        [retval, out]LONG *pID);

    [id(DISPID_XTLRUNTIME_DEPTH)]
    HRESULT depth(
        [in] IXMLDOMNode *pNode,
        [retval, out]LONG * pDepth);

    [id(DISPID_XTLRUNTIME_CHILDNUMBER)]
    HRESULT childNumber(
        [in]IXMLDOMNode *pNode,
        [retval, out] LONG *pNumber);

    [id(DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER)]
    HRESULT ancestorChildNumber(
        [in]BSTR bstr,
        [in]IXMLDOMNode *pNode,
        [retval, out]LONG *pNumber);

    [id(DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER)]
    HRESULT absoluteChildNumber(
        [in]IXMLDOMNode *pNode,
        [retval, out]LONG *pNumber);

    [id(DISPID_XTLRUNTIME_FORMATINDEX)]
    HRESULT formatIndex(
        [in] LONG lIndex,
        [in] BSTR bstr,
        [retval, out]BSTR *pbstr);

    [id(DISPID_XTLRUNTIME_FORMATNUMBER)]
    HRESULT formatNumber(
        [in] double dblNumber,
        [in] BSTR bstr,
        [retval, out]BSTR *pbstr);

    [id(DISPID_XTLRUNTIME_FORMATDATE)]
    HRESULT formatDate(
        [in] VARIANT var1,
        [in] BSTR bstr,
        [optional, in] VARIANT var2,
        [retval, out]BSTR *pbstr);

    [id(DISPID_XTLRUNTIME_FORMATTIME)]
    HRESULT formatTime(
        [in] VARIANT var1,
        [in] BSTR bstr,
        [optional, in] VARIANT var2,
        [retval, out]BSTR *pbstr);

}

[
    uuid(3efaa427-272f-11d2-836f-0000f87a7782)
]
dispinterface XMLDOMDocumentEvents
{
    properties:
    methods:
    [id (DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]
    HRESULT ondataavailable();

    [id (DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)]
    HRESULT onreadystatechange();
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF92-7B36-11d2-B20E-00C04F983E60)
]
interface IXSLProcessor : IDispatch
{
    [propput, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
    HRESULT input([in] VARIANT var);

    [propget, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
    HRESULT input([retval, out] VARIANT *var);

    [propget, id(DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE)]
    HRESULT ownerTemplate([retval, out] IXSLTemplate **ppTemplate);

    [id(DISPID_XMLDOM_PROCESSOR_SETSTARTMODE)]
    HRESULT setStartMode(
        [in] BSTR p,
        [in, defaultvalue("")] BSTR uri);

    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODE)]
    HRESULT startMode([retval, out] BSTR *p);

    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODEURI)]
    HRESULT startModeURI([retval, out] BSTR *uri);

    [propput, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
    HRESULT output([in] VARIANT var);

    [propget, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
    HRESULT output([retval, out] VARIANT *var);

    [id(DISPID_XMLDOM_PROCESSOR_TRANSFORM)]
    HRESULT transform(
        [retval, out] VARIANT_BOOL *pbool);

    [id(DISPID_XMLDOM_PROCESSOR_RESET)]
    HRESULT reset();

    [propget, id(DISPID_XMLDOM_PROCESSOR_READYSTATE)]
    HRESULT readyState([retval, out] LONG *pstate);

    [id(DISPID_XMLDOM_PROCESSOR_ADDPARAMETER)]
    HRESULT addParameter(
        [in] BSTR p,
        [in] VARIANT var,
        [in, defaultvalue("")] BSTR uri);

    [id(DISPID_XMLDOM_PROCESSOR_ADDOBJECT)]
    HRESULT addObject(
        [in] IDispatch* obj,
        [in] BSTR uri);

    [propget, id(DISPID_XMLDOM_PROCESSOR_STYLESHEET)]
    HRESULT stylesheet([retval, out] IXMLDOMNode **node);
}

[
local,
object,
dual,
oleautomation,
uuid (2933BF93-7B36-11d2-B20E-00C04F983E60)
]
interface IXSLTemplate : IDispatch
{
    [propputref, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
    HRESULT stylesheet([in] IXMLDOMNode *node);

    [propget, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
    HRESULT stylesheet([retval, out] IXMLDOMNode **node);

    [id(DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR)]
    HRESULT createProcessor(
        [retval, out] IXSLProcessor **ppProcessor);
}

[
    object,
    uuid(ED8C108D-4349-11D2-91A4-00C04F7969E8),
    odl,
    dual,
    oleautomation,
    pointer_default(unique)
]
interface IXMLHTTPRequest : IDispatch
{
    [id(1)]
    HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync,
                 [in,optional] VARIANT username, [in,optional] VARIANT password);

    [id(2)]
    HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);

    [id(3)]
    HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR * value);

    [id(4)]
    HRESULT getAllResponseHeaders([out, retval] BSTR * pbstrHeaders);

    [id(5)]
    HRESULT send([in, optional] VARIANT body);

    [id(6)]
    HRESULT abort();

    [propget, id(7)]
    HRESULT status([out, retval] LONG *pStatus);

    [propget, id(8)]
    HRESULT statusText([out, retval] BSTR *pStatus);

    [propget, id(9)]
    HRESULT responseXML([out, retval] IDispatch **pBody);

    [propget, id(10)]
    HRESULT responseText([out, retval] BSTR *pBody);

    [propget, id(11)]
    HRESULT responseBody([out, retval] VARIANT *pBody);

    [propget, id(12)]
    HRESULT responseStream([out, retval] VARIANT *pBody);

    [propget, id(13)]
    HRESULT readyState([out, retval] LONG *pState);

    [propput, id(14)]
    HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);
}

typedef enum _SXH_SERVER_CERT_OPTION
{
    SXH_SERVER_CERT_IGNORE_UNKNOWN_CA        = 0x00000100,
    SXH_SERVER_CERT_IGNORE_WRONG_USAGE       = 0x00000200,
    SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID   = 0x00001000,
    SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID = 0x00002000,
    SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS =
           (SXH_SERVER_CERT_IGNORE_UNKNOWN_CA | SXH_SERVER_CERT_IGNORE_WRONG_USAGE |
            SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID | SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID),
} SXH_SERVER_CERT_OPTION;

[
object,
dual,
oleautomation,
uuid(2e9196bf-13ba-4dd4-91ca-6c571f281495)
]
interface IServerXMLHTTPRequest : IXMLHTTPRequest
{
    typedef enum _SERVERXMLHTTP_OPTION
    {
        SXH_OPTION_URL = -1,
        SXH_OPTION_URL_CODEPAGE,
        SXH_OPTION_ESCAPE_PERCENT_IN_URL,
        SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS,
        SXH_OPTION_SELECT_CLIENT_SSL_CERT
    } SERVERXMLHTTP_OPTION;

    [id(15)]
    HRESULT setTimeouts(
        [in] long resolveTimeout,
        [in] long connectTimeout,
        [in] long sendTimeout,
        [in] long receiveTimeout);

    [id(16)]
    HRESULT waitForResponse(
        [in, optional] VARIANT timeoutInSeconds,
        [out, retval] VARIANT_BOOL * isSuccessful);

    [id(17)]
    HRESULT getOption(
        [in] SERVERXMLHTTP_OPTION option,
        [out, retval] VARIANT * value);

    [id(18)]
    HRESULT setOption(
        [in] SERVERXMLHTTP_OPTION option,
        [in] VARIANT value);
}

[
    object,
    uuid(e5d37dc0-552a-4d52-9cc0-a14d546fbd04),
]
interface IXMLHTTPRequest2 : IUnknown
{
    HRESULT Open([in, string, ref] const WCHAR *method, [in, string, ref] const WCHAR *url,
        [in] IXMLHTTPRequest2Callback *callback,
        [in, string, unique] const WCHAR *username, [in, string, unique] const WCHAR *password,
        [in, string, unique] const WCHAR *proxyuser, [in, string, unique] const WCHAR *proxypassword);

    HRESULT Send([in, unique] ISequentialStream *body, [in] ULONGLONG length);
    HRESULT Abort();
    HRESULT SetCookie([in, ref] const XHR_COOKIE *cookie, [out] DWORD *state);
    HRESULT SetCustomResponseStream([in] ISequentialStream *stream);
    HRESULT SetProperty([in] XHR_PROPERTY property, [in] ULONGLONG value);
    HRESULT SetRequestHeader([in, string, ref] const WCHAR *header, [in, string, unique] const WCHAR *value);
    HRESULT GetAllResponseHeaders([out, string] WCHAR **headers);
    HRESULT GetCookie( [in, ref, string] const WCHAR *url, [in, unique, string] const WCHAR *name,
        [in] DWORD flags, [out] ULONG *cookies_cnt, [out, size_is(,*cookies_cnt)] XHR_COOKIE **cookies);
    HRESULT GetResponseHeader([in, string, ref] const WCHAR *header, [out, string] WCHAR **value);
};

[
    object,
    uuid(a1c9feee-0617-4f23-9d58-8961ea43567c)
]
interface IXMLHTTPRequest3 : IXMLHTTPRequest2
{
    HRESULT SetClientCertificate([in] DWORD count, [in, unique, size_is(count)] const BYTE *hashes,
        [in, string, unique] const WCHAR *pin);
};

[
    object,
    uuid(a44a9299-e321-40de-8866-341b41669162),
    pointer_default(ref)
]
interface IXMLHTTPRequest2Callback : IUnknown
{
    HRESULT OnRedirect([in] IXMLHTTPRequest2 *xhr, [in, string] const WCHAR *url);
    HRESULT OnHeadersAvailable([in] IXMLHTTPRequest2 *xhr, [in] DWORD status, [in, string] const WCHAR *msg);
    HRESULT OnDataAvailable([in] IXMLHTTPRequest2 *xhr, [in] ISequentialStream *stream);
    HRESULT OnResponseReceived([in] IXMLHTTPRequest2 *xhr, [in] ISequentialStream *stream);
    HRESULT OnError([in] IXMLHTTPRequest2 *xhr, [in] HRESULT error);
};

[
    object,
    uuid(b9e57830-8c6c-4a6f-9c13-47772bb047bb)
]
interface IXMLHTTPRequest3Callback : IXMLHTTPRequest2Callback
{
    HRESULT OnServerCertificateReceived([in] IXMLHTTPRequest3 *xhr, [in] DWORD errors,
        [in] DWORD count, [in, unique, size_is(count)] const XHR_CERT *certificates);

    HRESULT OnClientCertificateRequested([in] IXMLHTTPRequest3 *xhr,
        [in] DWORD count, [in, string, unique, size_is(count)] const WCHAR **list);
};

[
object,
dual,
oleautomation,
uuid(2e01311b-c322-4b0a-bd77-b90cfdc8dce7)
]
interface IServerXMLHTTPRequest2 : IServerXMLHTTPRequest
{
    typedef enum _SXH_PROXY_SETTING
    {
        SXH_PROXY_SET_DEFAULT = 0,
        SXH_PROXY_SET_PRECONFIG = 0,
        SXH_PROXY_SET_DIRECT,
        SXH_PROXY_SET_PROXY
    } SXH_PROXY_SETTING;

    [id(19)]
    HRESULT setProxy(
        [in] SXH_PROXY_SETTING proxySetting,
        [in, optional] VARIANT varProxyServer,
        [in, optional] VARIANT varBypassList);

    [id(20)]
    HRESULT setProxyCredentials(
        [in] BSTR bstrUserName,
        [in] BSTR bstrPassword);
}

[
local,
object,
dual,
oleautomation,
uuid (3efaa426-272f-11d2-836f-0000f87a7782)
]
interface IXMLDOMParseError : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT errorCode([retval, out] LONG *errCode);

    [propget, id(DISPID_DOM_ERROR_URL)]
    HRESULT url([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_ERROR_REASON)]
    HRESULT reason([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_ERROR_SRCTEXT)]
    HRESULT srcText([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_ERROR_LINE)]
    HRESULT line([retval, out] LONG *lineNo);

    [propget, id(DISPID_DOM_ERROR_LINEPOS)]
    HRESULT linepos([retval, out] LONG * linePos);

    [propget, id(DISPID_DOM_ERROR_FILEPOS)]
    HRESULT filepos([retval, out] LONG * filePos);
}

[
local,
object,
dual,
oleautomation,
uuid (3efaa428-272f-11d2-836f-0000f87a7782)
]
interface IXMLDOMParseError2 : IXMLDOMParseError
{
    [propget, id(DISPID_DOM_ERROR2_ERRORXPATH)]
    HRESULT errorXPath([retval, out] BSTR *xpathexpr);

    [propget, id(DISPID_DOM_ERROR2_ALLERRORS)]
    HRESULT allErrors([retval, out] IXMLDOMParseErrorCollection **allErrors);

    [id(DISPID_DOM_ERROR2_ERRORPARAMETERS)]
    HRESULT errorParameters(
        [in] long index,
        [retval, out] BSTR *param);

    [propget, id(DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT)]
    HRESULT errorParametersCount([retval, out] long *count);
}

[
local,
object,
dual,
oleautomation,
uuid (3efaa429-272f-11d2-836f-0000f87a7782)
]
interface IXMLDOMParseErrorCollection : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT item(
        [in] long index,
        [retval, out] IXMLDOMParseError2 **error);

    [propget, id(DISPID_DOM_ERRORCOLLECTION_LENGTH)]
    HRESULT length( [retval, out] long *length);

    [propget, id(DISPID_DOM_ERRORCOLLECTION_NEXT)]
    HRESULT next( [retval, out] IXMLDOMParseError2 **error);

    [id(DISPID_DOM_ERRORCOLLECTION_RESET)]
    HRESULT reset();

    [propget, hidden, restricted, id(DISPID_NEWENUM)]
    HRESULT _newEnum( [retval, out] IUnknown **ppunk);
}

/*
 * Sax Interfaces
 */
[
    object,
    local,
    uuid(f078abe1-45d2-4832-91ea-4466ce2f25c9)
]
interface ISAXAttributes : IUnknown
{
    HRESULT getLength(
        [out, retval] int *length);

    HRESULT getURI(
        [in] int nIndex,
        [out] const WCHAR **pUrl,
        [out] int *pUriSize);

    HRESULT getLocalName(
        [in] int nIndex,
        [out] const WCHAR **pLocalName,
        [out] int *pLocalNameLength);

    HRESULT getQName(
        [in] int nIndex,
        [out] const WCHAR **pQName,
        [out] int *pQNameLength);

    HRESULT getName(
        [in] int nIndex,
        [out] const WCHAR **pUri,
        [out] int * pUriLength,
        [out] const WCHAR ** pLocalName,
        [out] int * pLocalNameSize,
        [out] const WCHAR ** pQName,
        [out] int * pQNameLength);

    HRESULT getIndexFromName(
        [in] const WCHAR * pUri,
        [in] int cUriLength,
        [in] const WCHAR * pLocalName,
        [in] int cocalNameLength,
        [out, retval] int * index);

    HRESULT getIndexFromQName(
        [in] const WCHAR * pQName,
        [in] int nQNameLength,
        [out, retval] int * index);

    HRESULT getType(
        [in] int nIndex,
        [out] const WCHAR ** pType,
        [out] int * pTypeLength);

    HRESULT getTypeFromName(
        [in] const WCHAR * pUri,
        [in] int nUri,
        [in] const WCHAR * pLocalName,
        [in] int nLocalName,
        [out] const WCHAR ** pType,
        [out] int * nType);

    HRESULT getTypeFromQName(
        [in] const WCHAR * pQName,
        [in] int nQName,
        [out] const WCHAR ** pType,
        [out] int * nType);

    HRESULT getValue(
        [in] int nIndex,
        [out] const WCHAR ** pValue,
        [out] int * nValue);

    HRESULT getValueFromName(
        [in] const WCHAR * pUri,
        [in] int nUri,
        [in] const WCHAR * pLocalName,
        [in] int nLocalName,
        [out] const WCHAR ** pValue,
        [out] int * nValue);

    HRESULT getValueFromQName(
        [in] const WCHAR * pQName,
        [in] int nQName,
        [out] const WCHAR ** pValue,
        [out] int * nValue);
}

[
    object,
    local,
    uuid(1545cdfa-9e4e-4497-a8a4-2bf7d0112c44)
]
interface ISAXContentHandler : IUnknown
{
    HRESULT putDocumentLocator(
        [in] ISAXLocator * pLocator);

    HRESULT startDocument();

    HRESULT endDocument();

    HRESULT startPrefixMapping(
        [in] const WCHAR * pPrefix,
        [in] int nPrefix,
        [in] const WCHAR * pUri,
        [in] int nUri);

    HRESULT endPrefixMapping(
        [in] const WCHAR * pPrefix,
        [in] int nPrefix);

    HRESULT startElement(
        [in] const WCHAR * pNamespaceUri,
        [in] int nNamespaceUri,
        [in] const WCHAR * pLocalName,
        [in] int nLocalName,
        [in] const WCHAR * pQName,
        [in] int nQName,
        [in] ISAXAttributes * pAttr);

    HRESULT endElement(
        [in] const WCHAR * pNamespaceUri,
        [in] int nNamespaceUri,
        [in] const WCHAR * pLocalName,
        [in] int nLocalName,
        [in] const WCHAR * pQName,
        [in] int nQName);

    HRESULT characters(
        [in] const WCHAR * pChars,
        [in] int nChars);

    HRESULT ignorableWhitespace(
        [in] const WCHAR * pChars,
        [in] int nChars);

    HRESULT processingInstruction(
        [in] const WCHAR * pTarget,
        [in] int nTarget,
        [in] const WCHAR * pData,
        [in] int nData);

    HRESULT skippedEntity(
        [in] const WCHAR * pName,
        [in] int nName);
}

[
    object,
    local,
    uuid(862629ac-771a-47b2-8337-4e6843c1be90)
]
interface ISAXDeclHandler : IUnknown
{
    HRESULT elementDecl(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pModel,
        [in] int nModel);

    HRESULT attributeDecl(
        [in] const WCHAR * pElementName,
        [in] int nElementName,
        [in] const WCHAR * pAttributeName,
        [in] int nAttributeName,
        [in] const WCHAR * pType,
        [in] int nType,
        [in] const WCHAR * pValueDefault,
        [in] int nValueDefault,
        [in] const WCHAR * pValue,
        [in] int nValue);

    HRESULT internalEntityDecl(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pValue,
        [in] int nValue);

    HRESULT externalEntityDecl(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pPublicId,
        [in] int nPublicId,
        [in] const WCHAR * pSystemId,
        [in] int nSystemId);
}

[
    helpstring("Free Threaded XML HTTP Request class 6.0"),
    progid("Msxml2.FreeThreadedXMLHTTP60.6.0"),
    threading(both),
    uuid(88d96a09-f192-11d4-a65f-0040963251e5)
]
coclass FreeThreadedXMLHTTP60
{
    [default] interface IXMLHTTPRequest2;
}

[
    object,
    local,
    uuid(e15c1baf-afb3-4d60-8c36-19a8c45defed)
]
interface ISAXDTDHandler : IUnknown
{
    HRESULT notationDecl(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pPublicId,
        [in] int nPublicId,
        [in] const WCHAR * pSystemId,
        [in] int nSystemId);

    HRESULT unparsedEntityDecl(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pPublicId,
        [in] int nPublicId,
        [in] const WCHAR * pSystemId,
        [in] int nSystemId,
        [in] const WCHAR * pNotationName,
        [in] int nNotationName);
}

[
    object,
    local,
    uuid(99bca7bd-e8c4-4d5f-a0cf-6d907901ff07),
]
interface ISAXEntityResolver : IUnknown
{
    HRESULT resolveEntity(
        [in] const WCHAR * pPublicId,
        [in] const WCHAR * pSystemId,
        [out, retval] VARIANT * ret);
}

[
    object,
    local,
    uuid(a60511c4-ccf5-479e-98a3-dc8dc545b7d0)
]
interface ISAXErrorHandler : IUnknown
{
    HRESULT error(
        [in] ISAXLocator * pLocator,
        [in] const WCHAR * pErrorMessage,
        [in] HRESULT hrErrorCode);

    HRESULT fatalError(
        [in] ISAXLocator * pLocator,
        [in] const WCHAR * pErrorMessage,
        [in] HRESULT hrErrorCode);

    HRESULT ignorableWarning(
        [in] ISAXLocator * pLocator,
        [in] const WCHAR * pErrorMessage,
        [in] HRESULT hrErrorCode);
}

[
    object,
    local,
    uuid(7f85d5f5-47a8-4497-bda5-84ba04819ea6)
]
interface ISAXLexicalHandler : IUnknown
{
    HRESULT startDTD(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pPublicId,
        [in] int nPublicId,
        [in] const WCHAR * pSystemId,
        [in] int nSystemId);

    HRESULT endDTD();

    HRESULT startEntity(
        [in] const WCHAR * pName,
        [in] int nName);

    HRESULT endEntity(
        [in] const WCHAR * pName,
        [in] int nName);

    HRESULT startCDATA();

    HRESULT endCDATA();

    HRESULT comment(
        [in] const WCHAR * pChars,
        [in] int nChars);
}

[
    object,
    local,
    uuid(9b7e472a-0de4-4640-bff3-84d38a051c31)
]
interface ISAXLocator : IUnknown
{
    HRESULT getColumnNumber(
        [out, retval] int * nColumn);

    HRESULT getLineNumber(
        [out, retval] int * nLine);

    HRESULT getPublicId(
        [out, retval] const WCHAR ** publicId);

    HRESULT getSystemId(
        [out, retval] const WCHAR ** systemId);
}

[
local,
object,
uuid (a4f96ed0-f829-476e-81c0-cdc7bd2a0802)
]
interface ISAXXMLReader : IUnknown
{
    HRESULT getFeature(
        [in] const WCHAR * pFeature,
        [out, retval] VARIANT_BOOL * pValue);
    HRESULT putFeature(
        [in] const WCHAR * pFeature,
        [in] VARIANT_BOOL vfValue);

    HRESULT getProperty(
        [in] const WCHAR * pProp,
        [out, retval] VARIANT * pValue);
    HRESULT putProperty(
        [in] const WCHAR * pProp,
        [in] VARIANT value);

    HRESULT getEntityResolver(
        [out, retval] ISAXEntityResolver ** ppEntityResolver);
    HRESULT putEntityResolver(
        [in] ISAXEntityResolver * pEntityResolver);

    HRESULT getContentHandler(
        [out, retval] ISAXContentHandler ** pContentHandler);
    HRESULT putContentHandler(
        [in] ISAXContentHandler * contentHandler);

    HRESULT getDTDHandler(
        [out, retval] ISAXDTDHandler ** pDTDHandler);
    HRESULT putDTDHandler(
        [in] ISAXDTDHandler * pDTDHandler);

    HRESULT getErrorHandler(
        [out, retval] ISAXErrorHandler ** pErrorHandler);
    HRESULT putErrorHandler(
        [in] ISAXErrorHandler * errorHandler);

    HRESULT getBaseURL(
        [out, retval] const WCHAR ** pBaseUrl);
    HRESULT putBaseURL(
        [in] const WCHAR * pBaseUrl);

    HRESULT getSecureBaseURL(
        [out, retval] const WCHAR ** pSecureBaseUrl);
    HRESULT putSecureBaseURL(
        [in] const WCHAR * secureBaseUrl);

    HRESULT parse(
        [in] VARIANT varInput);
    HRESULT parseURL(
        [in] const WCHAR * url);
}

[
    local,
    object,
    uuid(70409222-ca09-4475-acb8-40312fe8d145)
]
interface ISAXXMLFilter : ISAXXMLReader
{
    HRESULT getParent(
        [out, retval] ISAXXMLReader ** pReader);
    HRESULT putParent(
        [in] ISAXXMLReader * reader);
}

[
    object,
    dual,
    oleautomation,
    uuid(10dc0586-132b-4cac-8bb3-db00ac8b7ee0)
]
interface IVBSAXAttributes : IDispatch
{
    [propget, id(DISPID_SAX_ATTRIBUTES_LENGTH)]
    HRESULT length( [out, retval] int * nLength);

    [id(DISPID_SAX_ATTRIBUTES_GETURI)]
    HRESULT getURI( [in] int nIndex, [out, retval] BSTR * uri);

    [id(DISPID_SAX_ATTRIBUTES_GETLOCALNAME)]
    HRESULT getLocalName( [in] int nIndex, [out, retval] BSTR * localName);

    [id(DISPID_SAX_ATTRIBUTES_GETQNAME)]
    HRESULT getQName( [in] int nIndex, [out, retval] BSTR * QName);

    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME)]
    HRESULT getIndexFromName( [in] BSTR uri,
                              [in] BSTR localName, [out, retval] int * nIndex);

    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME)]
    HRESULT getIndexFromQName( [in] BSTR QName, [out, retval] int * nIndex);

    [id(DISPID_SAX_ATTRIBUTES_GETTYPE)]
    HRESULT getType( [in] int nIndex, [out, retval] BSTR * type);

    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME)]
    HRESULT getTypeFromName( [in] BSTR uri, [in] BSTR localName,
                             [out, retval] BSTR * type);

    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME)]
    HRESULT getTypeFromQName( [in] BSTR QName, [out, retval] BSTR * type);

    [id(DISPID_SAX_ATTRIBUTES_GETVALUE)]
    HRESULT getValue( [in] int nIndex, [out, retval] BSTR * value);

    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME)]
    HRESULT getValueFromName( [in] BSTR uri,
                              [in] BSTR localName,
                              [out, retval] BSTR * value);

    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME)]
    HRESULT getValueFromQName( [in] BSTR QName, [out, retval] BSTR * value);
}

[
    object,
    dual,
    oleautomation,
    uuid(2ed7290a-4dd5-4b46-bb26-4e4155e77faa)
]
interface IVBSAXContentHandler : IDispatch
{
    [propputref, id(DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR)]
    HRESULT documentLocator( [in] IVBSAXLocator * oLocator);

    [id(DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT)]
    HRESULT startDocument();

    [id(DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT)]
    HRESULT endDocument();

    [id(DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING)]
    HRESULT startPrefixMapping( [in, out] BSTR * prefix, [in, out] BSTR * uri);

    [id(DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING)]
    HRESULT endPrefixMapping( [in, out] BSTR * prefix);

    [id(DISPID_SAX_CONTENTHANDLER_STARTELEMENT)]
    HRESULT startElement( [in, out] BSTR * namespaceURI,
                          [in, out] BSTR * localName,
                          [in, out] BSTR * QName,
                          [in] IVBSAXAttributes * oAttributes);

    [id(DISPID_SAX_CONTENTHANDLER_ENDELEMENT)]
    HRESULT endElement( [in, out] BSTR * namespaceURI,
                        [in, out] BSTR * localName, [in, out] BSTR * strQName);

    [id(DISPID_SAX_CONTENTHANDLER_CHARACTERS)]
    HRESULT characters( [in, out] BSTR * chars);

    [id(DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE)]
    HRESULT ignorableWhitespace( [in, out] BSTR * chars);

    [id(DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION)]
    HRESULT processingInstruction( [in, out] BSTR * target,
                                   [in, out] BSTR * data);

    [id(DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY)]
    HRESULT skippedEntity( [in, out] BSTR * name);
}

[
    object,
    dual,
    oleautomation,
    uuid(e8917260-7579-4be1-b5dd-7afbfa6f077b)
]
interface IVBSAXDeclHandler : IDispatch
{
    [id(DISPID_SAX_DECLHANDLER_ELEMENTDECL)]
    HRESULT elementDecl(
        [in, out] BSTR * name,
        [in, out] BSTR * model);

    [id(DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL)]
    HRESULT attributeDecl(
        [in, out] BSTR * elementName,
        [in, out] BSTR * attributeName,
        [in, out] BSTR * type,
        [in, out] BSTR * valueDefault,
        [in, out] BSTR * value);

    [id(DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL)]
    HRESULT internalEntityDecl(
        [in, out] BSTR * name,
        [in, out] BSTR * value);

    [id(DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL)]
    HRESULT externalEntityDecl(
        [in, out] BSTR * name,
        [in, out] BSTR * publicId,
        [in, out] BSTR * systemId);
}

[
    object,
    dual,
    oleautomation,
    uuid(24fb3297-302d-4620-ba39-3a732d850558)
]
interface IVBSAXDTDHandler : IDispatch
{
    [id(DISPID_SAX_DTDHANDLER_NOTATIONDECL)]
    HRESULT notationDecl(
        [in, out] BSTR * name,
        [in, out] BSTR * publicId,
        [in, out] BSTR * systemId);

    [id(DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL)]
    HRESULT unparsedEntityDecl(
        [in, out] BSTR * name,
        [in, out] BSTR * publicId,
        [in, out] BSTR * systemId,
        [in, out] BSTR * notationName);
}

[
    object,
    dual,
    oleautomation,
    uuid(0c05d096-f45b-4aca-ad1a-aa0bc25518dc)
]
interface IVBSAXEntityResolver : IDispatch
{
    [id(DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY)]
    HRESULT resolveEntity(
        [in, out] BSTR * publicId,
        [in, out] BSTR * systemId,
        [out, retval] VARIANT * ret);
}

[
    object,
    dual,
    oleautomation,
    uuid(d963d3fe-173c-4862-9095-b92f66995f52)
]
interface IVBSAXErrorHandler : IDispatch
{
    [id(DISPID_SAX_ERRORHANDLER_ERROR)]
    HRESULT error(
            [in] IVBSAXLocator * locator,
	    [in, out] BSTR * errorMessage,
            [in] LONG errorCode);

    [id(DISPID_SAX_ERRORHANDLER_FATALERROR)]
    HRESULT fatalError(
	    [in] IVBSAXLocator * locator,
	    [in, out] BSTR * errorMessage,
            [in] LONG errorCode);

    [id(DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING)]
    HRESULT ignorableWarning(
	    [in] IVBSAXLocator * locator,
	    [in, out] BSTR * errorMessage,
            [in] LONG errorCode);
}

[
    object,
    dual,
    oleautomation,
    uuid(032aac35-8c0e-4d9d-979f-e3b702935576)
]
interface IVBSAXLexicalHandler : IDispatch
{
    [id(DISPID_SAX_LEXICALHANDLER_STARTDTD)]
    HRESULT startDTD(
        [in, out] BSTR * name,
        [in, out] BSTR * publicId,
        [in, out] BSTR * systemId);
    [id(DISPID_SAX_LEXICALHANDLER_ENDDTD)]
    HRESULT endDTD();

    [id(DISPID_SAX_LEXICALHANDLER_STARTENTITY)]
    HRESULT startEntity([in, out] BSTR * name);
    [id(DISPID_SAX_LEXICALHANDLER_ENDENTITY)]
    HRESULT endEntity([in, out] BSTR * name);

    [id(DISPID_SAX_LEXICALHANDLER_STARTCDATA)]
    HRESULT startCDATA();
    [id(DISPID_SAX_LEXICALHANDLER_ENDCDATA)]
    HRESULT endCDATA();

    [id(DISPID_SAX_LEXICALHANDLER_COMMENT)]
    HRESULT comment( [in, out] BSTR * chars);
}

[
    object,
    dual,
    oleautomation,
    uuid(796e7ac5-5aa2-4eff-acad-3faaf01a3288)
]
interface IVBSAXLocator : IDispatch
{
    [propget, id(DISPID_SAX_LOCATOR_COLUMNNUMBER)]
    HRESULT columnNumber( [out, retval] int * column);

    [propget, id(DISPID_SAX_LOCATOR_LINENUMBER)]
    HRESULT lineNumber( [out, retval] int * line);

    [propget, id(DISPID_SAX_LOCATOR_PUBLICID)]
    HRESULT publicId( [out, retval] BSTR * publicId);

    [propget, id(DISPID_SAX_LOCATOR_SYSTEMID)]
    HRESULT systemId( [out, retval] BSTR * systemId);
}

[
    object,
    dual,
    oleautomation,
    uuid(1299eb1b-5b88-433e-82de-82ca75ad4e04)
]
interface IVBSAXXMLFilter : IDispatch
{
    [propget, id(DISPID_SAX_XMLFILTER_PARENT)]
    HRESULT parent( [out, retval] IVBSAXXMLReader ** reader);
    [propputref, id(DISPID_SAX_XMLFILTER_PARENT)]
    HRESULT parent( [in] IVBSAXXMLReader * reader);

}

[
    dual,
    oleautomation,
    object,
    uuid (8c033caa-6cd6-4f73-b728-4531af74945f)
]
interface IVBSAXXMLReader : IDispatch
{
    [id(DISPID_SAX_XMLREADER_GETFEATURE)]
    HRESULT getFeature( [in] BSTR pFeature,
                        [out, retval] VARIANT_BOOL * pValue);
    [id(DISPID_SAX_XMLREADER_PUTFEATURE)]
    HRESULT putFeature( [in] BSTR pFeature,
                        [in] VARIANT_BOOL vfValue);

    [id(DISPID_SAX_XMLREADER_GETPROPERTY)]
    HRESULT getProperty( [in] BSTR pProp,
                         [out, retval] VARIANT * pValue);
    [id(DISPID_SAX_XMLREADER_PUTPROPERTY)]
    HRESULT putProperty( [in] BSTR pProp, [in] VARIANT value);

    [propget, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
    HRESULT entityResolver(
                    [out, retval] IVBSAXEntityResolver ** ppEntityResolver);
    [propputref, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
    HRESULT entityResolver( [in] IVBSAXEntityResolver * pEntityResolver);

    [propget, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
    HRESULT contentHandler(
                        [out, retval] IVBSAXContentHandler ** pContentHandler);
    [propputref, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
    HRESULT contentHandler([in] IVBSAXContentHandler * contentHandler);

    [propget, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
    HRESULT dtdHandler([out, retval] IVBSAXDTDHandler ** pDTDHandler);
    [propputref, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
    HRESULT dtdHandler([in] IVBSAXDTDHandler * pDTDHandler);

    [propget, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
    HRESULT errorHandler([out, retval] IVBSAXErrorHandler ** pErrorHandler);
    [propputref, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
    HRESULT errorHandler([in] IVBSAXErrorHandler * errorHandler);

    [propget, id(DISPID_SAX_XMLREADER_BASEURL)]
    HRESULT baseURL([out, retval] BSTR *pBaseUrl);
    [propput, id(DISPID_SAX_XMLREADER_BASEURL)]
    HRESULT baseURL([in] BSTR pBaseUrl);

    [propget, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
    HRESULT secureBaseURL([out, retval] BSTR *pSecureBaseUrl);
    [propput, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
    HRESULT secureBaseURL([in] BSTR secureBaseUrl);

    [id(DISPID_SAX_XMLREADER_PARSE)]
    HRESULT parse( [in] VARIANT varInput);
    [id(DISPID_SAX_XMLREADER_PARSEURL)]
    HRESULT parseURL([in] BSTR url);
}

[
    object,
    dual,
    oleautomation,
    uuid(f10d27cc-3ec0-415c-8ed8-77ab1c5e7262)
]
interface IMXAttributes : IDispatch
{
    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTE)]
    HRESULT addAttribute(
        [in] BSTR uri,
        [in] BSTR localName,
        [in] BSTR QName,
        [in] BSTR type,
        [in] BSTR value);

    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX)]
    HRESULT addAttributeFromIndex( [in] VARIANT atts,
                                   [in] int index);

    [id(DISPID_MX_ATTRIBUTES_CLEAR)]
    HRESULT clear();

    [id(DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE)]
    HRESULT removeAttribute( [in] int index);

    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] int index,
        [in] BSTR uri,
        [in] BSTR localName,
        [in] BSTR QName,
        [in] BSTR type,
        [in] BSTR value);

    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTES)]
    HRESULT setAttributes( [in] VARIANT atts);

    [id(DISPID_MX_ATTRIBUTES_SETLOCALNAME)]
    HRESULT setLocalName( [in] int index,
        [in] BSTR localName);

    [id(DISPID_MX_ATTRIBUTES_SETQNAME)]
    HRESULT setQName(
        [in] int index,
        [in] BSTR QName);

    [id(DISPID_MX_ATTRIBUTES_SETTYPE)]
    HRESULT setType( [in] int index, [in] BSTR type);

    [id(DISPID_MX_ATTRIBUTES_SETURI)]
    HRESULT setURI( [in] int index,  [in] BSTR uri);

    [id(DISPID_MX_ATTRIBUTES_SETVALUE)]
    HRESULT setValue([in] int index, [in] BSTR value);
}

[
    local,
    object,
    dual,
    oleautomation,
    uuid(fa4bb38c-faf9-4cca-9302-d1dd0fe520db)
]
interface IMXSchemaDeclHandler : IDispatch
{
    [id(DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL)]
    HRESULT schemaElementDecl( [in] ISchemaElement *oSchemaElement );
}

[
    object,
    dual,
    oleautomation,
    uuid(808f4e35-8d5a-4fbe-8466-33a41279ed30)
]
interface IMXReaderControl : IDispatch
{
    [id(DISPID_MX_READER_CONTROL_ABORT)]
    HRESULT abort();

    [id(DISPID_MX_READER_CONTROL_RESUME)]
    HRESULT resume();

    [id(DISPID_MX_READER_CONTROL_SUSPEND)]
    HRESULT suspend();
}

[
    object,
    dual,
    oleautomation,
    uuid(4d7ff4ba-1565-4ea8-94e1-6e724a46f98d)
]
interface IMXWriter :  IDispatch
{
    [propput, id(DISPID_MX_WRITER_OUTPUT)]
    HRESULT output ( [in] VARIANT Destination);
    [propget, id(DISPID_MX_WRITER_OUTPUT)]
    HRESULT output ( [out, retval] VARIANT * Destination);

    [propput, id(DISPID_MX_WRITER_ENCODING)]
    HRESULT encoding ([in] BSTR encoding);
    [propget, id(DISPID_MX_WRITER_ENCODING)]
    HRESULT encoding ([out, retval] BSTR * encoding);

    [propput, id(DISPID_MX_WRITER_BYTEORDERMARK)]
    HRESULT byteOrderMark ([in] VARIANT_BOOL writeByteOrderMark);
    [propget, id(DISPID_MX_WRITER_BYTEORDERMARK)]
    HRESULT byteOrderMark ([out, retval] VARIANT_BOOL * writeByteOrderMark);

    [propput, id(DISPID_MX_WRITER_INDENT)]
    HRESULT indent ([in] VARIANT_BOOL indentMode);
    [propget, id(DISPID_MX_WRITER_INDENT)]
    HRESULT indent ([out, retval] VARIANT_BOOL * indentMode);

    [propput, id(DISPID_MX_WRITER_STANDALONE)]
    HRESULT standalone ([in] VARIANT_BOOL value);
    [propget, id(DISPID_MX_WRITER_STANDALONE)]
    HRESULT standalone ([out, retval] VARIANT_BOOL * value);

    [propput, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
    HRESULT omitXMLDeclaration ([in] VARIANT_BOOL value);
    [propget, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
    HRESULT omitXMLDeclaration ([out, retval] VARIANT_BOOL * value);

    [propput, id(DISPID_MX_WRITER_VERSION)]
    HRESULT version ([in] BSTR version);
    [propget, id(DISPID_MX_WRITER_VERSION)]
    HRESULT version ([out, retval] BSTR * version);

    [propput, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
    HRESULT disableOutputEscaping([in] VARIANT_BOOL value);
    [propget, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
    HRESULT disableOutputEscaping([out, retval] VARIANT_BOOL * value);

    [id(DISPID_MX_WRITER_FLUSH)]
    HRESULT flush();
}

[
    local,
    object,
    dual,
    oleautomation,
    uuid(c90352f4-643c-4fbc-bb23-e996eb2d51fd)
]
interface IMXNamespacePrefixes : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT item(
        [in] long index,
        [out, retval] BSTR *prefix);

    [propget, id(DISPID_MX_NSMGR_LENGTH)]
    HRESULT length( [out,retval] long *length );

    [propget, restricted, hidden, id(DISPID_NEWENUM)]
    HRESULT _newEnum( [out, retval] IUnknown **ppUnk );
}

[
    local,
    object,
    hidden,
    uuid(c90352f6-643c-4fbc-bb23-e996eb2d51fd)
]
interface IMXNamespaceManager : IUnknown
{
    HRESULT putAllowOverride([in] VARIANT_BOOL fOverride);

    HRESULT getAllowOverride([out, retval] VARIANT_BOOL *fOverride);

    HRESULT reset();

    HRESULT pushContext();

    HRESULT pushNodeContext(
        [in] IXMLDOMNode *contextNode,
        [in] VARIANT_BOOL fDeep);

    HRESULT popContext();

    HRESULT declarePrefix(
        [in] const WCHAR *prefix,
        [in] const WCHAR *namespaceURI);

    HRESULT getDeclaredPrefix(
        [in] long nIndex,
        [in, out] WCHAR *pwchPrefix,
        [in, out] int *pcchPrefix);

    HRESULT getPrefix(
        [in] const WCHAR *pwszNamespaceURI,
        [in] long nIndex,
        [in, out] WCHAR *pwchPrefix,
        [in, out] int *pcchPrefix);

    HRESULT getURI(
        [in] const WCHAR *pwchPrefix,
        [in] IXMLDOMNode* pContextNode,
        [in, out] WCHAR *pwchUri,
        [in, out] int *pcchUri);
}

[
    local,
    object,
    dual,
    oleautomation,
    uuid(c90352f5-643c-4fbc-bb23-e996eb2d51fd)
]
interface IVBMXNamespaceManager : IDispatch
{
    [propput, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]
    HRESULT allowOverride([in] VARIANT_BOOL fOverride);

    [propget, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]
    HRESULT allowOverride([out,retval] VARIANT_BOOL* fOverride);

    [id(DISPID_MX_NSMGR_RESET)]
    HRESULT reset();

    [id(DISPID_MX_NSMGR_PUSHCONTEXT)]
    HRESULT pushContext();

    [id(DISPID_MX_NSMGR_PUSHNODECONTEXT)]
    HRESULT pushNodeContext(
        [in] IXMLDOMNode* contextNode,
        [in, defaultvalue(-1)] VARIANT_BOOL fDeep);

    [id(DISPID_MX_NSMGR_POPCONTEXT)]
    HRESULT popContext();

    [id(DISPID_MX_NSMGR_DECLAREPREFIX)]
    HRESULT declarePrefix(
        [in] BSTR prefix,
        [in] BSTR namespaceURI);

    [id(DISPID_MX_NSMGR_GETDECLAREDPREFIXES)]
    HRESULT getDeclaredPrefixes([out, retval] IMXNamespacePrefixes** prefixes);

    [id(DISPID_MX_NSMGR_GETPREFIXES)]
    HRESULT getPrefixes(
        [in] BSTR namespaceURI,
        [out, retval] IMXNamespacePrefixes** prefixes);

    [id(DISPID_MX_NSMGR_GETURI)]
    HRESULT getURI(
        [in] BSTR prefix,
        [out, retval] VARIANT* uri);

    [id(DISPID_MX_NSMGR_GETURIFROMNODE)]
    HRESULT getURIFromNode(
        [in] BSTR strPrefix,
        [in] IXMLDOMNode* contextNode,
        [out, retval] VARIANT* uri);
}

[
    local,
    object,
    dual,
    oleautomation,
    uuid(c90352f7-643c-4fbc-bb23-e996eb2d51fd)
]
interface IMXXMLFilter : IDispatch
{
    [id(DISPID_MXXML_FILTER_GETFEATURE)]
    HRESULT getFeature(
        [in] BSTR strName,
        [out, retval] VARIANT_BOOL * fValue);

    [id(DISPID_MXXML_FILTER_PUTFEATURE)]
    HRESULT putFeature(
        [in] BSTR strName,
        [in] VARIANT_BOOL fValue);

    [id(DISPID_MXXML_FILTER_GETPROPERTY)]
    HRESULT getProperty(
        [in] BSTR strName,
        [out, retval] VARIANT * varValue);

    [id(DISPID_MXXML_FILTER_PUTPROPERTY)]
    HRESULT putProperty(
        [in] BSTR strName,
        [in] VARIANT varValue);

    [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propget]
    HRESULT entityResolver( [out, retval] IUnknown **oResolver );

    [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propputref]
    HRESULT entityResolver( [in] IUnknown *oResolver );

    [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propget]
    HRESULT contentHandler( [out, retval] IUnknown **oHandler );

    [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propputref]
    HRESULT contentHandler( [in] IUnknown *oHandler );

    [id(DISPID_MXXML_FILTER_DTDHANDLER), propget]
    HRESULT dtdHandler( [out, retval] IUnknown **oHandler );

    [id(DISPID_MXXML_FILTER_DTDHANDLER), propputref]
    HRESULT dtdHandler( [in] IUnknown *oHandler );

    [id(DISPID_MXXML_FILTER_ERRORHANDLER), propget]
    HRESULT errorHandler( [out, retval] IUnknown **oHandler );

    [id(DISPID_MXXML_FILTER_ERRORHANDLER), propputref]
    HRESULT errorHandler( [in] IUnknown *oHandler );
}

[
    local,
    object,
    uuid(50ea08b1-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual
]
interface ISchemaStringCollection : IDispatch
{
    [id(DISPID_VALUE), propget]
    HRESULT item(
        [in] long index,
        [out,retval] BSTR* bstr);

    [id(DISPID_SOM_LENGTH), propget]
    HRESULT length(
        [out,retval] long* length);

    [id(DISPID_NEWENUM), hidden, restricted, propget]
    HRESULT _newEnum(
        [out,retval] IUnknown** ppunk);
}

[
    local,
    object,
    uuid(50ea08b2-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual
]
interface ISchemaItemCollection : IDispatch
{
    [id(DISPID_VALUE), propget]
    HRESULT item(
        [in] long index,
        [out,retval]ISchemaItem** item);

    [id(DISPID_SOM_ITEMBYNAME)]
    HRESULT itemByName(
        [in] BSTR name,
        [out,retval] ISchemaItem** item);

    [id(DISPID_SOM_ITEMBYQNAME)]
    HRESULT itemByQName(
        [in] BSTR name,
        [in] BSTR namespaceURI,
        [out,retval] ISchemaItem** item);

    [id(DISPID_SOM_LENGTH), propget]
    HRESULT length(
        [out,retval]long* length);

    [id(DISPID_NEWENUM), hidden, restricted, propget]
    HRESULT _newEnum(
        [out,retval]IUnknown** ppunk);
}

[
    local,
    object,
    uuid(50ea08b3-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual
]
interface ISchemaItem : IDispatch
{
    [id(DISPID_SOM_NAME), propget]
    HRESULT name(
        [out,retval] BSTR* name);

    [id(DISPID_SOM_NAMESPACEURI), propget]
    HRESULT namespaceURI(
        [out,retval] BSTR* namespaceURI);

    [id(DISPID_SOM_SCHEMA), propget]
    HRESULT schema(
        [out,retval] ISchema** schema);

    [id(DISPID_SOM_ID), propget]
    HRESULT id(
        [out,retval] BSTR* id);

    [id(DISPID_SOM_ITEMTYPE), propget]
    HRESULT itemType(
        [out,retval] SOMITEMTYPE* itemType);

    [id(DISPID_SOM_UNHANDLEDATTRS), propget]
    HRESULT unhandledAttributes(
        [out,retval] IVBSAXAttributes** attributes);

    [id(DISPID_SOM_WRITEANNOTATION)]
    HRESULT writeAnnotation(
        [in] IUnknown* annotationSink,
        [out,retval] VARIANT_BOOL* isWritten);
}

[
    local,
    object,
    uuid(50ea08b4-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual
]
interface ISchema : ISchemaItem
{
    [id(DISPID_SOM_TARGETNAMESPACE), propget]
    HRESULT targetNamespace(
        [out,retval] BSTR* targetNamespace);

    [id(DISPID_SOM_VERSION), propget]
    HRESULT version(
        [out,retval] BSTR* version);

    [id(DISPID_SOM_TYPES), propget]
    HRESULT types(
        [out,retval] ISchemaItemCollection** types);

    [id(DISPID_SOM_ELEMENTS), propget]
    HRESULT elements(
        [out,retval] ISchemaItemCollection** elements);

    [id(DISPID_SOM_ATTRIBUTES), propget]
    HRESULT attributes(
        [out,retval] ISchemaItemCollection** attributes);

    [id(DISPID_SOM_ATTRIBUTEGROUPS), propget]
    HRESULT attributeGroups(
        [out,retval] ISchemaItemCollection** attributeGroups);

    [id(DISPID_SOM_MODELGROUPS), propget]
    HRESULT modelGroups(
        [out,retval] ISchemaItemCollection** modelGroups);

    [id(DISPID_SOM_NOTATIONS), propget]
    HRESULT notations(
        [out,retval] ISchemaItemCollection** notations);

    [id(DISPID_SOM_SCHEMALOCATIONS), propget]
    HRESULT schemaLocations(
        [out,retval] ISchemaStringCollection** schemaLocations);
}

[
    local,
    object,
    uuid(50ea08b5-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual
]
interface ISchemaParticle : ISchemaItem
{
    [id(DISPID_SOM_MINOCCURS), propget]
    HRESULT minOccurs(
        [out,retval] VARIANT* minOccurs);

    [id(DISPID_SOM_MAXOCCURS), propget]
    HRESULT maxOccurs(
        [out,retval] VARIANT* maxOccurs);
}

[
    object,
    uuid(50ea08b6-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual,
]
interface ISchemaAttribute : ISchemaItem
{
    [id(DISPID_SOM_TYPE), propget]
    HRESULT type(
        [out,retval] ISchemaType** type);

    [id(DISPID_SOM_SCOPE), propget]
    HRESULT scope(
        [out,retval] ISchemaComplexType** scope);

    [id(DISPID_SOM_DEFAULTVALUE), propget]
    HRESULT defaultValue(
        [out,retval]BSTR* defaultValue);

    [id(DISPID_SOM_FIXEDVALUE), propget]
    HRESULT fixedValue(
        [out,retval] BSTR* fixedValue);

    [id(DISPID_SOM_USE), propget]
    HRESULT use(
        [out,retval] SCHEMAUSE* use);

    [id(DISPID_SOM_ISREFERENCE), propget]
    HRESULT isReference(
        [out,retval] VARIANT_BOOL* reference);
}

[
    local,
    object,
    uuid(50ea08b7-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual
]
interface ISchemaElement : ISchemaParticle
{
    [id(DISPID_SOM_TYPE), propget]
    HRESULT type(
        [out,retval] ISchemaType** type);

    [id(DISPID_SOM_SCOPE), propget]
    HRESULT scope(
        [out,retval] ISchemaComplexType** scope);

    [id(DISPID_SOM_DEFAULTVALUE), propget]
    HRESULT defaultValue(
        [out,retval] BSTR* defaultValue);

    [id(DISPID_SOM_FIXEDVALUE), propget]
    HRESULT fixedValue(
        [out,retval] BSTR* fixedValue);

    [id(DISPID_SOM_ISNILLABLE), propget]
    HRESULT isNillable(
        [out,retval] VARIANT_BOOL* nillable);

    [id(DISPID_SOM_IDCONSTRAINTS), propget]
    HRESULT identityConstraints(
        [out,retval] ISchemaItemCollection** constraints);

    [id(DISPID_SOM_SUBSTITUTIONGROUP), propget]
    HRESULT substitutionGroup(
        [out,retval] ISchemaElement** element);

    [id(DISPID_SOM_EXCLUSIONS), propget]
    HRESULT substitutionGroupExclusions(
        [out,retval] SCHEMADERIVATIONMETHOD* exclusions);

    [id(DISPID_SOM_DISALLOWED), propget]
    HRESULT disallowedSubstitutions(
        [out,retval] SCHEMADERIVATIONMETHOD* disallowed);

    [id(DISPID_SOM_ISABSTRACT), propget]
    HRESULT isAbstract(
        [out,retval] VARIANT_BOOL* abstract);

    [id(DISPID_SOM_ISREFERENCE), propget]
    HRESULT isReference(
        [out,retval] VARIANT_BOOL* reference);
}

[
    local,
    object,
    uuid(50ea08b8-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual
]
interface ISchemaType : ISchemaItem
{
    [id(DISPID_SOM_BASETYPES), propget]
    HRESULT baseTypes(
        [out,retval] ISchemaItemCollection** baseTypes);

    [id(DISPID_SOM_FINAL), propget]
    HRESULT final(
        [out,retval] SCHEMADERIVATIONMETHOD* final);

    [id(DISPID_SOM_VARIETY), propget]
    HRESULT variety(
        [out,retval] SCHEMATYPEVARIETY* variety);

    [id(DISPID_SOM_DERIVEDBY), propget]
    HRESULT derivedBy(
        [out,retval] SCHEMADERIVATIONMETHOD* derivedBy);

    [id(DISPID_SOM_ISVALID)]
    HRESULT isValid(
        [in] BSTR data,
        [out,retval] VARIANT_BOOL* valid);

    [id(DISPID_SOM_MINEXCLUSIVE), propget]
    HRESULT minExclusive(
        [out,retval]BSTR* minExclusive);

    [id(DISPID_SOM_MININCLUSIVE), propget]
    HRESULT minInclusive(
        [out,retval] BSTR* minInclusive);

    [id(DISPID_SOM_MAXEXCLUSIVE), propget]
    HRESULT maxExclusive(
        [out,retval] BSTR* maxExclusive);

    [id(DISPID_SOM_MAXINCLUSIVE), propget]
    HRESULT maxInclusive(
        [out,retval] BSTR* maxInclusive);

    [id(DISPID_SOM_TOTALDIGITS), propget]
    HRESULT totalDigits(
        [out,retval] VARIANT* totalDigits);

    [id(DISPID_SOM_FRACTIONDIGITS), propget]
    HRESULT fractionDigits(
        [out,retval] VARIANT* fractionDigits);

    [id(DISPID_SOM_LENGTH), propget]
    HRESULT length(
        [out,retval] VARIANT* length);

    [id(DISPID_SOM_MINLENGTH), propget]
    HRESULT minLength(
        [out,retval]VARIANT* minLength);

    [id(DISPID_SOM_MAXLENGTH), propget]
    HRESULT maxLength(
        [out,retval]VARIANT* maxLength);

    [id(DISPID_SOM_ENUMERATION), propget]
    HRESULT enumeration(
        [out,retval] ISchemaStringCollection** enumeration);

    [id(DISPID_SOM_WHITESPACE), propget]
    HRESULT whitespace(
        [out,retval]SCHEMAWHITESPACE* whitespace);

    [id(DISPID_SOM_PATTERNS), propget]
    HRESULT patterns(
        [out,retval] ISchemaStringCollection** patterns);
}

[
    local,
    object,
    uuid(50ea08b9-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual,
]
interface ISchemaComplexType : ISchemaType
{
    [id(DISPID_SOM_ISABSTRACT), propget]
    HRESULT isAbstract(
        [out,retval] VARIANT_BOOL* abstract);

    [id(DISPID_SOM_ANYATTRIBUTE), propget]
    HRESULT anyAttribute(
        [out,retval] ISchemaAny** anyAttribute);

    [id(DISPID_SOM_ATTRIBUTES), propget]
    HRESULT attributes(
        [out,retval] ISchemaItemCollection** attributes);

    [id(DISPID_SOM_CONTENTTYPE), propget]
    HRESULT contentType(
        [out,retval] SCHEMACONTENTTYPE* contentType);

    [id(DISPID_SOM_CONTENTMODEL), propget]
    HRESULT contentModel(
        [out,retval] ISchemaModelGroup** contentModel);

    [id(DISPID_SOM_PROHIBITED), propget]
    HRESULT prohibitedSubstitutions(
        [out,retval] SCHEMADERIVATIONMETHOD* prohibited);
}

[
    local,
    object,
    uuid(50ea08ba-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual,
]
interface ISchemaAttributeGroup : ISchemaItem
{
    [id(DISPID_SOM_ANYATTRIBUTE), propget]
    HRESULT anyAttribute(
        [out,retval] ISchemaAny** anyAttribute);

    [id(DISPID_SOM_ATTRIBUTES), propget]
        HRESULT attributes(
            [out,retval] ISchemaItemCollection** attributes);
}

[
    local,
    object,
    uuid(50ea08bb-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual,
]
interface ISchemaModelGroup : ISchemaParticle
{
    [id(DISPID_SOM_PARTICLES), propget]
    HRESULT particles(
        [out,retval] ISchemaItemCollection** particles);
}

[
    local,
    object,
    uuid(50ea08bc-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual
]
interface ISchemaAny : ISchemaParticle
{
    [id(DISPID_SOM_NAMESPACES), propget]
    HRESULT namespaces(
        [out,retval] ISchemaStringCollection** namespaces);

    [id(DISPID_SOM_PROCESSCONTENTS), propget]
    HRESULT processContents(
        [out,retval] SCHEMAPROCESSCONTENTS* processContents);
}

[
    local,
    object,
    uuid(50ea08bd-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual
]
interface ISchemaIdentityConstraint : ISchemaItem
{
    [id(DISPID_SOM_SELECTOR), propget]
    HRESULT selector(
        [out,retval] BSTR* selector);

    [id(DISPID_SOM_FIELDS), propget]
        HRESULT fields(
            [out,retval] ISchemaStringCollection** fields);

    [id(DISPID_SOM_REFERENCEDKEY), propget]
    HRESULT referencedKey(
        [out,retval] ISchemaIdentityConstraint** key);
}

[
    local,
    object,
    uuid(50ea08be-dd1b-4664-9a50-c2f40f4bd79a),
    oleautomation,
    dual
]
interface ISchemaNotation : ISchemaItem
{
    [id(DISPID_SOM_SYSTEMIDENTIFIER), propget]
    HRESULT systemIdentifier(
        [out,retval] BSTR* uri);

    [id(DISPID_SOM_PUBLICIDENTIFIER), propget]
    HRESULT publicIdentifier(
        [out,retval] BSTR* uri);
}

[
    uuid(f5078f18-c551-11d3-89b9-0000f81fe221),
    version(6.0),
    helpstring("Microsoft XML, v6.0")
]
library MSXML2
{

importlib("stdole2.tlb");

interface IXMLDOMNotation;
interface IXMLDOMEntity;
interface IXMLDOMEntityReference;
interface IXMLDOMParseError2;
interface IXMLDOMParseErrorCollection;
interface IXMLDOMSelection;
interface IXTLRuntime;
dispinterface XMLDOMDocumentEvents;
interface ISAXXMLFilter;
interface IVBSAXXMLFilter;
interface IMXReaderControl;
interface IMXSchemaDeclHandler;
interface IMXXMLFilter;
interface ISchemaElement;
interface ISchemaParticle;
interface ISchemaType;
interface ISchemaComplexType;
interface ISchemaAny;
interface ISchemaModelGroup;
interface ISchemaAttribute;
interface ISchemaAttributeGroup;
interface ISchemaIdentityConstraint;
interface ISchemaNotation;

[hidden] typedef struct __msxml6_ReferenceRemainingTypes__
{
    enum tagDOMNodeType __tagDomNodeType__;
    DOMNodeType __domNodeType__;
    enum _SERVERXMLHTTP_OPTION __serverXmlHttpOptionEnum__;
    SERVERXMLHTTP_OPTION __serverXmlHttpOption__;
    enum _SXH_SERVER_CERT_OPTION __serverCertOptionEnum__;
    SXH_SERVER_CERT_OPTION __serverCertOption__;
    enum _SXH_PROXY_SETTING __proxySettingEnum__;
    SXH_PROXY_SETTING __proxySetting__;
    enum _SOMITEMTYPE __somItemTypeEnum__;
    SOMITEMTYPE __somItemType__;
    enum _SCHEMAUSE __schemaUseEnum__;
    SCHEMAUSE __schemaUse__;
    enum _SCHEMADERIVATIONMETHOD __schemaDerivationMethodEnum__;
    SCHEMADERIVATIONMETHOD __schemaDerivationMethod__;
    enum _SCHEMACONTENTTYPE __schemaContentTypeEnum__;
    SCHEMACONTENTTYPE __schemaContentType__;
    enum _SCHEMAPROCESSCONTENTS __schemaProcessContentsEnum__;
    SCHEMAPROCESSCONTENTS __schemaProcessContents__;
    enum _SCHEMAWHITESPACE __schemaWhitespaceEnum__;
    SCHEMAWHITESPACE __schemaWhitespace__;
    enum _SCHEMATYPEVARIETY __schemaTypeVarietyEnum__;
    SCHEMATYPEVARIETY __schemaTypeVariety__;
} __msxml6_ReferenceRemainingTypes__;

[
    helpstring("XML DOM Document 6.0"),
    progid("Msxml2.DOMDocument.6.0"),
    threading(both),
    uuid(88d96a05-f192-11d4-a65f-0040963251e5)
]
coclass DOMDocument60
{
    [default] interface IXMLDOMDocument3;
    [default, source] dispinterface XMLDOMDocumentEvents;
}

[
    helpstring("Free threaded XML DOM Document 6.0"),
    progid("Msxml2.FreeThreadedDOMDocument.6.0"),
    threading(both),
    uuid(88d96a06-f192-11d4-a65f-0040963251e5),
]
coclass FreeThreadedDOMDocument60
{
    [default] interface IXMLDOMDocument3;
    [default, source] dispinterface XMLDOMDocumentEvents;
}

[
    helpstring("SAX XML Reader 6.0"),
    progid("Msxml2.SAXXMLReader.6.0"),
    threading(both),
    uuid(88d96a0c-f192-11d4-a65f-0040963251e5)
]
coclass SAXXMLReader60
{
    [default] interface IVBSAXXMLReader;
    interface ISAXXMLReader;
}

[
    helpstring("XML Schema Cache 6.0"),
    progid("Msxml2.XMLSchemaCache.6.0"),
    threading(both),
    uuid(88d96a07-f192-11d4-a65f-0040963251e5)
]
coclass XMLSchemaCache60
{
    [default] interface IXMLDOMSchemaCollection2;
}

[
    helpstring("MXHTMLWriter 6.0"),
    progid("Msxml2.MXHTMLWriter.6.0"),
    threading(both),
    uuid(88d96a10-f192-11d4-a65f-0040963251e5)
]
coclass MXHTMLWriter60
{
    [default] interface IMXWriter;

    interface ISAXContentHandler;
    interface ISAXDeclHandler;
    interface ISAXDTDHandler;
    interface ISAXErrorHandler;
    interface ISAXLexicalHandler;

    interface IVBSAXContentHandler;
    interface IVBSAXDeclHandler;
    interface IVBSAXDTDHandler;
    interface IVBSAXErrorHandler;
    interface IVBSAXLexicalHandler;
}

[
    helpstring("MXXMLWriter 6.0"),
    progid("Msxml2.MXXMLWriter.6.0"),
    threading(both),
    uuid(88d96a0f-f192-11d4-a65f-0040963251e5)
]
coclass MXXMLWriter60
{
    [default] interface IMXWriter;

    interface ISAXContentHandler;
    interface ISAXDeclHandler;
    interface ISAXDTDHandler;
    interface ISAXErrorHandler;
    interface ISAXLexicalHandler;

    interface IVBSAXContentHandler;
    interface IVBSAXDeclHandler;
    interface IVBSAXDTDHandler;
    interface IVBSAXErrorHandler;
    interface IVBSAXLexicalHandler;
}

[
    helpstring("MXNamespaceManager 6.0"),
    progid("Msxml2.MXNamespaceManager.6.0"),
    threading(both),
    uuid(88d96a11-f192-11d4-a65f-0040963251e5)
]
coclass MXNamespaceManager60
{
    [default] interface IVBMXNamespaceManager;
    interface IMXNamespaceManager;
}

[
    helpstring("SAXAttributes 6.0"),
    progid("Msxml2.SAXAttributes.6.0"),
    threading(both),
    uuid(88d96a0e-f192-11d4-a65f-0040963251e5)
]
coclass SAXAttributes60
{
    [default] interface IMXAttributes;
    interface IVBSAXAttributes;
    interface ISAXAttributes;
}

[
    helpstring("XSL Template 6.0"),
    progid("Msxml2.XSLTemplate.6.0"),
    threading(both),
    uuid(88d96a08-f192-11d4-a65f-0040963251e5)
]
coclass XSLTemplate60
{
    [default] interface IXSLTemplate;
}

[
    helpstring("XML HTTP 6.0"),
    progid("Msxml2.XMLHTTP.6.0"),
    threading(apartment),
    uuid(88d96a0a-f192-11d4-a65f-0040963251e5)
]
coclass XMLHTTP60
{
    [default] interface IXMLHTTPRequest;
}

[
    helpstring("Server XML HTTP 6.0"),
    progid("Msxml2.ServerXMLHTTP.6.0"),
    threading(apartment),
    uuid(88d96a0b-f192-11d4-a65f-0040963251e5)
]
coclass ServerXMLHTTP60
{
    [default] interface IServerXMLHTTPRequest2;
}

} /* Library MSXML */

/*
 * Error Codes
 */
cpp_quote("#define E_XML_NOTWF              0xC00CE223")
cpp_quote("#define E_XML_NODTD              0xC00CE224")
cpp_quote("#define E_XML_INVALID            0xC00CE225")
cpp_quote("#define E_XML_BUFFERTOOSMALL     0xC00CE226")
