127 lines
2.8 KiB
C++
127 lines
2.8 KiB
C++
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Copyright: Microsoft Corp. 1997-1999. All rights reserved
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// Log.cpp : Implementation of CLog
|
||
|
#include "stdafx.h"
|
||
|
#include "Evntutl.h"
|
||
|
#include "Log.h"
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CLog
|
||
|
|
||
|
STDMETHODIMP CLog::InterfaceSupportsErrorInfo(REFIID riid)
|
||
|
{
|
||
|
static const IID* arr[] =
|
||
|
{
|
||
|
&IID_ILog
|
||
|
};
|
||
|
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
|
||
|
{
|
||
|
if (InlineIsEqualGUID(*arr[i],riid))
|
||
|
return S_OK;
|
||
|
}
|
||
|
return S_FALSE;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Function: get_Events
|
||
|
Inputs: empty variant pointer
|
||
|
Outputs: variant dispatch pointer to a filled Events collection
|
||
|
Purpose: provide access to IEvents interface, open an event log if not already open
|
||
|
Notes: This op is very expensive when calling m_pEvents->Init()
|
||
|
*/
|
||
|
STDMETHODIMP CLog::get_Events(VARIANT *pVal)
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
VariantInit(pVal);
|
||
|
|
||
|
IDispatch* pDisp;
|
||
|
m_pEvents->QueryInterface (IID_IDispatch, (void**) &pDisp);
|
||
|
pVal->vt = VT_DISPATCH;
|
||
|
pVal->pdispVal = pDisp;
|
||
|
|
||
|
// Need to open the log before users can start retreiving events.
|
||
|
if (!m_Name) hr = E_INVALIDARG;
|
||
|
else
|
||
|
{
|
||
|
if (!m_hLog) // if removed, calling Log.Events will refresh the collection
|
||
|
{
|
||
|
m_hLog = OpenEventLog(m_ServerName, m_Name);
|
||
|
if (m_hLog) m_pEvents->Init(m_hLog, m_Name);
|
||
|
else hr = E_HANDLE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Function: get_Name
|
||
|
Inputs: empty BSTR
|
||
|
Outputs: BSTR containing the name of the EventLog
|
||
|
Purpose: Allows user to access the name of the active EventLog
|
||
|
*/
|
||
|
STDMETHODIMP CLog::get_Name(BSTR *pVal)
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
if (pVal) *pVal = m_Name.copy();
|
||
|
else hr = E_POINTER;
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Function: get_Server
|
||
|
Inputs: empty BSTR
|
||
|
Outputs: BSTR containing the name of the server for the EventLog
|
||
|
Purpose: Allows user to access the name of the active Server
|
||
|
*/
|
||
|
STDMETHODIMP CLog::get_Server(BSTR *pVal)
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
if (pVal) *pVal = m_ServerName.copy();
|
||
|
else hr = E_POINTER;
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Function: put_Server
|
||
|
Inputs: BSTR containing the name of the server for the EventLog
|
||
|
Outputs: HRESULT showing error code in case of failure, does not change input
|
||
|
Purpose: Allows user to alter the name of the active Server
|
||
|
*/
|
||
|
STDMETHODIMP CLog::put_Server(BSTR newVal)
|
||
|
{
|
||
|
m_ServerName = newVal;
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Function: Clear
|
||
|
Inputs: none
|
||
|
Outputs: HRESULT showing error code in case of failure
|
||
|
Purpose: Allows user to wipe EventLog clean
|
||
|
Note: The function does NOT backup the EventLog first
|
||
|
*/
|
||
|
STDMETHODIMP CLog::Clear()
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
if (!m_hLog) m_hLog = OpenEventLog(m_ServerName, m_Name);
|
||
|
if (m_hLog)
|
||
|
{
|
||
|
if (ClearEventLog(m_hLog, NULL)) m_hLog = NULL;
|
||
|
else hr = E_FAIL;
|
||
|
}
|
||
|
else hr = E_HANDLE;
|
||
|
|
||
|
return hr;
|
||
|
}
|