|
|
//+---------------------------------------------------------------------------
//
// 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, ...);
|