//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1999.
//
//  File:       I C L A S S . H
//
//  Contents:   Implements the INetCfgClass and INetCfgClassSetup COM
//              interfaces on the NetCfgClass sub-level COM object.
//
//  Notes:
//
//  Author:     shaunco   15 Jan 1999
//
//----------------------------------------------------------------------------

#pragma once
#include "iatl.h"
#include "inetcfg.h"
#include "compdefs.h"
#include "netcfgx.h"


//+---------------------------------------------------------------------------
// INetCfgClass -
//
class ATL_NO_VTABLE CImplINetCfgClass :
    public CImplINetCfgHolder,
    public INetCfgClass,
    public INetCfgClassSetup
{
private:
    NETCLASS    m_Class;

public:
    CImplINetCfgClass ()
    {
        m_Class = NC_INVALID;
    }

    BEGIN_COM_MAP(CImplINetCfgClass)
        COM_INTERFACE_ENTRY(INetCfgClass)
        COM_INTERFACE_ENTRY(INetCfgClassSetup)
    END_COM_MAP()

    // INetCfgClass
    //
    STDMETHOD (FindComponent) (
        IN PCWSTR pszInfId,
        OUT INetCfgComponent** ppComp);

    STDMETHOD (EnumComponents) (
        OUT IEnumNetCfgComponent** ppIEnum);

    // INetCfgClassSetup
    //
    STDMETHOD (SelectAndInstall) (
        IN HWND hwndParent,
        IN OBO_TOKEN* pOboToken,
        OUT INetCfgComponent** ppIComp);

    STDMETHOD (Install) (
        IN PCWSTR pszwInfId,
        IN OBO_TOKEN* pOboToken,
        IN DWORD dwSetupFlags,
        IN DWORD dwUpgradeFromBuildNo,
        IN PCWSTR pszAnswerFile,
        IN PCWSTR pszAnswerSection,
        OUT INetCfgComponent** ppIComp);

    STDMETHOD (DeInstall) (
        IN INetCfgComponent* pIComp,
        IN OBO_TOKEN* pOboToken,
        OUT PWSTR* ppmszwRefs);

public:
    static HRESULT HrCreateInstance (
        IN  CImplINetCfg* pINetCfg,
        IN  NETCLASS Class,
        OUT INetCfgClass** ppIClass);
};