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.
1650 lines
52 KiB
1650 lines
52 KiB
//***************************************************************************
|
|
|
|
//
|
|
|
|
// NTEVTGET.CPP
|
|
|
|
//
|
|
|
|
// Module: WBEM NT EVENT PROVIDER
|
|
|
|
//
|
|
|
|
// Purpose: Contains the GetObject implementation
|
|
|
|
//
|
|
|
|
// Copyright (c) 1996-2001 Microsoft Corporation, All Rights Reserved
|
|
//
|
|
//***************************************************************************
|
|
|
|
#include "precomp.h"
|
|
|
|
extern BOOL GenerateAssocInstance (WbemProvErrorObject &a_ErrorObject,
|
|
const wchar_t* objPath1,
|
|
const wchar_t* objPath2,
|
|
wchar_t* prop1,
|
|
wchar_t* prop2,
|
|
IWbemClassObject* pClassObject,
|
|
IWbemObjectSink* pNtfcnHandler,
|
|
BOOL *pbIndicated);
|
|
|
|
BOOL GetObjectAsyncEventObject :: GetObject ( WbemProvErrorObject &a_ErrorObject )
|
|
{
|
|
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: GetObject\r\n"
|
|
) ;
|
|
)
|
|
if (FAILED(m_ErrorObject.GetWbemStatus()))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL t_Status = ! m_ObjectPathParser.Parse ( m_ObjectPath , &m_ParsedObjectPath ) ;
|
|
|
|
if ( t_Status )
|
|
{
|
|
BOOL bClass = TRUE;
|
|
|
|
if ( _wcsicmp ( m_ParsedObjectPath->m_pClass , NTEVT_CLASS) == 0 )
|
|
{
|
|
BSTR bstCls = SysAllocString( m_ParsedObjectPath->m_pClass ) ;
|
|
if ( bstCls )
|
|
{
|
|
t_Status = GetClassObject ( bstCls ) ;
|
|
SysFreeString ( bstCls ) ;
|
|
|
|
if ( t_Status )
|
|
{
|
|
t_Status = Dispatch_Record ( a_ErrorObject ) ;
|
|
|
|
if ( t_Status )
|
|
{
|
|
m_State = WBEM_TASKSTATE_ASYNCHRONOUSCOMPLETE ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bClass = FALSE ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_OUT_OF_MEMORY ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_OUT_OF_MEMORY ) ;
|
|
a_ErrorObject.SetMessage ( L"Unable to allocate class string" ) ;
|
|
}
|
|
}
|
|
else if ( _wcsicmp ( m_ParsedObjectPath->m_pClass , NTEVTLOG_CLASS ) == 0 )
|
|
{
|
|
BSTR bstCls = SysAllocString( m_ParsedObjectPath->m_pClass ) ;
|
|
if ( bstCls )
|
|
{
|
|
t_Status = GetClassObject ( bstCls ) ;
|
|
SysFreeString ( bstCls ) ;
|
|
|
|
if ( t_Status )
|
|
{
|
|
t_Status = Dispatch_EventLog ( a_ErrorObject ) ;
|
|
|
|
if ( t_Status )
|
|
{
|
|
m_State = WBEM_TASKSTATE_ASYNCHRONOUSCOMPLETE ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bClass = FALSE ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_OUT_OF_MEMORY ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_OUT_OF_MEMORY ) ;
|
|
a_ErrorObject.SetMessage ( L"Unable to allocate class string" ) ;
|
|
}
|
|
}
|
|
else if ( _wcsicmp ( m_ParsedObjectPath->m_pClass , ASSOC_LOGRECORD ) == 0 )
|
|
{
|
|
BSTR bstCls = SysAllocString( m_ParsedObjectPath->m_pClass ) ;
|
|
if ( bstCls )
|
|
{
|
|
t_Status = GetClassObject ( bstCls ) ;
|
|
SysFreeString ( bstCls ) ;
|
|
|
|
if ( t_Status )
|
|
{
|
|
t_Status = Dispatch_LogRecord ( a_ErrorObject ) ;
|
|
|
|
if ( t_Status )
|
|
{
|
|
m_State = WBEM_TASKSTATE_ASYNCHRONOUSCOMPLETE ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bClass = FALSE ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_OUT_OF_MEMORY ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_OUT_OF_MEMORY ) ;
|
|
a_ErrorObject.SetMessage ( L"Unable to allocate class string" ) ;
|
|
}
|
|
}
|
|
else if ( _wcsicmp ( m_ParsedObjectPath->m_pClass , ASSOC_USERRECORD ) == 0 )
|
|
{
|
|
BSTR bstCls = SysAllocString( m_ParsedObjectPath->m_pClass ) ;
|
|
if ( bstCls )
|
|
{
|
|
t_Status = GetClassObject ( bstCls ) ;
|
|
SysFreeString ( bstCls ) ;
|
|
|
|
if ( t_Status )
|
|
{
|
|
t_Status = Dispatch_UserRecord ( a_ErrorObject ) ;
|
|
|
|
if ( t_Status )
|
|
{
|
|
m_State = WBEM_TASKSTATE_ASYNCHRONOUSCOMPLETE ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bClass = FALSE ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_OUT_OF_MEMORY ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_OUT_OF_MEMORY ) ;
|
|
a_ErrorObject.SetMessage ( L"Unable to allocate class string" ) ;
|
|
}
|
|
}
|
|
else if ( _wcsicmp ( m_ParsedObjectPath->m_pClass , ASSOC_COMPRECORD ) == 0 )
|
|
{
|
|
t_Status = GetClassObject ( m_ParsedObjectPath->m_pClass ) ;
|
|
|
|
if ( t_Status )
|
|
{
|
|
t_Status = Dispatch_ComputerRecord ( a_ErrorObject ) ;
|
|
|
|
if ( t_Status )
|
|
{
|
|
m_State = WBEM_TASKSTATE_ASYNCHRONOUSCOMPLETE ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bClass = FALSE ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_CLASS ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_FAILED ) ;
|
|
a_ErrorObject.SetMessage ( L"Dynamic NT Eventlog Provider does not support this class" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: GetObject:Dynamic NT Eventlog Provider does not support this class %s\r\n",
|
|
m_ParsedObjectPath->m_pClass
|
|
) ;
|
|
)
|
|
|
|
}
|
|
|
|
if (!bClass)
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_CLASS ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_FAILED ) ;
|
|
a_ErrorObject.SetMessage ( L"Class definition not found" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: GetObject:Class definition not found\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_CLASS ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Unable to parse object path" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: GetObject:Dynamic NT Eventlog Provider does not support this class %s\r\n",
|
|
m_ObjectPath
|
|
) ;
|
|
)
|
|
}
|
|
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"leaving GetObjectAsyncEventObject :: GetObject with %lx\r\n",
|
|
t_Status
|
|
) ;
|
|
)
|
|
|
|
return t_Status ;
|
|
}
|
|
|
|
BOOL GetObjectAsyncEventObject :: Dispatch_Record ( WbemProvErrorObject &a_ErrorObject )
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_Record\r\n"
|
|
) ;
|
|
)
|
|
if (m_ParsedObjectPath->m_dwNumKeys != 2)
|
|
{
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Object path has incorrect number of keys." ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_Record: Wrong number of key values\r\n"
|
|
) ;
|
|
)
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL t_Status ;
|
|
|
|
KeyRef *t_Key1 = m_ParsedObjectPath->m_paKeys [ 0 ] ;
|
|
KeyRef *t_Key2 = m_ParsedObjectPath->m_paKeys [ 1 ] ;
|
|
if ( t_Key1 && t_Key2 )
|
|
{
|
|
if ( _wcsicmp ( t_Key1->m_pName , LOGFILE_PROP ) == 0 )
|
|
{
|
|
if ( _wcsicmp ( t_Key2->m_pName , RECORD_PROP ) == 0 )
|
|
{
|
|
if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_I4 ) )
|
|
{
|
|
t_Status = Get_Record ( a_ErrorObject , t_Key1 , t_Key2 ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect type" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_Record: Key value(s) have incorrect type\r\n"
|
|
) ;
|
|
)
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_Record: Key value(s) have incorrect name\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else if ( _wcsicmp ( t_Key2->m_pName , LOGFILE_PROP ) == 0 )
|
|
{
|
|
if ( _wcsicmp ( t_Key1->m_pName , RECORD_PROP ) == 0 )
|
|
{
|
|
if ( ( t_Key1->m_vValue.vt == VT_I4 ) && ( t_Key2->m_vValue.vt == VT_BSTR ) )
|
|
{
|
|
t_Status = Get_Record ( a_ErrorObject , t_Key2 , t_Key1 ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect type" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_Record: Key value(s) have incorrect type\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_Record: Key value(s) have incorrect name\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_Record: Key value(s) have incorrect name\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get key values" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_Record: Failed to get key values\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"leaving GetObjectAsyncEventObject :: Dispatch_Record with %lx\r\n",
|
|
t_Status
|
|
) ;
|
|
)
|
|
|
|
return t_Status ;
|
|
}
|
|
|
|
BOOL GetObjectAsyncEventObject :: Dispatch_EventLog ( WbemProvErrorObject &a_ErrorObject )
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_EventLog\r\n"
|
|
) ;
|
|
)
|
|
if (m_ParsedObjectPath->m_dwNumKeys != 1)
|
|
{
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Object path has incorrect number of keys." ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_EventLog: Wrong number of key values\r\n"
|
|
) ;
|
|
)
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL t_Status ;
|
|
|
|
KeyRef *t_Key1 = m_ParsedObjectPath->m_paKeys [ 0 ] ;
|
|
if ( t_Key1 )
|
|
{
|
|
if ((t_Key1->m_pName == NULL) || _wcsicmp ( t_Key1->m_pName , PROP_NAME ) == 0 )
|
|
{
|
|
if ( t_Key1->m_vValue.vt == VT_BSTR )
|
|
{
|
|
t_Status = Get_EventLog ( a_ErrorObject , t_Key1 ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value has incorrect type" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_EventLog:Key value has incorrect type\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value has incorrect name" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_EventLog:Key value has incorrect name\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get key value" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_EventLog:Failed to get key value\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_EventLog:return %lx\r\n",
|
|
t_Status
|
|
) ;
|
|
)
|
|
|
|
return t_Status ;
|
|
}
|
|
|
|
BOOL GetObjectAsyncEventObject :: Dispatch_LogRecord ( WbemProvErrorObject &a_ErrorObject )
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_LogRecord\r\n"
|
|
) ;
|
|
)
|
|
if (m_ParsedObjectPath->m_dwNumKeys != 2)
|
|
{
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Object path has incorrect number of keys." ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_LogRecord: Wrong number of key values\r\n"
|
|
) ;
|
|
)
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
BOOL t_Status ;
|
|
|
|
KeyRef *t_Key1 = m_ParsedObjectPath->m_paKeys [ 0 ] ;
|
|
KeyRef *t_Key2 = m_ParsedObjectPath->m_paKeys [ 1 ] ;
|
|
if ( t_Key1 && t_Key2 )
|
|
{
|
|
if ( _wcsicmp ( t_Key1->m_pName , REF_LOG ) == 0 )
|
|
{
|
|
if ( _wcsicmp ( t_Key2->m_pName , REF_REC ) == 0 )
|
|
{
|
|
if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) )
|
|
{
|
|
t_Status = Get_LogRecord ( a_ErrorObject , t_Key1 , t_Key2 ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect type" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_LogRecord:Key value(s) have incorrect type\r\n"
|
|
) ;
|
|
)
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_LogRecord:Key value(s) have incorrect name\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else if ( _wcsicmp ( t_Key2->m_pName , REF_LOG ) == 0 )
|
|
{
|
|
if ( _wcsicmp ( t_Key1->m_pName , REF_REC ) == 0 )
|
|
{
|
|
if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) )
|
|
{
|
|
t_Status = Get_LogRecord ( a_ErrorObject , t_Key2 , t_Key1 ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect type" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_LogRecord:Key value(s) have incorrect type\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_LogRecord:Key value(s) have incorrect name\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_LogRecord:Key value(s) have incorrect name\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get key values" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_LogRecord:Failed to get key values\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_LogRecord:returning with %lx\r\n",
|
|
t_Status
|
|
) ;
|
|
)
|
|
return t_Status ;
|
|
}
|
|
|
|
BOOL GetObjectAsyncEventObject :: Dispatch_UserRecord ( WbemProvErrorObject &a_ErrorObject )
|
|
{
|
|
if (m_ParsedObjectPath->m_dwNumKeys != 2)
|
|
{
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Object path has incorrect number of keys." ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_UserRecord: Wrong number of key values\r\n"
|
|
) ;
|
|
)
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL t_Status ;
|
|
|
|
KeyRef *t_Key1 = m_ParsedObjectPath->m_paKeys [ 0 ] ;
|
|
KeyRef *t_Key2 = m_ParsedObjectPath->m_paKeys [ 1 ] ;
|
|
if ( t_Key1 && t_Key2 )
|
|
{
|
|
if ( _wcsicmp ( t_Key1->m_pName , REF_USER ) == 0 )
|
|
{
|
|
if ( _wcsicmp ( t_Key2->m_pName , REF_REC ) == 0 )
|
|
{
|
|
if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) )
|
|
{
|
|
t_Status = Get_UserRecord ( a_ErrorObject , t_Key1 , t_Key2 ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect type" ) ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
}
|
|
}
|
|
else if ( _wcsicmp ( t_Key2->m_pName , REF_USER ) == 0 )
|
|
{
|
|
if ( _wcsicmp ( t_Key1->m_pName , REF_REC ) == 0 )
|
|
{
|
|
if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) )
|
|
{
|
|
t_Status = Get_UserRecord ( a_ErrorObject , t_Key2 , t_Key1 ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect type" ) ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get key values" ) ;
|
|
}
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_LogRecord:returning with %lx\r\n",
|
|
t_Status
|
|
) ;
|
|
)
|
|
|
|
return t_Status ;
|
|
}
|
|
|
|
BOOL GetObjectAsyncEventObject :: Dispatch_ComputerRecord ( WbemProvErrorObject &a_ErrorObject )
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_ComputerRecord\r\n"
|
|
) ;
|
|
)
|
|
|
|
if (m_ParsedObjectPath->m_dwNumKeys != 2)
|
|
{
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Object path has incorrect number of keys." ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_ComputerRecord: Wrong number of key values\r\n"
|
|
) ;
|
|
)
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL t_Status ;
|
|
|
|
KeyRef *t_Key1 = m_ParsedObjectPath->m_paKeys [ 0 ] ;
|
|
KeyRef *t_Key2 = m_ParsedObjectPath->m_paKeys [ 1 ] ;
|
|
if ( t_Key1 && t_Key2 )
|
|
{
|
|
if ( _wcsicmp ( t_Key1->m_pName , REF_COMP ) == 0 )
|
|
{
|
|
if ( _wcsicmp ( t_Key2->m_pName , REF_REC ) == 0 )
|
|
{
|
|
if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) )
|
|
{
|
|
t_Status = Get_ComputerRecord ( a_ErrorObject , t_Key1 , t_Key2 ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect type" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_ComputerRecord:Key value(s) have incorrect type\r\n"
|
|
) ;
|
|
)
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_ComputerRecord:Key value(s) have incorrect name\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else if ( _wcsicmp ( t_Key2->m_pName , REF_COMP ) == 0 )
|
|
{
|
|
if ( _wcsicmp ( t_Key1->m_pName , REF_REC ) == 0 )
|
|
{
|
|
if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) )
|
|
{
|
|
t_Status = Get_ComputerRecord ( a_ErrorObject , t_Key2 , t_Key1 ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect type" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_ComputerRecord:Key value(s) have incorrect type\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_ComputerRecord:Key value(s) have incorrect name\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Key value(s) have incorrect name" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_ComputerRecord:Key value(s) have incorrect name\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Status = FALSE ;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get key values" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_ComputerRecord:Failed to get key values\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_ComputerRecord:returning with %lx\r\n",
|
|
t_Status
|
|
) ;
|
|
)
|
|
|
|
return t_Status ;
|
|
}
|
|
|
|
|
|
BOOL GetObjectAsyncEventObject :: Get_LogRecord ( WbemProvErrorObject &a_ErrorObject ,
|
|
KeyRef *a_LogKey , KeyRef *a_RecordKey )
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_LogRecord\r\n"
|
|
) ;
|
|
)
|
|
|
|
BOOL retVal = TRUE;
|
|
GetObjectAsyncEventObject *t_getRec = new GetObjectAsyncEventObject (
|
|
m_Provider , a_RecordKey->m_vValue.bstrVal ,
|
|
0 , m_NotificationHandler , m_Ctx, FALSE ) ;
|
|
|
|
try
|
|
{
|
|
if (!t_getRec->GetObject(t_getRec->m_ErrorObject))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to verify given eventlog record object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_LogRecord:Failed to verify given eventlog record object\r\n"
|
|
) ;
|
|
)
|
|
|
|
}
|
|
else
|
|
{
|
|
GetObjectAsyncEventObject *t_getLog = new GetObjectAsyncEventObject (
|
|
m_Provider , a_LogKey->m_vValue.bstrVal ,
|
|
0 , m_NotificationHandler , m_Ctx, FALSE ) ;
|
|
try
|
|
{
|
|
if (!t_getLog->GetObject(t_getLog->m_ErrorObject))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to verify given eventlog file object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_LogRecord:Failed to verify given eventlog file object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else
|
|
{
|
|
//check the association
|
|
VARIANT vLog;
|
|
VariantInit(&vLog);
|
|
HRESULT result = t_getLog->m_Out->Get(PROP_LOGNAME, 0, &vLog, NULL, NULL);
|
|
|
|
if ((FAILED(result)) || (vLog.vt != VT_BSTR))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_FAILED ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get logfile property from eventlog file object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_LogRecord:Failed to get logfile property from eventlog file object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else
|
|
{
|
|
VARIANT vRec;
|
|
VariantInit(&vRec);
|
|
result = t_getRec->m_Out->Get(LOGFILE_PROP, 0, &vRec, NULL, NULL);
|
|
|
|
if ((FAILED(result)) || (vRec.vt != VT_BSTR))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_FAILED ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get logfile property from eventlog record object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_LogRecord:Failed to get logfile property from eventlog record object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else if (_wcsicmp(vRec.bstrVal, vLog.bstrVal) == 0)
|
|
{
|
|
retVal = GenerateAssocInstance(a_ErrorObject, a_RecordKey->m_vValue.bstrVal,
|
|
a_LogKey->m_vValue.bstrVal, REF_REC, REF_LOG,
|
|
m_ClassObject, m_NotificationHandler, NULL);
|
|
}
|
|
else
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
a_ErrorObject.SetMessage ( L"Both objects exist but are not associated" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_LogRecord:Both objects exist but are not associated\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
|
|
VariantClear(&vRec);
|
|
}
|
|
|
|
VariantClear(&vLog);
|
|
}
|
|
}
|
|
catch(...)
|
|
{
|
|
delete t_getLog;
|
|
throw;
|
|
}
|
|
|
|
delete t_getLog;
|
|
}
|
|
}
|
|
catch (...)
|
|
{
|
|
delete t_getRec;
|
|
throw;
|
|
}
|
|
|
|
delete t_getRec;
|
|
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Dispatch_LogRecord:returning with %lx\r\n",
|
|
retVal
|
|
) ;
|
|
)
|
|
|
|
return retVal;
|
|
}
|
|
|
|
BOOL GetObjectAsyncEventObject :: Get_UserRecord ( WbemProvErrorObject &a_ErrorObject ,
|
|
KeyRef *a_UserKey , KeyRef *a_RecordKey )
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_UserRecord\r\n"
|
|
) ;
|
|
)
|
|
|
|
BOOL retVal = TRUE;
|
|
GetObjectAsyncEventObject *t_getRec = new GetObjectAsyncEventObject (
|
|
m_Provider , a_RecordKey->m_vValue.bstrVal ,
|
|
0 , m_NotificationHandler , m_Ctx, FALSE) ;
|
|
|
|
try
|
|
{
|
|
if (!t_getRec->GetObject(t_getRec->m_ErrorObject))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to verify given eventlog record object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_UserRecord:Failed to verify given eventlog record object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else
|
|
{
|
|
IWbemClassObject* userObj = NULL;
|
|
IWbemServices *t_Server = m_Provider->GetServer() ;
|
|
HRESULT result = t_Server->GetObject(a_UserKey->m_vValue.bstrVal, 0, m_Ctx, &userObj, NULL);
|
|
t_Server->Release();
|
|
|
|
if (FAILED(result))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to verify given user object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_UserRecord:Failed to verify given user object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else
|
|
{
|
|
//check the association
|
|
VARIANT vUserN;
|
|
VariantInit(&vUserN);
|
|
result = userObj->Get(PROP_NAME, 0, &vUserN, NULL, NULL);
|
|
|
|
if ((FAILED(result)) || (vUserN.vt != VT_BSTR))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_FAILED ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get name property from eventlog record object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_UserRecord:Failed to get name property from eventlog record object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else
|
|
{
|
|
VARIANT vUserD;
|
|
VariantInit(&vUserD);
|
|
result = userObj->Get(PROP_DOMAIN, 0, &vUserD, NULL, NULL);
|
|
|
|
if ((FAILED(result)) || (vUserD.vt != VT_BSTR))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_FAILED ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get name property from user object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_UserRecord:Failed to get name property from user object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else
|
|
{
|
|
wchar_t userStr[1024];
|
|
if ( SUCCEEDED ( result = StringCchCopyW ( userStr, 1024, vUserD.bstrVal ) ) )
|
|
{
|
|
if ( SUCCEEDED ( result = StringCchCatW ( userStr, 1024, L"\\" ) ) )
|
|
{
|
|
if ( SUCCEEDED ( result = StringCchCatW ( userStr, 1024, vUserN.bstrVal ) ) )
|
|
{
|
|
VARIANT vRec;
|
|
VariantInit(&vRec);
|
|
result = t_getRec->m_Out->Get(USER_PROP, 0, &vRec, NULL, NULL);
|
|
|
|
if ((FAILED(result)) || (vRec.vt != VT_BSTR))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_FAILED ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get user property from eventlog record object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_UserRecord:Failed to get user property from eventlog record object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else if (_wcsicmp(vRec.bstrVal, userStr) == 0)
|
|
{
|
|
retVal = GenerateAssocInstance(a_ErrorObject, a_RecordKey->m_vValue.bstrVal,
|
|
a_UserKey->m_vValue.bstrVal, REF_REC, REF_USER,
|
|
m_ClassObject, m_NotificationHandler, NULL);
|
|
}
|
|
else
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
a_ErrorObject.SetMessage ( L"Both objects exist but are not associated" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_UserRecord:Both objects exist but are not associated\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
|
|
VariantClear(&vRec);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
VariantClear(&vUserD);
|
|
}
|
|
|
|
VariantClear(&vUserN);
|
|
userObj->Release();
|
|
}
|
|
}
|
|
}
|
|
catch(...)
|
|
{
|
|
delete t_getRec;
|
|
throw;
|
|
}
|
|
|
|
delete t_getRec;
|
|
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_UserRecord:returning with %lx\r\n",
|
|
retVal
|
|
) ;
|
|
)
|
|
|
|
return retVal;
|
|
}
|
|
|
|
BOOL GetObjectAsyncEventObject :: Get_ComputerRecord ( WbemProvErrorObject &a_ErrorObject ,
|
|
KeyRef *a_CompKey , KeyRef *a_RecordKey )
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_ComputerRecord\r\n"
|
|
) ;
|
|
)
|
|
|
|
BOOL retVal = TRUE;
|
|
GetObjectAsyncEventObject *t_getRec = new GetObjectAsyncEventObject (
|
|
m_Provider , a_RecordKey->m_vValue.bstrVal ,
|
|
0 , m_NotificationHandler , m_Ctx, FALSE ) ;
|
|
|
|
try
|
|
{
|
|
if (!t_getRec->GetObject(t_getRec->m_ErrorObject))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to verify given eventlog record object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_ComputerRecord:Failed to verify given eventlog record object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else
|
|
{
|
|
IWbemClassObject* compObj = NULL;
|
|
IWbemServices *t_Server = m_Provider->GetServer() ;
|
|
HRESULT result = t_Server->GetObject(a_CompKey->m_vValue.bstrVal, 0, m_Ctx, &compObj, NULL);
|
|
t_Server->Release();
|
|
|
|
if (FAILED(result))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to verify given computer object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_ComputerRecord:Failed to verify given computer object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else
|
|
{
|
|
//check the association
|
|
VARIANT vComp;
|
|
VariantInit(&vComp);
|
|
result = compObj->Get(PROP_NAME, 0, &vComp, NULL, NULL);
|
|
|
|
if ((FAILED(result)) || (vComp.vt != VT_BSTR))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_FAILED ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get Name property from computer object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_ComputerRecord:Failed to get Name property from computer object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else
|
|
{
|
|
VARIANT vRec;
|
|
VariantInit(&vRec);
|
|
result = t_getRec->m_Out->Get(COMPUTER_PROP, 0, &vRec, NULL, NULL);
|
|
|
|
if ((FAILED(result)) || (vRec.vt != VT_BSTR))
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_FAILED ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to get computer property from eventlog record object" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_ComputerRecord:Failed to get computer property from eventlog record object\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
else if (_wcsicmp(vRec.bstrVal, vComp.bstrVal) == 0)
|
|
{
|
|
retVal = GenerateAssocInstance(a_ErrorObject, a_RecordKey->m_vValue.bstrVal,
|
|
a_CompKey->m_vValue.bstrVal, REF_REC, REF_COMP,
|
|
m_ClassObject, m_NotificationHandler, NULL);
|
|
}
|
|
else
|
|
{
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
a_ErrorObject.SetMessage ( L"Both objects exist but are not associated" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_ComputerRecord:Both objects exist but are not associated\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
|
|
VariantClear(&vRec);
|
|
}
|
|
|
|
VariantClear(&vComp);
|
|
compObj->Release();
|
|
}
|
|
}
|
|
}
|
|
catch (...)
|
|
{
|
|
delete t_getRec;
|
|
throw;
|
|
}
|
|
|
|
delete t_getRec;
|
|
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_ComputerRecord:returning with %lx\r\n",
|
|
retVal
|
|
) ;
|
|
)
|
|
return retVal;
|
|
}
|
|
|
|
BOOL GetObjectAsyncEventObject :: Get_EventLog ( WbemProvErrorObject &a_ErrorObject , KeyRef *a_FileKey)
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_EventLog\r\n"
|
|
) ;
|
|
)
|
|
|
|
BOOL retVal = FALSE;
|
|
CStringW log = CEventLogFile::GetLogName((const wchar_t*)a_FileKey->m_vValue.bstrVal);
|
|
|
|
if (log.IsEmpty())
|
|
{
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to translate key to instance of logfile." ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_EventLog: Failed to get instance of logfile named %s\r\n",
|
|
(const wchar_t*)a_FileKey->m_vValue.bstrVal
|
|
) ;
|
|
)
|
|
}
|
|
else
|
|
{
|
|
CEventlogFileAttributes evtlog(log);
|
|
|
|
IWbemClassObject* pInst = NULL;
|
|
|
|
if (evtlog.GenerateInstance(m_ClassObject, m_AClassObject, &pInst))
|
|
{
|
|
if (m_bIndicate)
|
|
{
|
|
m_NotificationHandler->Indicate ( 1 , & pInst ) ;
|
|
pInst->Release();
|
|
}
|
|
else
|
|
{
|
|
m_Out = pInst;
|
|
}
|
|
|
|
retVal = TRUE;
|
|
}
|
|
else
|
|
{
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_INVALID_PARAMETER ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_FAILED ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed while generating instance of logfile." ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_EventLog: Failed to generate instance of logfile named %s\r\n",
|
|
log
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_EventLog:returning with %lx\r\n",
|
|
retVal
|
|
) ;
|
|
)
|
|
return retVal;
|
|
}
|
|
|
|
|
|
BOOL GetObjectAsyncEventObject :: Get_Record ( WbemProvErrorObject &a_ErrorObject , KeyRef *a_FileKey , KeyRef *a_RecordKey )
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_Record\r\n"
|
|
) ;
|
|
)
|
|
|
|
BOOL retVal = TRUE;
|
|
CEventLogFile evtlog(a_FileKey->m_vValue.bstrVal, TRUE);
|
|
|
|
if (!evtlog.IsValid())
|
|
{
|
|
//failed to find log i.e. no such record??
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
|
|
if ((evtlog.GetReason() == ERROR_ACCESS_DENIED) || (evtlog.GetReason() == ERROR_PRIVILEGE_NOT_HELD))
|
|
{
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_ACCESS_DENIED ) ;
|
|
a_ErrorObject.SetPrivilegeFailed();
|
|
a_ErrorObject.SetSecurityPrivRequired();
|
|
a_ErrorObject.SetSecurityPrivFailed();
|
|
}
|
|
else
|
|
{
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
}
|
|
|
|
a_ErrorObject.SetMessage ( L"Failed to find the logfile" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_Record:Failed to find the logfile %s\r\n",
|
|
a_FileKey->m_vValue.bstrVal
|
|
) ;
|
|
)
|
|
}
|
|
else
|
|
{
|
|
if (0 == evtlog.ReadRecord(a_RecordKey->m_vValue.lVal))
|
|
{
|
|
EVENTLOGRECORD* pEvt = (EVENTLOGRECORD*) evtlog.GetBuffer();
|
|
CEventlogRecord evtRec(a_FileKey->m_vValue.bstrVal, pEvt, NULL, m_ClassObject, m_AClassObject);
|
|
IWbemClassObject* pInst = NULL;
|
|
|
|
if (evtRec.GenerateInstance(&pInst))
|
|
{
|
|
if (m_bIndicate)
|
|
{
|
|
m_NotificationHandler->Indicate ( 1 , & pInst ) ;
|
|
pInst->Release();
|
|
}
|
|
else
|
|
{
|
|
m_Out = pInst;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//failed to create record
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_FAILED ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to create instance from Eventlog data" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_Record:Failed to create instance from Eventlog data\r\n"
|
|
) ;
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
//record not found i.e. no such record??
|
|
retVal = FALSE;
|
|
a_ErrorObject.SetStatus ( WBEM_PROV_E_UNEXPECTED ) ;
|
|
a_ErrorObject.SetWbemStatus ( WBEM_E_NOT_FOUND ) ;
|
|
a_ErrorObject.SetMessage ( L"Failed to find the record in the logfile" ) ;
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_Record:Failed to find the record in the logfile\r\n"
|
|
) ;
|
|
)
|
|
}
|
|
}
|
|
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: Get_Record:returning with %lx\r\n",
|
|
retVal
|
|
) ;
|
|
)
|
|
return retVal;
|
|
}
|
|
|
|
GetObjectAsyncEventObject :: GetObjectAsyncEventObject (
|
|
|
|
CImpNTEvtProv *a_Provider ,
|
|
wchar_t* a_ObjectPath ,
|
|
ULONG a_OperationFlag ,
|
|
IWbemObjectSink *a_NotificationHandler ,
|
|
IWbemContext *a_Ctx ,
|
|
BOOL a_bIndicate
|
|
|
|
) : WbemTaskObject ( a_Provider , a_NotificationHandler , a_OperationFlag , a_Ctx ) ,
|
|
m_Class ( NULL ) , m_bIndicate ( a_bIndicate ) , m_Out ( NULL ) ,
|
|
m_ParsedObjectPath ( NULL )
|
|
{
|
|
m_ObjectPath = UnicodeStringDuplicate ( a_ObjectPath ) ;
|
|
}
|
|
|
|
GetObjectAsyncEventObject :: ~GetObjectAsyncEventObject ()
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: ~GetObjectAsyncEventObject: Object path (%s) SetStatus with %lx\r\n",
|
|
m_ObjectPath, m_ErrorObject.GetWbemStatus ()
|
|
) ;
|
|
)
|
|
|
|
delete [] m_ObjectPath ;
|
|
delete m_ParsedObjectPath ;
|
|
|
|
// Get Status object
|
|
if (m_bIndicate)
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: ~GetObjectAsyncEventObject: Indicating Object path (%s) SetStatus with %lx\r\n",
|
|
m_ObjectPath, m_ErrorObject.GetWbemStatus ()
|
|
) ;
|
|
)
|
|
IWbemClassObject *t_NotifyStatus = NULL ;
|
|
BOOL t_Status = TRUE;
|
|
|
|
if (WBEM_NO_ERROR != m_ErrorObject.GetWbemStatus ())
|
|
{
|
|
t_Status = GetExtendedNotifyStatusObject ( &t_NotifyStatus ) ;
|
|
}
|
|
|
|
if ( t_Status )
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: ~GetObjectAsyncEventObject: Really Indicating Object path (%s) SetStatus with %lx\r\n",
|
|
m_ObjectPath, m_ErrorObject.GetWbemStatus ()
|
|
) ;
|
|
)
|
|
HRESULT t_Result = m_NotificationHandler->SetStatus ( 0 , m_ErrorObject.GetWbemStatus () , 0 , t_NotifyStatus ) ;
|
|
|
|
if (t_NotifyStatus)
|
|
{
|
|
t_NotifyStatus->Release () ;
|
|
}
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: ~GetObjectAsyncEventObject:Indicated status, released objectsink\r\n"
|
|
) ;
|
|
)
|
|
|
|
}
|
|
else
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: ~GetObjectAsyncEventObject: Failed to get Status object Object path (%s)\r\n",
|
|
m_ObjectPath
|
|
) ;
|
|
)
|
|
HRESULT t_Result = m_NotificationHandler->SetStatus ( 0 , m_ErrorObject.GetWbemStatus () , 0 , NULL ) ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DebugOut(
|
|
CNTEventProvider::g_NTEvtDebugLog->WriteFileAndLine (
|
|
|
|
_T(__FILE__),__LINE__,
|
|
L"GetObjectAsyncEventObject :: ~GetObjectAsyncEventObject:Released object without indicating it\r\n"
|
|
) ;
|
|
)
|
|
|
|
if (m_Out != NULL)
|
|
{
|
|
m_Out->Release();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void GetObjectAsyncEventObject :: Process ()
|
|
{
|
|
GetObject ( m_ErrorObject ) ;
|
|
}
|
|
|
|
|
|
|