windows-nt/Source/XPSP1/NT/admin/pchealth/helpctr/service/database/instance.cpp
2020-09-26 16:20:57 +08:00

147 lines
4.7 KiB
C++

/******************************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name:
Instance.cpp
Abstract:
This file contains the implementation of the Taxonomy::Instance class,
which controls the set of files for a specific SKU.
Revision History:
Davide Massarenti (Dmassare) 24/03/2001
created
******************************************************************************/
#include "stdafx.h"
////////////////////////////////////////////////////////////////////////////////
Taxonomy::Instance::Instance()
{
m_fSystem = false; // bool m_fSystem;
m_fMUI = false; // bool m_fMUI;
m_fExported = false; // bool m_fExported;
m_dLastUpdated = 0; // DATE m_dLastUpdated;
//
// MPC::wstring m_strLocation;
// MPC::wstring m_strHelpFiles;
// MPC::wstring m_strDatabaseDir;
// MPC::wstring m_strDatabaseFile;
// MPC::wstring m_strIndexFile;
// MPC::wstring m_strIndexDisplayName;
}
HRESULT Taxonomy::operator>>( /*[in]*/ MPC::Serializer& stream, /*[out]*/ Taxonomy::Instance& val )
{
HRESULT hr;
if(SUCCEEDED(hr = (stream >> (InstanceBase&)val )) &&
SUCCEEDED(hr = (stream >> val.m_fSystem )) &&
SUCCEEDED(hr = (stream >> val.m_fMUI )) &&
SUCCEEDED(hr = (stream >> val.m_fExported )) &&
SUCCEEDED(hr = (stream >> val.m_dLastUpdated )) &&
SUCCEEDED(hr = (stream >> val.m_strSystem )) &&
SUCCEEDED(hr = (stream >> val.m_strHelpFiles )) &&
SUCCEEDED(hr = (stream >> val.m_strDatabaseDir )) &&
SUCCEEDED(hr = (stream >> val.m_strDatabaseFile )) &&
SUCCEEDED(hr = (stream >> val.m_strIndexFile )) &&
SUCCEEDED(hr = (stream >> val.m_strIndexDisplayName)) )
{
hr = S_OK;
}
return hr;
}
HRESULT Taxonomy::operator<<( /*[in]*/ MPC::Serializer& stream, /*[in] */ const Taxonomy::Instance& val )
{
HRESULT hr;
if(SUCCEEDED(hr = (stream << (InstanceBase&)val )) &&
SUCCEEDED(hr = (stream << val.m_fSystem )) &&
SUCCEEDED(hr = (stream << val.m_fMUI )) &&
SUCCEEDED(hr = (stream << val.m_fExported )) &&
SUCCEEDED(hr = (stream << val.m_dLastUpdated )) &&
SUCCEEDED(hr = (stream << val.m_strSystem )) &&
SUCCEEDED(hr = (stream << val.m_strHelpFiles )) &&
SUCCEEDED(hr = (stream << val.m_strDatabaseDir )) &&
SUCCEEDED(hr = (stream << val.m_strDatabaseFile )) &&
SUCCEEDED(hr = (stream << val.m_strIndexFile )) &&
SUCCEEDED(hr = (stream << val.m_strIndexDisplayName)) )
{
hr = S_OK;
}
return hr;
}
////////////////////////////////////////////////////////////////////////////////
static const DWORD l_dwVersion = 0x01534854; // THS 01
HRESULT Taxonomy::Instance::LoadFromStream( /*[in]*/ IStream *pStm )
{
__HCP_FUNC_ENTRY( "Taxonomy::Instance::LoadFromStream" );
HRESULT hr;
MPC::Serializer_IStream stream ( pStm );
MPC::Serializer_Buffering stream2( stream );
DWORD dwVer;
__MPC_EXIT_IF_METHOD_FAILS(hr, stream2 >> dwVer); if(dwVer != l_dwVersion) __MPC_SET_ERROR_AND_EXIT(hr, E_INVALIDARG);
__MPC_EXIT_IF_METHOD_FAILS(hr, stream2 >> *this);
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
HRESULT Taxonomy::Instance::SaveToStream( /*[in]*/ IStream* pStm ) const
{
__HCP_FUNC_ENTRY( "Taxonomy::Instance::SaveToStream" );
HRESULT hr;
MPC::Serializer_IStream stream ( pStm );
MPC::Serializer_Buffering stream2( stream );
__MPC_EXIT_IF_METHOD_FAILS(hr, stream2 << l_dwVersion);
__MPC_EXIT_IF_METHOD_FAILS(hr, stream2 << *this );
__MPC_EXIT_IF_METHOD_FAILS(hr, stream2.Flush());
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void Taxonomy::Instance::SetTimeStamp()
{
m_dLastUpdated = MPC::GetLocalTime();
}
HRESULT Taxonomy::Instance::GetFileName( /*[out]*/ MPC::wstring& strFile )
{
WCHAR rgBuf[MAX_PATH]; _snwprintf( rgBuf, MAXSTRLEN(rgBuf), L"%s\\instance_%s_%ld.cab", HC_ROOT_HELPSVC_PKGSTORE, m_ths.GetSKU(), m_ths.GetLanguage() ); rgBuf[MAXSTRLEN(rgBuf)] = 0;
return MPC::SubstituteEnvVariables( strFile = rgBuf );
}