Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/////////////////////////////////////////////////////////////////////////////
//
// 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; }
|