//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (c) Microsoft Corporation. All rights reserved.
//
//  File: netcfgp.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 "netcfgx.idl";
#endif

cpp_quote("STDAPI")
cpp_quote("SvchostChangeSvchostGroup (")
cpp_quote("    LPCWSTR pszService,")
cpp_quote("    LPCWSTR pszNewGroup")
cpp_quote("    );")

// Reserved GUIDS for our use
//
// 98133270-4B20-11D1-AB01-00805FC1270E     IID_IIpxAdapterInfo
// 98133271-4B20-11D1-AB01-00805FC1270E     IID_ITcpipProperties
// 98133272-4B20-11D1-AB01-00805FC1270E     (available)
// 98133273-4B20-11D1-AB01-00805FC1270E     IID_INetCfgComponentPrivate
// 98133274-4B20-11D1-AB01-00805FC1270E     IID_INetInstallQueue
// 98133275-4B20-11D1-AB01-00805FC1270E     IID_IRasBindingConfig
// 98133276-4B20-11D1-AB01-00805FC1270E     IID_INetCfgInternalSetup
// 98133277-4B20-11D1-AB01-00805FC1270E
// ...
// 981332C4-4B20-11D1-AB01-00805FC1270E
// 981332C5-4B20-11D1-AB01-00805FC1270E

interface IIpxAdapterInfo;
interface INetCfgComponentPrivate;
interface INetCfgInternalSetup;
interface INetInstallQueue;
interface IRasBindingConfig;
interface ITcpipProperties;

//+---------------------------------------------------------------------------
// IIpxAdapterInfo -
//
// This interface is implemented by the IPX notify object.  It is
// queryable by clients of INetCfg (via INetCfgComponent->QueryNotifyObject).
//
[
    local,
    object,
    uuid(98133270-4B20-11D1-AB01-00805FC1270E),
    pointer_default(unique)
]
interface IIpxAdapterInfo : IUnknown
{
    HRESULT GetFrameTypesForAdapter (
        [in, string]    LPCWSTR pszwAdapterBindName,
        [in]            DWORD   cFrameTypesMax,
        [out, size_is (cFrameTypesMax),
              length_is (*pcFrameTypes)]
                        DWORD*  anFrameTypes,
        [out, ref]      DWORD*  pcFrameTypes);

    HRESULT GetVirtualNetworkNumber (
        [out] DWORD* pdwVNetworkNumber);

    HRESULT SetVirtualNetworkNumber(
        [in] DWORD dwVNetworkNumber);
};

//+---------------------------------------------------------------------------
// ITcpipProperties -
//
// This interface is implemented by the TCP/IP notify object.  It is
// queryable by clients of INetCfg (via INetCfgComponent->QueryNotifyObject).
//
[
    local,
    object,
    uuid(98133271-4B20-11D1-AB01-00805FC1270E),
    pointer_default(unique)
]
interface ITcpipProperties : IUnknown
{
    // The following two methods are for remote tcpip configuration.
    typedef struct tagREMOTE_IPINFO
    {
        DWORD   dwEnableDhcp;
        WCHAR * pszwIpAddrList;
        WCHAR * pszwSubnetMaskList;
        WCHAR * pszwOptionList;

    } REMOTE_IPINFO;

    HRESULT GetIpInfoForAdapter(
        [in]  const GUID*       pguidAdapter,
        [out] REMOTE_IPINFO**   ppInfo);

    HRESULT SetIpInfoForAdapter(
        [in] const GUID*    pguidAdapter,
        [in] REMOTE_IPINFO* pInfo);
};

//+---------------------------------------------------------------------------
// INetCfgInternalSetup -
//
// This interface used by the internal clients to notify INetCfg of
// new or updated components.
//
[
    local,
    object,
    uuid(98133276-4B20-11D1-AB01-00805FC1270E),
    pointer_default(unique)
]
interface INetCfgInternalSetup : IUnknown
{
    HRESULT BeginBatchOperation ();

    HRESULT CommitBatchOperation ();

    typedef enum tagCI_FILTER_COMPONENT
    {
        FC_LAN,
        FC_RASSRV,
        FC_RASCLI,
        FC_ATM,
    } CI_FILTER_COMPONENT;

    typedef struct tagCI_FILTER_INFO
    {
        CI_FILTER_COMPONENT eFilter;
        INetCfgComponent*   pIComp;
        void*               pvReserved;
    } CI_FILTER_INFO;

    HRESULT SelectWithFilterAndInstall (
        [in]  HWND                  hwndParent,
        [in]  const GUID*           pClassGuid,
        [in]  OBO_TOKEN*            pOboToken,
        [in]  const CI_FILTER_INFO* pcfi,
        [out] INetCfgComponent**    ppIComp);

    HRESULT EnumeratedComponentInstalled (
        [in] PVOID pComponent /* type of CComponent */);

    HRESULT EnumeratedComponentUpdated (
        [in] LPCWSTR pszPnpId);

    HRESULT UpdateNonEnumeratedComponent (
        [in] INetCfgComponent*  pIComp,
        [in] DWORD              dwSetupFlags,
        [in] DWORD              dwUpgradeFromBuildNo);

    HRESULT EnumeratedComponentRemoved (
        [in] LPCWSTR pszPnpId);
};

//+---------------------------------------------------------------------------
// INetCfgComponentPrivate -
//
// This interface used by the internal clients to access private methods
// off of INetCfgComponent.
//
[
    local,
    object,
    uuid(98133273-4B20-11D1-AB01-00805FC1270E),
    pointer_default(unique)
]
interface INetCfgComponentPrivate : IUnknown
{
    HRESULT QueryNotifyObject (
        [in]                REFIID  riid,
        [out, iid_is(riid)] void**  ppvObject);

    HRESULT SetDirty ();

    HRESULT NotifyUpperEdgeConfigChange ();
};

//+---------------------------------------------------------------------------
// INetInstallQueue -
//
[
    object,
    uuid(98133274-4B20-11D1-AB01-00805FC1270E),
    pointer_default(unique)
]
interface INetInstallQueue : IUnknown
{
    typedef enum tagNC_INSTALL_TYPE
    {
        NCI_INSTALL,
        NCI_UPDATE,
        NCI_REMOVE,
    } NC_INSTALL_TYPE;

    typedef struct NIQ_INFO
    {
        NC_INSTALL_TYPE eType;
        GUID ClassGuid;
        GUID InstanceGuid;
        DWORD dwCharacter;
        LPCWSTR pszPnpId;
        LPCWSTR pszInfId;
        DWORD dwDeipFlags;
    } NIQ_INFO;

    HRESULT AddItem (
        [in] const NIQ_INFO* pInfo);

    HRESULT ProcessItems ();
};

//+---------------------------------------------------------------------------
// INetCfgSpecialCase -
[
    local,
    object,
    uuid(C0E8AE95-306E-11D1-AACF-00805FC1270E),
    pointer_default(unique)
]
interface INetCfgSpecialCase : IUnknown
{
    HRESULT GetAdapterOrder (
        [out] DWORD* pcAdapters,
        [out] INetCfgComponent*** papAdapters,
        [out] BOOL* pfWanAdaptersFirst);

    HRESULT SetAdapterOrder (
        [in] DWORD cAdapters,
        [in] INetCfgComponent** apAdapters,
        [in] BOOL fWanAdaptersFirst);

    HRESULT GetWanAdaptersFirst (
        [out] BOOL * pfWanAdaptersFirst);

    HRESULT SetWanAdaptersFirst (
        [in]  BOOL fWanAdaptersFirst);
};

