windows-nt/Source/XPSP1/NT/net/config/shell/netsetup/afileint.h
2020-09-26 16:20:57 +08:00

428 lines
13 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: A F I L E X P . H
//
// Contents: Interface classes to access the AnswerFile in modular way.
//
// Author: kumarp 25-November-97
//
//----------------------------------------------------------------------------
#pragma once
#include "edc.h"
#include "kkcwinf.h"
#include "netcfgp.h"
#include "oemupgrd.h"
#include "nsexports.h"
enum EPageDisplayMode { PDM_UNKNOWN, PDM_NO, PDM_YES, PDM_ONLY_ON_ERROR };
// ----------------------------------------------------------------------
// forward declarations
// ----------------------------------------------------------------------
class CNetInstallInfo;
class CPageDisplayCommonInfo;
class CCommonInfo;
class CNetComponentsPageBase;
class CNetAdaptersPage;
class CNetProtocolsPage;
class CNetServicesPage;
class CNetClientsPage;
class CNetBindingsPage;
class CNetComponent;
class CNetComponentList;
class CNetAdapter;
class CNetProtocol;
class CNetService;
class CNetClient;
enum ENetComponentType;
class CNetComponentList : public TPtrList
{
};
// ----------------------------------------------------------------------
class CNetInstallInfo
{
private:
CNetInstallInfo();
public:
~CNetInstallInfo();
static
HRESULT
HrCreateInstance (
IN PCWSTR pszAnswerFileName,
OUT CNetInstallInfo** ppObj);
//void InitDefaults();
HRESULT CNetInstallInfo::InitRepairMode (VOID);
HRESULT HrInitFromAnswerFile(IN PCWSTR pszAnswerFileName);
HRESULT HrInitFromAnswerFile(IN CWInfFile* pwifAnswerFile);
BOOL AnswerFileInitialized() { return m_pwifAnswerFile != NULL;}
PCWSTR AnswerFileName();
CWInfFile* AnswerFile() { return m_pwifAnswerFile; }
HRESULT HrInitForDefaultComponents();
CNetComponent* Find(IN PCWSTR pszComponentName) const;
CNetComponent* FindFromInfID(IN PCWSTR szInfID) const;
HRESULT
FindAdapter (
IN QWORD qwNetCardAddress,
OUT CNetAdapter** ppNetAdapter) const;
HRESULT
FindAdapter (
IN DWORD BusNumber,
IN DWORD Address,
OUT CNetAdapter** ppNetAdapter) const;
CNetAdapter* FindAdapter(IN PCWSTR pszInfID) const;
HRESULT HrGetInstanceGuidOfPreNT5NetCardInstance(IN PCWSTR szPreNT5NetCardInstance,
OUT LPGUID pguid);
HRESULT HrDoUnattended(IN HWND hParent, IN IUnknown * punk,
IN EUnattendWorkType uawType,
OUT EPageDisplayMode *ppdm, OUT BOOL *pfAllowChanges);
CNetAdaptersPage* AdaptersPage() { return m_pnaiAdaptersPage; }
CNetProtocolsPage* ProtocolsPage() { return m_pnpiProtocolsPage;}
CNetServicesPage* ServicesPage() { return m_pnsiServicesPage; }
CNetClientsPage* ClientsPage() { return m_pnciClientsPage; }
CNetBindingsPage* BindingsPage() { return m_pnbiBindingsPage; }
DWORD UpgradeFlag() const { return m_dwUpgradeFlag; }
DWORD BuildNumber() const { return m_dwBuildNumber; }
private:
CWInfFile* m_pwifAnswerFile;
CNetAdaptersPage* m_pnaiAdaptersPage;
CNetProtocolsPage* m_pnpiProtocolsPage;
CNetServicesPage* m_pnsiServicesPage;
CNetClientsPage* m_pnciClientsPage;
CNetBindingsPage* m_pnbiBindingsPage;
DWORD m_dwUpgradeFlag;
DWORD m_dwBuildNumber;
BOOL m_fProcessPageSections;
BOOL m_fUpgrade;
BOOL m_fInstallDefaultComponents;
TStringList m_slNetComponentsToRemove;
public:
NetUpgradeInfo m_nui;
HINF m_hinfAnswerFile;
};
extern CNetInstallInfo* g_pnii;
// ----------------------------------------------------------------------
class CPageDisplayCommonInfo
{
public:
CPageDisplayCommonInfo();
//void InitDefaults();
virtual HRESULT HrInitFromAnswerFile(IN CWInfFile* pwifAnswerFile);
EPageDisplayMode Display() const { return m_pdmDisplay; }
BOOL AllowChanges() const { return m_fAllowChanges; }
void GetDisplaySettings(OUT EPageDisplayMode* ppdm,
OUT BOOL* pfAllowChanges) const
{ *ppdm = m_pdmDisplay;
*pfAllowChanges = m_fAllowChanges; }
private:
EPageDisplayMode m_pdmDisplay;
BOOL m_fAllowChanges;
};
// ----------------------------------------------------------------------
class CNetComponentsPageBase : public CPageDisplayCommonInfo
{
public:
CNetComponentsPageBase(IN CNetInstallInfo* pnii,
IN const GUID* lpguidDevClass);
~CNetComponentsPageBase();
virtual HRESULT HrInitFromAnswerFile(IN CWInfFile* pwifAnswerFile,
IN PCWSTR pszSectionName);
HRESULT HrInitForDefaultComponents();
CNetComponent* Find(IN PCWSTR pszComponentName) const;
CNetComponent* FindFromInfID(IN PCWSTR szInfID) const;
virtual HRESULT HrValidate() const;
virtual CNetComponent* GetNewComponent(IN PCWSTR pszName) = 0;
virtual HRESULT HrDoNetworkInstall(IN HWND hParent, IN INetCfg* pnc);
virtual HRESULT HrDoOsUpgrade(IN INetCfg* pnc);
protected:
CNetInstallInfo* m_pnii;
const GUID* m_lpguidDevClass;
CNetComponentList m_pnclComponents;
PCWSTR m_pszClassName;
ENetComponentType m_eType;;
friend
VOID
CALLBACK
DefaultComponentCallback (
IN EDC_CALLBACK_MESSAGE Message,
IN ULONG_PTR MessageData,
IN PVOID pvCallerData OPTIONAL);
};
// ----------------------------------------------------------------------
class CNetAdaptersPage : public CNetComponentsPageBase
{
public:
CNetAdaptersPage(IN CNetInstallInfo* pnii);
virtual CNetComponent* GetNewComponent(IN PCWSTR pszName);
HRESULT HrInitFromAnswerFile(IN CWInfFile* pwifAnswerFile);
HRESULT
FindAdapter(IN QWORD qwNetCardAddress, OUT CNetAdapter** ppNetAdapter ) const;
HRESULT
FindAdapter (IN DWORD BusNumber, IN DWORD Address, OUT CNetAdapter** ppNetAdapter) const;
CNetAdapter* FindAdapter(IN PCWSTR pszInfID) const;
CNetAdapter* FindCompatibleAdapter(IN PCWSTR mszInfIDs) const;
CNetAdapter* FindAdapterFromPreUpgradeInstance(IN PCWSTR szPreUpgradeInstance);
DWORD GetNumCompatibleAdapters(IN PCWSTR mszInfID) const;
HRESULT HrResolveNetAdapters(IN INetCfg* pnc);
HRESULT HrDoOemPostUpgradeProcessing(IN INetCfg* pnc,
IN HWND hwndParent);
HRESULT HrSetConnectionNames();
private:
};
// ----------------------------------------------------------------------
class CNetProtocolsPage : public CNetComponentsPageBase
{
public:
CNetProtocolsPage(IN CNetInstallInfo* pnii);
virtual CNetComponent* GetNewComponent(IN PCWSTR pszName);
HRESULT HrInitFromAnswerFile(IN CWInfFile* pwifAnswerFile);
private:
};
// ----------------------------------------------------------------------
class CNetServicesPage : public CNetComponentsPageBase
{
public:
CNetServicesPage(IN CNetInstallInfo* pnii);
virtual CNetComponent* GetNewComponent(IN PCWSTR pszName);
HRESULT HrInitFromAnswerFile(IN CWInfFile* pwifAnswerFile);
private:
};
// ----------------------------------------------------------------------
class CNetClientsPage : public CNetComponentsPageBase
{
public:
CNetClientsPage(IN CNetInstallInfo* pnii);
virtual CNetComponent* GetNewComponent(IN PCWSTR pszName);
HRESULT HrInitFromAnswerFile(IN CWInfFile* pwifAnswerFile);
private:
};
// ----------------------------------------------------------------------
class CNetBindingsPage : public CPageDisplayCommonInfo
{
public:
CNetBindingsPage(IN CNetInstallInfo* pnii);
HRESULT HrInitFromAnswerFile(IN CWInfFile* pwifAnswerFile);
virtual HRESULT HrDoUnattended(IN INetCfg* pnc);
private:
CNetInstallInfo* m_pnii;
TPtrList m_plBindingActions;
};
// ----------------------------------------------------------------------
enum ENetComponentType { NCT_Unknown, NCT_Client, NCT_Service,
NCT_Protocol, NCT_Adapter };
class CNetComponent
{
friend HRESULT CNetComponentsPageBase::HrDoNetworkInstall(IN HWND hParent,
IN INetCfg* pnc);
public:
CNetComponent(IN PCWSTR pszName);
ENetComponentType Type() const { return m_eType; }
virtual HRESULT HrInitFromAnswerFile(IN CWInfFile* pwifAnswerFile,
IN PCWSTR pszParamsSections);
const tstring& Name() const { return m_strName; }
const tstring& InfID() const { return m_strInfID; }
const tstring& InfIDReal() const { return m_strInfIDReal; }
const tstring& ParamsSections() const { return m_strParamsSections; }
const tstring& OemDll() const { return m_strOemDll; }
const tstring& OemDir() const { return m_strOemDir; }
void GetInstanceGuid(LPGUID pguid) const;
void SetInfID(IN PCWSTR pszInfID) { m_strInfID = pszInfID; }
void SetInstanceGuid(const GUID* pguid);
virtual BOOL IsInitializedFromAnswerFile() const
{ return ! m_strParamsSections.empty(); }
virtual HRESULT HrValidate() const;
tstring m_strParamsSections;
protected:
ENetComponentType m_eType;
tstring m_strName;
tstring m_strInfID;
tstring m_strInfIDReal;
GUID m_guidInstance;
BOOL m_fIsOemComponent;
BOOL m_fSkipInstall;
tstring m_strOemSection;
tstring m_strOemDir;
tstring m_strOemDll;
tstring m_strInfToRunBeforeInstall;
tstring m_strSectionToRunBeforeInstall;
tstring m_strInfToRunAfterInstall;
tstring m_strSectionToRunAfterInstall;
};
// ----------------------------------------------------------------------
class CNetAdapter : public CNetComponent
{
public:
CNetAdapter(IN PCWSTR pszName);
virtual HRESULT HrInitFromAnswerFile(IN CWInfFile* pwifAnswerFile,
IN PCWSTR pszParamsSections);
virtual HRESULT HrValidate();
PCWSTR PreUpgradeInstance() const
{ return m_strPreUpgradeInstance.c_str();}
INTERFACE_TYPE BusType() const { return m_itBus; }
WORD IOAddr() const { return m_wIOAddr; }
WORD IRQ() const { return m_wIRQ; }
WORD DMA() const { return m_wDMA; }
DWORD Mem() const { return m_dwMem; }
QWORD NetCardAddr() const { return m_qwNetCardAddress; }
BOOL IsPseudoAdapter() const { return m_fPseudoAdapter; }
PCWSTR ConnectionName() const { return m_strConnectionName.c_str();}
DWORD PciAddress () const { return MAKELONG(m_PciFunctionNumber, m_PciDeviceNumber); }
DWORD PciBusNumber () const { return m_PciBusNumber; }
BOOL FPciInfoSpecified() const { return m_fPciLocationInfoSpecified; }
private:
BOOL m_fDetect;
BOOL m_fPseudoAdapter;
tstring m_strPreUpgradeInstance;
INTERFACE_TYPE m_itBus;
WORD m_wIOAddr;
WORD m_wIRQ;
WORD m_wDMA;
DWORD m_dwMem;
WORD m_PciBusNumber;
WORD m_PciDeviceNumber;
WORD m_PciFunctionNumber;
BOOL m_fPciLocationInfoSpecified;
QWORD m_qwNetCardAddress;
tstring m_strConnectionName;
};
// ----------------------------------------------------------------------
class CNetProtocol : public CNetComponent
{
public:
CNetProtocol(IN PCWSTR pszName);
};
// ----------------------------------------------------------------------
class CNetService : public CNetComponent
{
public:
CNetService(IN PCWSTR pszName);
};
// ----------------------------------------------------------------------
class CNetClient : public CNetComponent
{
public:
CNetClient(IN PCWSTR pszName);
};
// ----------------------------------------------------------------------
enum EBindingAction
{
BND_Unknown,
BND_Enable,
BND_Disable,
BND_Promote,
BND_Demote
};
class CBindingAction
{
friend
HRESULT
CNetInstallInfo::HrCreateInstance (
IN PCWSTR pszAnswerFileName,
OUT CNetInstallInfo** ppObj);
public:
CBindingAction();
~CBindingAction();
HRESULT HrInitFromAnswerFile(IN const CWInfKey* pwikKey);
HRESULT HrPerformAction(IN INetCfg* pnc);
private:
static CNetInstallInfo* m_pnii;
EBindingAction m_eBindingAction;
TStringList m_slBindingPath;
#if DBG
tstring m_strBindingPath;
#endif
};
// ----------------------------------------------------------------------
VOID
GetAnswerFileErrorList_Internal(OUT TStringList*& slErrors);
void ShowAnswerFileErrorsIfAny();
void ShowProgressMessage(IN PCWSTR szFormatStr, ...);