windows-nt/Source/XPSP1/NT/enduser/windows.com/wuv3/wuv3is/callback.cpp
2020-09-26 16:20:57 +08:00

161 lines
2.8 KiB
C++

//=======================================================================
//
// Copyright (c) 1999 Microsoft Corporation. All Rights Reserved.
//
// File: callback.cpp
//
// Purpose: INSENG callback implementation
//
// History: 19-jan-99 YAsmi Created
//
//=======================================================================
#include "callback.h"
CInstallEngineCallback::CInstallEngineCallback()
{
m_cRef = 0;
m_pProgress = NULL;
m_pEngine = NULL;
Reset();
}
void CInstallEngineCallback::Reset()
{
m_dwInstallStatus = 0;
m_dwPhase = INSTALLSTATUS_INITIALIZING;
m_hResult = NOERROR;
m_bAborted = FALSE;
}
//
//IUnknown
//
STDMETHODIMP_(ULONG) CInstallEngineCallback::AddRef()
{
return ++m_cRef;
}
STDMETHODIMP_(ULONG) CInstallEngineCallback::Release()
{
if (--m_cRef != 0)
return m_cRef;
//we don't delete the object here because we want the client of the object to explicitly delete it
return 0;
}
STDMETHODIMP CInstallEngineCallback::QueryInterface(REFIID riid, void** ppv)
{
*ppv = NULL;
if((riid == IID_IUnknown) || (riid == IID_IInstallEngineCallback))
*ppv = this;
if(*ppv == NULL)
return E_NOINTERFACE;
((LPUNKNOWN)*ppv)->AddRef();
return NOERROR;
}
//
//IInstallEngineCallback
//
STDMETHODIMP CInstallEngineCallback::OnComponentProgress(LPCSTR pszID, DWORD dwPhase, LPCSTR pszString, LPCSTR pszMsgString, ULONG ulSofar, ULONG ulMax)
{
/*
if(dwPhase == INSTALLSTATUS_RUNNING)
_pProgDlg->SetInsProgress(ulSofar);
*/
m_dwPhase = dwPhase;
if (m_pProgress != NULL)
{
//
// check for cancel
//
if (m_pEngine != NULL)
{
if (!m_bAborted)
{
if (WaitForSingleObject(m_pProgress->GetCancelEvent(), 0) == WAIT_OBJECT_0)
m_bAborted = TRUE;
}
if (m_bAborted)
{
//
// keep telling the engine to abort
//
m_pEngine->Abort(0);
}
}
}
return NOERROR;
}
STDMETHODIMP CInstallEngineCallback::OnStopComponent(LPCSTR pszID, HRESULT hrError, DWORD dwPhase, LPCSTR pszString, DWORD dwStatus)
{
return NOERROR;
}
STDMETHODIMP CInstallEngineCallback::OnEngineStatusChange(DWORD dwEngineStatus, DWORD sub)
{
return NOERROR;
}
STDMETHODIMP CInstallEngineCallback::OnStartInstall(DWORD dwDLSize, DWORD dwTotalSize)
{
/*
if(_pProgDlg)
_pProgDlg->SetInsProgGoal(dwTotalSize);
*/
return NOERROR;
}
STDMETHODIMP CInstallEngineCallback::OnStartComponent(LPCSTR pszID, DWORD dwDLSize,
DWORD dwInstallSize, LPCSTR pszName)
{
/*
_strCurrentName = BSTRFROMANSI(pszName);
*/
return NOERROR;
}
STDMETHODIMP CInstallEngineCallback::OnEngineProblem(DWORD dwProblem, LPDWORD pdwAction)
{
return S_OK;
}
STDMETHODIMP CInstallEngineCallback::OnStopInstall(HRESULT hrError, LPCSTR szError, DWORD dwStatus)
{
m_hResult = hrError;
m_dwInstallStatus = dwStatus;
return NOERROR;
}