//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1999.
//
//  File:       C L A S S I N S T . H
//
//  Contents:   Defines the interface between the binding engine and the
//              network class installer.
//
//  Notes:
//
//  Author:     billbe   15 Jan 1999
//
//----------------------------------------------------------------------------

#pragma once
#include "comp.h"
#include "install.h"
#include "ncsetup.h"
#include <ntioapi.h>

struct COMPONENT_INSTALL_INFO
{
    NETCLASS                            Class;
    PCWSTR                              pszInfId;
    PCWSTR                              pszInfFile;
    HWND                                hwndParent;
    GUID                                InstanceGuid;
    BOOL                                fPreviouslyInstalled;
    DWORD                               dwCharacter;
    PCWSTR                              pszSectionName;
    PCWSTR                              pszDescription;
    PCWSTR                              pszPnpId;
    HDEVINFO                            hdi;
    PSP_DEVINFO_DATA                    pdeid;
    INTERFACE_TYPE                      BusType;
    BOOL                                fRemoteBoot;
};

HRESULT
HrCiGetClassAndInfFileOfInfId (
    IN PCWSTR pszInfId,
    OUT NETCLASS* pClass,
    OUT PWSTR pszInfFile);   // Must be _MAX_PATH long

HRESULT
HrCiIsInstalledComponent(
    IN COMPONENT_INSTALL_INFO* pcii,
    OUT HKEY* phkey);

HRESULT
HrCiInstallComponent (
    IN const COMPONENT_INSTALL_PARAMS& Params,
    OUT CComponent** ppComponent,
    OUT DWORD* pdwNewCharacter);

HRESULT
HrCiInstallFilterDevice (
    IN HDEVINFO hdi,
    IN PCWSTR pszInfId,
    IN CComponent* pAdapter,
    IN CComponent* pFilter,
    IN class CFilterDevice** ppFilterDevice);

HRESULT
HrCiInstallFromInfSection(
    IN HINF hinfFile,
    IN PCWSTR pszInfSectionName,
    IN HKEY hkeyRelative,
    IN HWND hwndParent,
    IN DWORD dwInstallFlags);

HRESULT
HrCiRemoveComponent (
    IN const CComponent* pComponent,
    OUT tstring* pstrRemoveSection OPTIONAL);

HRESULT
HrCiRemoveFilterDevice (
    IN HDEVINFO hdi,
    IN SP_DEVINFO_DATA* pdeid);


HRESULT
HrCiPrepareSelectDeviceDialog(
    IN HDEVINFO hdi,
    IN PSP_DEVINFO_DATA pdeid);

HRESULT
HrCiRemoveNonEnumeratedComponent (
    IN HINF hinf,
    IN HKEY hkeyInstance,
    IN NETCLASS eClass,
    IN const GUID& InstanceGuid);


HRESULT
HrCiGetDriverInfo (
    IN     HDEVINFO hdi,
    IN OUT PSP_DEVINFO_DATA pdeid,
    IN     const GUID& guidClass,
    IN     PCWSTR pszInfId,
    IN     PCWSTR pszInfFile OPTIONAL);

HRESULT
HrCiGetDriverDetail(
    IN HDEVINFO hdi,
    IN PSP_DEVINFO_DATA pdeid,
    OUT PSP_DRVINFO_DATA pdrid,
    OUT PSP_DRVINFO_DETAIL_DATA* ppdridd);


HRESULT
HrCiSelectComponent(
    IN NETCLASS Class,
    IN HWND hwndParent,
    IN const CI_FILTER_INFO* pcfi,
    OUT COMPONENT_INSTALL_PARAMS** ppParams);

HRESULT
HrCiInstallComponentInternal(
    IN OUT COMPONENT_INSTALL_INFO* pcii);