windows-nt/Source/XPSP1/NT/admin/pchealth/helpctr/service/include/pchupdate.h
2020-09-26 16:20:57 +08:00

235 lines
10 KiB
C++

/******************************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name:
pchupdate.h
Abstract:
This file contains the declaration of the CPCHUpdate class, that implements
the IPCHUpdate interface.
Revision History:
Davide Massarenti (Dmassare) 00/00/2000
created
******************************************************************************/
#ifndef __PCHUPDATE_H_
#define __PCHUPDATE_H_
#include <SvcResource.h>
#include <TaxonomyDatabase.h>
namespace HCUpdate
{
class Engine;
class VersionItem;
////////////////////
class ATL_NO_VTABLE VersionItem :
public CComObjectRootEx<MPC::CComSafeMultiThreadModel>,
public IDispatchImpl<IPCHVersionItem, &IID_IPCHVersionItem, &LIBID_HelpServiceTypeLib>
{
friend class Engine;
Taxonomy::Package m_pkg;
////////////////////////////////////////
public:
BEGIN_COM_MAP(VersionItem)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IPCHVersionItem)
END_COM_MAP()
// IHCPHelpSessionItem
STDMETHOD(get_SKU )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(get_Language )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(get_VendorID )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(get_VendorName)( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(get_ProductID )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(get_Version )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(Uninstall)();
};
/////////////////////////////////////////////////////////////////////////////
// Engine
class ATL_NO_VTABLE Engine :
public CComObjectRootEx<MPC::CComSafeMultiThreadModel>,
public IDispatchImpl< IPCHUpdate, &IID_IPCHUpdate, &LIBID_HelpServiceTypeLib >,
public CComCoClass < Engine , &CLSID_PCHUpdate >,
public Taxonomy::InstallationEngine
{
friend class VersionItem;
MPC::wstring m_strWinDir;
Taxonomy::Logger m_log;
Taxonomy::Updater m_updater;
Taxonomy::Settings m_ts;
Taxonomy::InstalledInstance* m_sku;
Taxonomy::Package* m_pkg;
bool m_fCreationMode;
DWORD m_dwRefCount;
JetBlue::SessionHandle m_handle;
JetBlue::Session* m_sess;
JetBlue::Database* m_db;
////////////////////////////////////////////////////////////////////////////////
typedef enum
{
ACTION_ADD,
ACTION_DELETE
} Action;
static const LPCWSTR s_ActionText[];
////////////////////////////////////////////////////////////////////////////////
static long CountNodes( /*[in]*/ IXMLDOMNodeList* poNodeList );
////////////////////////////////////////////////////////////////////////////////
void DeleteTempFile ( /*[in/out]*/ MPC::wstring& strFile );
HRESULT PrepareTempFile( /*[in/out]*/ MPC::wstring& strFile );
////////////////////////////////////////////////////////////////////////////////
HRESULT AppendVendorDir( LPCWSTR szURL, LPCWSTR szOwnerID, LPCWSTR szWinDir, LPWSTR szDest, int iMaxLen );
HRESULT LookupAction ( /*[in]*/ LPCWSTR szAction, /*[out]*/ Action& id );
HRESULT LookupBoolean ( /*[in]*/ LPCWSTR szString, /*[out]*/ bool& fVal, /*[in]*/ bool fDefault = false );
HRESULT LookupNavModel( /*[in]*/ LPCWSTR szString, /*[out]*/ long& lVal, /*[in]*/ long lDefault = QR_DEFAULT );
HRESULT UpdateStopSign( /*[in]*/ Action idAction, /*[in]*/ const MPC::wstring& strContext , /*[in]*/ const MPC::wstring& strStopSign );
HRESULT UpdateStopWord( /*[in]*/ Action idAction, /*[in]*/ const MPC::wstring& strStopWord );
HRESULT UpdateOperator( /*[in]*/ Action idAction, /*[in]*/ const MPC::wstring& strOperator, /*[in]*/ const MPC::wstring& strOperation );
////////////////////////////////////////////////////////////////////////////////
bool IsMicrosoft() { return m_pkg->m_fMicrosoft; }
bool IsAborted() { return (Taxonomy::InstalledInstanceStore::s_GLOBAL && Taxonomy::InstalledInstanceStore::s_GLOBAL->IsShutdown()); }
////////////////////////////////////////////////////////////////////////////////
HRESULT GetNodeDepth( /*[in]*/ LPCWSTR szCategory, /*[out]*/ int& iDepth );
HRESULT CheckNode( /*[in]*/ LPCWSTR szCategory, /*[out]*/ bool& fExist, /*[out]*/ bool& fCanCreate );
HRESULT CheckTopic( /*[in]*/ long ID_node, /*[in]*/ LPCWSTR szURI, /*[in]*/ LPCWSTR szCategory );
////////////////////////////////////////////////////////////////////////////////
HRESULT InsertNode( /*[in]*/ Action idAction ,
/*[in]*/ LPCWSTR szCategory ,
/*[in]*/ LPCWSTR szEntry ,
/*[in]*/ LPCWSTR szTitle ,
/*[in]*/ LPCWSTR szDescription ,
/*[in]*/ LPCWSTR szURI ,
/*[in]*/ LPCWSTR szIconURI ,
/*[in]*/ bool fVisible ,
/*[in]*/ bool fSubsite ,
/*[in]*/ long lNavModel ,
/*[in]*/ long lPos );
HRESULT InsertTaxonomy( /*[in]*/ MPC::XmlUtil& oXMLUtil ,
/*[in]*/ IXMLDOMNode* poNode );
////////////////////////////////////////////////////////////////////////////////
HRESULT AcquireDatabase();
void ReleaseDatabase();
HRESULT ProcessHHTFile( /*[in]*/ LPCWSTR szHHTName ,
/*[in]*/ MPC::XmlUtil& oXMLUtil );
HRESULT ProcessRegisterContent( /*[in]*/ Action idAction ,
/*[in]*/ LPCWSTR szURI );
HRESULT ProcessInstallFile( /*[in]*/ Action idAction ,
/*[in]*/ LPCWSTR szSource ,
/*[in]*/ LPCWSTR szDestination ,
/*[in]*/ bool fSys ,
/*[in]*/ bool fSysHelp );
HRESULT ProcessSAFFile( /*[in]*/ Action idAction ,
/*[in]*/ LPCWSTR szSAFName ,
/*[in]*/ MPC::XmlUtil& oXMLUtil );
////////////////////////////////////////////////////////////////////////////////
public:
DECLARE_REGISTRY_RESOURCEID(IDR_HCUPDATE)
DECLARE_NOT_AGGREGATABLE(Engine)
BEGIN_COM_MAP(Engine)
COM_INTERFACE_ENTRY(IPCHUpdate)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
Engine();
HRESULT FinalConstruct();
void FinalRelease ();
////////////////////////////////////////
HRESULT StartLog ( ) { return m_log.StartLog ( ); }
HRESULT EndLog ( ) { return m_log.EndLog ( ); }
HRESULT WriteLogV( /*[in]*/ HRESULT hr, /*[in]*/ LPCWSTR szLogFormat, /*[in]*/ va_list arglist ) { return m_log.WriteLogV( hr, szLogFormat, arglist ); }
HRESULT WriteLog ( /*[in]*/ HRESULT hr, /*[in]*/ LPCWSTR szLogFormat, ... );
Taxonomy::Logger& GetLogger() { return m_log; }
////////////////////////////////////////
HRESULT SetSkuInfo( /*[in]*/ LPCWSTR szSKU, /*[in]*/ long lLCID );
HRESULT PopulateDatabase( /*[in]*/ LPCWSTR szCabinet ,
/*[in]*/ LPCWSTR szHHTFile ,
/*[in]*/ LPCWSTR szLogFile ,
/*[in]*/ LPCWSTR szSKU ,
/*[in]*/ long lLCID ,
/*[in]*/ JetBlue::Session* sess ,
/*[in]*/ JetBlue::Database* db );
HRESULT InternalCreateIndex( /*[in]*/ VARIANT_BOOL bForce );
HRESULT InternalUpdatePkg( /*[in]*/ LPCWSTR szPathname, /*[in]*/ bool fImpersonate );
HRESULT InternalRemovePkg( /*[in]*/ LPCWSTR szPathname, /*[in]*/ Taxonomy::Package* pkg, /*[in]*/ bool fImpersonate );
HRESULT ForceSystemRestore();
// IPCHUpdate
public:
STDMETHOD(get_VersionList)( /*[out, retval]*/ IPCHCollection* *ppC );
STDMETHOD(LatestVersion)( /*[in ]*/ BSTR bstrVendorID ,
/*[in ]*/ BSTR bstrProductID ,
/*[in,optional]*/ VARIANT vSKU ,
/*[in,optional]*/ VARIANT vLanguage ,
/*[out, retval]*/ BSTR *pVal );
STDMETHOD(CreateIndex)( /*[in ]*/ VARIANT_BOOL bForce ,
/*[in,optional]*/ VARIANT vSKU ,
/*[in,optional]*/ VARIANT vLanguage );
STDMETHOD(UpdatePkg )( /*[in]*/ BSTR bstrPathname, /*[in]*/ VARIANT_BOOL bSilent );
STDMETHOD(RemovePkg )( /*[in]*/ BSTR bstrPathname );
STDMETHOD(RemovePkgByID)( /*[in]*/ BSTR bstrVendorID, /*[in]*/ BSTR bstrProductID, /*[in,optional]*/ VARIANT vVersion );
// Taxonomy::InstallationEngine
HRESULT ProcessPackage( /*[in]*/ Taxonomy::InstalledInstance& instance, /*[in]*/ Taxonomy::Package& pkg );
HRESULT RecreateIndex ( /*[in]*/ Taxonomy::InstalledInstance& instance, /*[in]*/ bool fForce );
};
};
#endif //__PCHUPDATE_H_