//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (c) Microsoft Corporation. All rights reserved.
//
//  File: HNetCfg.idl
//
//----------------------------------------------------------------------------

cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows")
cpp_quote("//  Copyright (c) Microsoft Corporation. All rights reserved.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")

cpp_quote("#if ( _MSC_VER >= 800 )")
cpp_quote("#pragma warning(disable:4201)")
cpp_quote("#endif")

#ifndef DO_NO_IMPORTS
import "unknwn.idl";
import "wtypes.idl";
import "netcon.idl";
import "netcfgx.idl";
#endif

cpp_quote("")
cpp_quote("EXTERN_C const CLSID CLSID_HNetCfgMgr;")
cpp_quote("EXTERN_C const CLSID CLSID_SharingManagerEnumPublicConnection;")
cpp_quote("EXTERN_C const CLSID CLSID_SharingManagerEnumPrivateConnection;")
cpp_quote("EXTERN_C const CLSID CLSID_SharingManagerEnumApplicationDefinition;")
cpp_quote("EXTERN_C const CLSID CLSID_SharingManagerEnumPortMapping;")
cpp_quote("EXTERN_C const CLSID CLSID_SharingApplicationDefinition;")
cpp_quote("EXTERN_C const CLSID CLSID_SharingApplicationConfiguration;")
cpp_quote("EXTERN_C const CLSID CLSID_NetSharingConfiguration;")

// Reserved GUIDS for our use
//
// 85D18B6C-3032-11D4-9348-00C04F8EEB71     IID_IHNetCfgMgr
// 85D18B6D-3032-11D4-9348-00C04F8EEB71     IID_IHNetBridgeSettings
// 85D18B6E-3032-11D4-9348-00C04F8EEB71     IID_IHNetFirewallSettings
// 85D18B6F-3032-11D4-9348-00C04F8EEB71     IID_IHNetIcsSettings
// 85D18B70-3032-11D4-9348-00C04F8EEB71     IID_IHNetProtocolSettings
// 85D18B71-3032-11D4-9348-00C04F8EEB71     IID_IHNetConnection
// 85D18B72-3032-11D4-9348-00C04F8EEB71     IID_IHNetFirewalledConnection
// 85D18B73-3032-11D4-9348-00C04F8EEB71     IID_IHNetIcsPublicConnection
// 85D18B74-3032-11D4-9348-00C04F8EEB71     IID_IHNetIcsPrivateConnection
// 85D18B75-3032-11D4-9348-00C04F8EEB71     IID_IHNetBridge
// 85D18B76-3032-11D4-9348-00C04F8EEB71     IID_IHNetBridgedConnection
// 85D18B77-3032-11D4-9348-00C04F8EEB71     IID_IEnumHNetBridges
// 85D18B78-3032-11D4-9348-00C04F8EEB71     IID_IEnumHNetFirewalledConnections
// 85D18B79-3032-11D4-9348-00C04F8EEB71     IID_IEnumHNetIcsPublicConnections
// 85D18B7A-3032-11D4-9348-00C04F8EEB71     IID_IEnumHNetIcsPrivateConnections
// 85D18B7B-3032-11D4-9348-00C04F8EEB71     IID_IEnumHNetApplicationProtocols
// 85D18B7C-3032-11D4-9348-00C04F8EEB71     IID_IEnumHNetPortMappingProtocols
// 85D18B7D-3032-11D4-9348-00C04F8EEB71     IID_IEnumHNetBridgedConnections
// 85D18B7E-3032-11D4-9348-00C04F8EEB71     IID_IHNetPortMappingProtocol
// 85D18B7F-3032-11D4-9348-00C04F8EEB71     IID_IHNetApplicationProtocol
// 85D18B80-3032-11D4-9348-00C04F8EEB71     IID_IHNetPortMappingBinding
// 85D18B81-3032-11D4-9348-00C04F8EEB71     IID_IEnumHNetPortMappingBindings
// ...
// 85D18B9C-3032-11D4-9348-00C04F8EEB71

interface IHNetCfgMgr;
interface IHNetBridgeSettings;
interface IHNetFirewallSettings;
interface IHNetIcsSettings;
interface IHNetProtocolSettings;
interface IHNetConnection;
interface IHNetFirewalledConnection;
interface IHNetIcsPublicConnection;
interface IHNetIcsPrivateConnection;
interface IHNetBridge;
interface IHNetBridgedConnection;
interface IHNetPortMappingProtocol;
interface IHNetApplicationProtocol;
interface IHNetPortMappingBinding;
interface IEnumHNetBridges;
interface IEnumHNetFirewalledConnections;
interface IEnumHNetIcsPublicConnections;
interface IEnumHNetIcsPrivateConnections;
interface IEnumHNetApplicationProtocols;
interface IEnumHNetPortMappingProtocols;
interface IEnumHNetBridgedConnections;
interface IEnumHNetPortMappingBindings;

//+---------------------------------------------------------------------------
// IHNetCfgMgr -- root interface for the home networking configuration
//                manager.
//
[
    local,
    object,
    uuid(85D18B6C-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetCfgMgr : IUnknown
{
    HRESULT
    GetIHNetConnectionForINetConnection(
        [in] INetConnection *pNetConnection,
        [out] IHNetConnection **ppHNetConnection
        );

    HRESULT
    GetIHNetConnectionForGuid(
        [in] GUID *pGuid,
        [in] BOOLEAN fLanConnection,
        [in] BOOLEAN fCreateEntries,
        [out] IHNetConnection **ppHNetConnection
        );
};

//+---------------------------------------------------------------------------
// IHNetBridgeSettings -- interface to control system-wide bridge settings
//
[
    local,
    object,
    uuid(85D18B6D-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique),
]
interface IHNetBridgeSettings : IUnknown
{
    HRESULT
    EnumBridges(
        [out] IEnumHNetBridges **ppEnum
        );

    HRESULT
    CreateBridge(
        [out] IHNetBridge **ppHNetBridge,
        [in, defaultvalue(NULL)] INetCfg *pnetcfgExisting
        );

    HRESULT
    DestroyAllBridges(
        [out] ULONG *pcBridges,
        [in, defaultvalue(NULL)] INetCfg *pnetcfgExisting
        );
};

//+---------------------------------------------------------------------------
// IHNetFirewallSettings -- interface to control system-wide firewall settings
//
[
    local,
    object,
    uuid(85D18B6E-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetFirewallSettings : IUnknown
{
    typedef struct tagHNET_FW_LOGGING_SETTINGS
    {
        [string] LPWSTR     pszwPath;
        ULONG               ulMaxFileSize;
        BOOLEAN             fLogDroppedPackets;
        BOOLEAN             fLogConnections;
    } HNET_FW_LOGGING_SETTINGS;

    HRESULT
    EnumFirewalledConnections(
        [out] IEnumHNetFirewalledConnections **ppEnum
        );

    HRESULT
    GetFirewallLoggingSettings(
        [out] HNET_FW_LOGGING_SETTINGS **ppSettings
        );

    HRESULT
    SetFirewallLoggingSettings(
        [in] HNET_FW_LOGGING_SETTINGS *pSettings
        );

    HRESULT
    DisableAllFirewalling(
        [out] ULONG *pcFirewalledConnections
        );

};

cpp_quote("VOID")
cpp_quote("HNetFreeFirewallLoggingSettings(")
cpp_quote("    HNET_FW_LOGGING_SETTINGS *pSettings")
cpp_quote("    );")

//+---------------------------------------------------------------------------
// IHNetIcsSettings -- interface to control system-wide ICS settings
//
[
    local,
    object,
    uuid(85D18B6F-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetIcsSettings : IUnknown
{
    HRESULT
    EnumIcsPublicConnections(
        [out] IEnumHNetIcsPublicConnections **ppEnum
        );

    HRESULT
    EnumIcsPrivateConnections(
        [out] IEnumHNetIcsPrivateConnections **ppEnum
        );

    HRESULT
    DisableIcs(
        [out] ULONG *pcIcsPublicConnections,
        [out] ULONG *pcIcsPrivateConnections
        );

    HRESULT
    GetPossiblePrivateConnections(
        [in] IHNetConnection *pConn,
        [out] ULONG *pcPrivateConnections,
        [out, length_is(*pcPrivateConnections)]
            IHNetConnection **pprgPrivateConnections[],
        [out] LONG *pxCurrentPrivate
        );

    HRESULT
    GetAutodialSettings(
        [out] BOOLEAN *pfAutodialEnabled
        );

    HRESULT
    SetAutodialSettings(
        [in] BOOLEAN fEnableAutodial
        );

    HRESULT
    GetDhcpEnabled(
        [out] BOOLEAN *pfDhcpEnabled
        );

    HRESULT
    SetDhcpEnabled(
        [in] BOOLEAN fEnableDhcp
        );

    HRESULT
    GetDhcpScopeSettings(
        [out] DWORD *pdwScopeAddress,
        [out] DWORD *pdwScopeMask
        );

    HRESULT
    SetDhcpScopeSettings(
        [in] DWORD dwScopeAddress,
        [in] DWORD dwScopeMask
        );

    HRESULT
    EnumDhcpReservedAddresses(
        [out] IEnumHNetPortMappingBindings **ppEnum
        );

    HRESULT
    GetDnsEnabled(
        [out] BOOLEAN *pfDnsEnabled
        );

    HRESULT
    SetDnsEnabled(
        [in] BOOLEAN fEnableDns
        );
};

typedef struct tagHNET_RESPONSE_RANGE
{
    UCHAR       ucIPProtocol;
    USHORT      usStartPort;
    USHORT      usEndPort;
} HNET_RESPONSE_RANGE;

typedef struct tagHNET_PORT_MAPPING_BINDING
{
    OLECHAR     *pszwTargetMachineName;
    ULONG       ulTargetMachineAddress;
} HNET_PORT_MAPPING_BINDING;

//+---------------------------------------------------------------------------
// IHNetProtocolSettings -- interface to control system-wide ICS and firewall
//                          protocol settings (i.e., port mappings and
//                          applications).
//
[
    local,
    object,
    uuid(85D18B70-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetProtocolSettings : IUnknown
{
    HRESULT
    EnumApplicationProtocols(
        [in] BOOLEAN fEnabledOnly,
        [out] IEnumHNetApplicationProtocols **ppEnum
        );

    HRESULT
    CreateApplicationProtocol(
        [in] OLECHAR *pszwName,
        [in] UCHAR ucOutgoingIPProtocol,
        [in] USHORT usOutgoingPort,
        [in] USHORT uscResponses,
        [in, size_is(uscResponses)] HNET_RESPONSE_RANGE rgResponses[],
        [out] IHNetApplicationProtocol **ppProtocol
        );

    HRESULT
    EnumPortMappingProtocols(
        [out] IEnumHNetPortMappingProtocols **ppEnum
        );

    HRESULT
    CreatePortMappingProtocol(
        [in] OLECHAR *pszwName,
        [in] UCHAR ucIPProtocol,
        [in] USHORT usPort,
        [out] IHNetPortMappingProtocol **ppProtocol
        );

    HRESULT
    FindPortMappingProtocol(
        [in] GUID *pGuid,
        [out] IHNetPortMappingProtocol **ppProtocol
        );
};

//+---------------------------------------------------------------------------
// IHNetConnection -- interface to control home networking settings for
//                    a connection
//
[
    local,
    object,
    uuid(85D18B71-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetConnection : IUnknown
{
    typedef struct tagHNET_CONN_PROPERTIES
    {
        BOOLEAN    fLanConnection;
        BOOLEAN    fFirewalled;
        BOOLEAN    fIcsPublic;
        BOOLEAN    fIcsPrivate;
        BOOLEAN    fBridge;
        BOOLEAN    fPartOfBridge;
        BOOLEAN    fCanBeBridged;
        BOOLEAN    fCanBeFirewalled;
        BOOLEAN    fCanBeIcsPublic;
        BOOLEAN    fCanBeIcsPrivate;
    } HNET_CONN_PROPERTIES;

    typedef struct tagHNET_FW_ICMP_SETTINGS
    {
        BOOLEAN    fAllowOutboundDestinationUnreachable;
        BOOLEAN    fAllowOutboundSourceQuench;
        BOOLEAN    fAllowRedirect;
        BOOLEAN    fAllowInboundEchoRequest;
        BOOLEAN    fAllowInboundRouterRequest;
        BOOLEAN    fAllowOutboundTimeExceeded;
        BOOLEAN    fAllowOutboundParameterProblem;
        BOOLEAN    fAllowInboundTimestampRequest;
        BOOLEAN    fAllowInboundMaskRequest;
    } HNET_FW_ICMP_SETTINGS;

    HRESULT
    GetINetConnection(
        [out] INetConnection **ppNetConnection
        );

    HRESULT
    GetGuid(
        [out] GUID **ppGuid
        );

    HRESULT
    GetName(
        [out, string] OLECHAR **ppszwName
        );

    HRESULT
    GetRasPhonebookPath(
        [out, string] OLECHAR **ppszwPath
        );

    HRESULT
    GetProperties(
        [out] HNET_CONN_PROPERTIES **ppProperties
        );

    HRESULT
    GetControlInterface(
        REFIID iid,
        [iid_is(iid)] void **ppv
        );

    HRESULT
    Firewall(
        [out] IHNetFirewalledConnection **ppFirewalledConn
        );

    HRESULT
    SharePublic(
        [out] IHNetIcsPublicConnection **ppIcsPublicConn
        );

    HRESULT
    SharePrivate(
        [out] IHNetIcsPrivateConnection **ppIcsPrivateConn
        );

    //
    // The 4 methods below conceptually would only be called on a connection
    // that is firewalled (all 4) or shared (first two only). However, it's
    // possible to modify these settings in the UI before the connection is
    // actually firewalled or shared, so we must make the methods available
    // on all connections.
    //

    HRESULT
    EnumPortMappings(
        [in] BOOLEAN fEnabledOnly,
        [out] IEnumHNetPortMappingBindings **ppEnum
        );

    HRESULT
    GetBindingForPortMappingProtocol(
        [in] IHNetPortMappingProtocol *pProtocol,
        [out] IHNetPortMappingBinding **ppBinding
        );

    HRESULT
    GetIcmpSettings(
        [out] HNET_FW_ICMP_SETTINGS **ppSettings
        );

    HRESULT
    SetIcmpSettings(
        [in] HNET_FW_ICMP_SETTINGS *pSettings
        );

    HRESULT
    ShowAutoconfigBalloon(
        [out] BOOLEAN *pfShowBalloon
        );

    HRESULT
    DeleteRasConnectionEntry();
};

//+---------------------------------------------------------------------------
// IHNetFirewalledConnection -- interface to control settings specific to a
//                              firewalled connection
//
[
    local,
    object,
    uuid(85D18B72-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetFirewalledConnection : IUnknown
{
    HRESULT
    Unfirewall();
};

//+---------------------------------------------------------------------------
// IHNetIcsPublicConnection -- interface to control settings specific to a
//                             public ICS connection
//
[
    local,
    object,
    uuid(85D18B73-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetIcsPublicConnection : IUnknown
{
    HRESULT
    Unshare();
};

//+---------------------------------------------------------------------------
// IHNetIcsPrivateConnection -- interface to control settings specific to a
//                              private ICS connection
//
[
    local,
    object,
    uuid(85D18B74-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetIcsPrivateConnection : IUnknown
{
    HRESULT
    RemoveFromIcs();
};

//+---------------------------------------------------------------------------
// IHNetBridge -- interface to control settings specific to a connection that
//                is a bridge
//
[
    local,
    object,
    uuid(85D18B75-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetBridge : IUnknown
{
    HRESULT
    EnumMembers(
        [out] IEnumHNetBridgedConnections **ppEnum
        );

    HRESULT
    AddMember(
        [in] IHNetConnection *pConn,
        [out] IHNetBridgedConnection **ppBridgedConn,
        [in, defaultvalue(NULL)] INetCfg *pnetcfgExisting
        );

    HRESULT
    Destroy(
       [in, defaultvalue(NULL)] INetCfg *pnetcfgExisting
       );
};

//+---------------------------------------------------------------------------
// IHNetBridgedConnection -- interface to control settings specific to a
//                           connection that is part of a bridge
//
[
    local,
    object,
    uuid(85D18B76-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetBridgedConnection : IUnknown
{
    HRESULT
    GetBridge(
        [out] IHNetBridge **ppBridge
        );

    HRESULT
    RemoveFromBridge(
       [in, defaultvalue(NULL)] INetCfg *pnetcfgExisting
       );
};

//+---------------------------------------------------------------------------
// IHNetPortMappingProtocol -- interface that represents a port mapping
//                             protocol definition
//
[
    local,
    object,
    uuid(85D18B7E-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetPortMappingProtocol : IUnknown
{
    HRESULT
    GetName(
        [out, string] OLECHAR **ppszwName
        );

    HRESULT
    SetName(
        [in, string] OLECHAR *pszwName
        );

    HRESULT
    GetIPProtocol(
        [out] UCHAR *pucProtocol
        );

    HRESULT
    SetIPProtocol(
        [in] UCHAR ucProtocol
        );

    HRESULT
    GetPort(
        [out] USHORT *pusPort
        );

    HRESULT
    SetPort(
        [in] USHORT usPort
        );

    HRESULT
    GetBuiltIn(
        [out] BOOLEAN *pfBuiltIn
        );

    HRESULT
    Delete();

    HRESULT
    GetGuid(
        [out] GUID **ppGuid
        );
};

//+---------------------------------------------------------------------------
// IHNetPortMappingBinding -- interface that represents the port mapping
//                            settings in use by a connection
//
[
    local,
    object,
    uuid(85D18B80-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetPortMappingBinding : IUnknown
{
    HRESULT
    GetConnection(
        [out] IHNetConnection **ppConnection
        );

    HRESULT
    GetProtocol(
        [out] IHNetPortMappingProtocol **ppProtocol
        );

    HRESULT
    GetEnabled(
        [out] BOOLEAN *pfEnabled
        );

    HRESULT
    SetEnabled(
        [in] BOOLEAN fEnable
        );

    HRESULT
    GetCurrentMethod(
        [out] BOOLEAN *pfUseName
        );

    HRESULT
    GetTargetComputerName(
        [out, string] OLECHAR **ppszwName
        );

    HRESULT
    SetTargetComputerName(
        [in, string] OLECHAR *pszwName
        );

    HRESULT
    GetTargetComputerAddress(
        [out] ULONG *pulAddress
        );

    HRESULT
    SetTargetComputerAddress(
        [in] ULONG ulAddress
        );

    HRESULT
    GetTargetPort(
        [out] USHORT *pusPort
        );

    HRESULT
    SetTargetPort(
        [in] USHORT usPort
        );
};

//+---------------------------------------------------------------------------
// IHNetApplicationProtocol -- interface that represents an application
//                             protocol definition
//
[
    local,
    object,
    uuid(85D18B7F-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IHNetApplicationProtocol : IUnknown
{
    HRESULT
    GetName(
        [out, string] OLECHAR **ppszwName
        );

    HRESULT
    SetName(
        [in, string] OLECHAR *pszwName
        );

    HRESULT
    GetOutgoingIPProtocol(
        [out] UCHAR *pucProtocol
        );

    HRESULT
    SetOutgoingIPProtocol(
        [in] UCHAR ucProtocol
        );

    HRESULT
    GetOutgoingPort(
        [out] USHORT *pusPort
        );

    HRESULT
    SetOutgoingPort(
        [in] USHORT usPort
        );

    HRESULT
    GetResponseRanges(
        [out] USHORT *puscResponses,
        [out, length_is(*puscResponses)] HNET_RESPONSE_RANGE *prgResponseRange[]
        );

    HRESULT
    SetResponseRanges(
        [in] USHORT uscResponses,
        [in, size_is(uscResponses)] HNET_RESPONSE_RANGE rgResponseRange[]
        );

    HRESULT
    GetBuiltIn(
        [out] BOOLEAN *pfBuiltIn
        );

    HRESULT
    GetEnabled(
        [out] BOOLEAN *pfEnabled
        );

    HRESULT
    SetEnabled(
        [in] BOOLEAN fEnable
        );

    HRESULT
    Delete();
};

//+---------------------------------------------------------------------------
// IEnumHNetBridges -- interface to enumerate connections that are bridges
//
[
    local,
    object,
    uuid(85D18B77-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IEnumHNetBridges : IUnknown
{
    HRESULT
    Next(
        [in] ULONG cElt,
        [out, size_is(cElt), length_is(*pcEltFetched)]
            IHNetBridge **rgElt,
        [out] ULONG *pcEltFetched
        );

    HRESULT
    Skip(
        [in] ULONG cElt
        );

    HRESULT
    Reset();

    HRESULT
    Clone(
        [out] IEnumHNetBridges **ppEnum
        );
};

//+---------------------------------------------------------------------------
// IEnumHNetFirewalledConnections -- interface to enumerate connections that
//                                   are firewalled
//
[
    local,
    object,
    uuid(85D18B78-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IEnumHNetFirewalledConnections : IUnknown
{
    HRESULT
    Next(
        [in] ULONG cElt,
        [out, size_is(cElt), length_is(*pcEltFetched)]
            IHNetFirewalledConnection **rgElt,
        [out] ULONG *pcEltFetched
        );

    HRESULT
    Skip(
        [in] ULONG cElt
        );

    HRESULT
    Reset();

    HRESULT
    Clone(
        [out] IEnumHNetFirewalledConnections **ppEnum
        );
};


//+---------------------------------------------------------------------------
// IEnumHNetIcsPublicConnections -- interface to enumerate connections that
//                                  ICS private
//
[
    local,
    object,
    uuid(85D18B79-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IEnumHNetIcsPublicConnections : IUnknown
{
    HRESULT
    Next(
        [in] ULONG cElt,
        [out, size_is(cElt), length_is(*pcEltFetched)]
            IHNetIcsPublicConnection **rgElt,
        [out] ULONG *pcEltFetched
        );

    HRESULT
    Skip(
        [in] ULONG cElt
        );

    HRESULT
    Reset();

    HRESULT
    Clone(
        [out] IEnumHNetIcsPublicConnections **ppEnum
        );
};

//+---------------------------------------------------------------------------
// IEnumHNetIcsPrivateConnections -- interface to enumerate connections that
//                                   are ICS private
//
[
    local,
    object,
    uuid(85D18B7A-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IEnumHNetIcsPrivateConnections : IUnknown
{
    HRESULT
    Next(
        [in] ULONG cElt,
        [out, size_is(cElt), length_is(*pcEltFetched)]
            IHNetIcsPrivateConnection **rgElt,
        [out] ULONG *pcEltFetched
        );

    HRESULT
    Skip(
        [in] ULONG cElt
        );

    HRESULT
    Reset();

    HRESULT
    Clone(
        [out] IEnumHNetIcsPrivateConnections **ppEnum
        );
};

//+---------------------------------------------------------------------------
// IEnumHNetApplicationProtocols -- interface to enumerate ICS and firewall
//                                  application (response) protocols
//
[
    local,
    object,
    uuid(85D18B7B-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IEnumHNetApplicationProtocols : IUnknown
{
    HRESULT
    Next(
        [in] ULONG cElt,
        [out, size_is(cElt), length_is(*pcEltFetched)]
            IHNetApplicationProtocol **rgElt,
        [out] ULONG *pcEltFetched
        );

    HRESULT
    Skip(
        [in] ULONG cElt
        );

    HRESULT
    Reset();

    HRESULT
    Clone(
        [out] IEnumHNetApplicationProtocols **ppEnum
        );
};

//+---------------------------------------------------------------------------
// IEnumHNetPortMappingProtocols -- interface to enumerate ICS and firewall
//                                  port mapping protocol definitions
//
[
    local,
    object,
    uuid(85D18B7C-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IEnumHNetPortMappingProtocols : IUnknown
{
    HRESULT
    Next(
        [in] ULONG cElt,
        [out, size_is(cElt), length_is(*pcEltFetched)]
            IHNetPortMappingProtocol **rgElt,
        [out] ULONG *pcEltFetched
        );

    HRESULT
    Skip(
        [in] ULONG cElt
        );

    HRESULT
    Reset();

    HRESULT
    Clone(
        [out] IEnumHNetPortMappingProtocols **ppEnum
        );
};

//+---------------------------------------------------------------------------
// IEnumHNetPortMappingBindings -- interface to enumerate the port mappings
//                                 that are actually in use by a connection
//
[
    local,
    object,
    uuid(85D18B81-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IEnumHNetPortMappingBindings : IUnknown
{
    HRESULT
    Next(
        [in] ULONG cElt,
        [out, size_is(cElt), length_is(*pcEltFetched)]
            IHNetPortMappingBinding **rgElt,
        [out] ULONG *pcEltFetched
        );

    HRESULT
    Skip(
        [in] ULONG cElt
        );

    HRESULT
    Reset();

    HRESULT
    Clone(
        [out] IEnumHNetPortMappingBindings **ppEnum
        );
};

//+---------------------------------------------------------------------------
// IEnumHNetBridgedConnections -- interface to enumerate connections that
//                                are members in a bridge
//
[
    local,
    object,
    uuid(85D18B7D-3032-11D4-9348-00C04F8EEB71),
    pointer_default(unique)
]
interface IEnumHNetBridgedConnections : IUnknown
{
    HRESULT
    Next(
        [in] ULONG cElt,
        [out, size_is(cElt), length_is(*pcEltFetched)]
            IHNetBridgedConnection **rgElt,
        [out] ULONG *pcEltFetched
        );

    HRESULT
    Skip(
        [in] ULONG cElt
        );

    HRESULT
    Reset();

    HRESULT
    Clone(
        [out] IEnumHNetBridgedConnections **ppEnum
        );
};


cpp_quote("#ifndef NOTIFYFORMATBUFFERSIZE")
cpp_quote("#define NOTIFYFORMATBUFFERSIZE 1024")
cpp_quote("#endif")

cpp_quote("#ifndef HNWCALLBACKBUFFERSIZE")
cpp_quote("#define HNWCALLBACKBUFFERSIZE 1024")
cpp_quote("#endif")

cpp_quote("typedef VOID (STDMETHODCALLTYPE HNWCALLBACK)(LPCWSTR pszLogEntry, LPARAM lParam);")
cpp_quote("typedef HNWCALLBACK *LPHNWCALLBACK;")

cpp_quote("HRESULT APIENTRY")
cpp_quote("HNetGetShareAndBridgeSettings(")
cpp_quote("    OUT INetConnection  **ppNetPublicConnection,")
cpp_quote("    OUT INetConnection ***ppNetPrivateConnection,")
cpp_quote("    OUT BOOLEAN          *pbSharePublicConnection,")
cpp_quote("    OUT BOOLEAN          *pbFirewallPublicConnection")
cpp_quote("    );")

cpp_quote("HRESULT APIENTRY")
cpp_quote("HNetSetShareAndBridgeSettings(")
cpp_quote("    IN  INetConnection  *pNetPublicConnection,")
cpp_quote("    IN  INetConnection  *pNetPrivateConnection[],")
cpp_quote("    IN  BOOLEAN          bSharePublicConnection,")
cpp_quote("    IN  BOOLEAN          bFirewallPublicConnection,")
cpp_quote("    IN  LPHNWCALLBACK    lpHnwCallback,")
cpp_quote("    IN  LPARAM           lpContext,")
cpp_quote("    OUT INetConnection **pNetPrivateInterface")
cpp_quote("    );")

cpp_quote("typedef HRESULT (APIENTRY *LPFNHNETSETSHAREANDBRIDGESETTINGS)(")
cpp_quote("    INetConnection  *pNetPublicConnection,")
cpp_quote("    INetConnection  *pNetPrivateConnection[],")
cpp_quote("    BOOLEAN          bSharePublicConnection,")
cpp_quote("    BOOLEAN          bFirewallPublicConnection,")
cpp_quote("    LPHNWCALLBACK    lpHnwCallback,")
cpp_quote("    LPARAM           lpContext,")
cpp_quote("    INetConnection **pNetPrivateInterface );")


cpp_quote("HRESULT APIENTRY")
cpp_quote("ObtainIcsErrorConditions(")
cpp_quote("    IN  LPHNWCALLBACK lpHnwCallback,")
cpp_quote("    IN  LPARAM        lpContext );")

cpp_quote("BOOL APIENTRY")
cpp_quote("HNetSharedAccessSettingsDlg(")
cpp_quote("    IN  BOOL fSharedAccessMode,")
cpp_quote("    IN  HWND hwndOwner );")


cpp_quote("BOOL APIENTRY")
cpp_quote("HNetSharingAndFirewallSettingsDlg(")
cpp_quote("    IN HWND             hwndOwner,")
cpp_quote("    IN IHNetCfgMgr      *pHNetCfgMgr,")
cpp_quote("    IN BOOL             fShowFwOnlySettings,")
cpp_quote("    IN OPTIONAL IHNetConnection  *pHNetConn);")
