4816 lines
		
	
	
		
			102 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			4816 lines
		
	
	
		
			102 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*++
 | 
						|
 | 
						|
Copyright (C) 1996-2001 Microsoft Corporation
 | 
						|
 | 
						|
Module Name:
 | 
						|
 | 
						|
	XXXX
 | 
						|
 | 
						|
Abstract:
 | 
						|
 | 
						|
 | 
						|
History:
 | 
						|
 | 
						|
--*/
 | 
						|
 | 
						|
#include <precomp.h>
 | 
						|
#include "precomp.h"
 | 
						|
 | 
						|
#include <objbase.h>
 | 
						|
#include <wbemint.h>
 | 
						|
 | 
						|
#include <mstask.h>
 | 
						|
#include <msterr.h>
 | 
						|
 | 
						|
#include "CGlobals.h"
 | 
						|
#include "Globals.h"
 | 
						|
#include "HelperFuncs.h"
 | 
						|
#include "DateTime.h"
 | 
						|
#include "Task.h"
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
CTask_IWbemServices :: CTask_IWbemServices (
 | 
						|
 | 
						|
	 WmiAllocator &a_Allocator 
 | 
						|
 | 
						|
) : m_ReferenceCount ( 0 ) , 
 | 
						|
	m_Allocator ( a_Allocator ) ,
 | 
						|
	m_User ( NULL ) ,
 | 
						|
	m_Locale ( NULL ) ,
 | 
						|
	m_Namespace ( NULL ) ,
 | 
						|
	m_CoreService ( NULL ) ,
 | 
						|
	m_Win32_Task_Object ( NULL ) ,
 | 
						|
	m_Win32_Once_Object ( NULL ) ,
 | 
						|
	m_Win32_WeeklyTrigger_Object ( NULL ) ,
 | 
						|
	m_Win32_DailyTrigger_Object ( NULL ) ,
 | 
						|
	m_Win32_MonthlyDateTrigger_Object ( NULL ) ,
 | 
						|
	m_Win32_MonthlyDayOfWeekTrigger_Object ( NULL ) ,
 | 
						|
	m_Win32_OnIdle_Object ( NULL ) ,
 | 
						|
	m_Win32_AtSystemStart_Object ( NULL ) ,
 | 
						|
	m_Win32_AtLogon_Object ( NULL ) ,
 | 
						|
	m_Win32_ScheduledWorkItemTrigger_Object ( NULL )
 | 
						|
{
 | 
						|
	InitializeCriticalSection ( & m_CriticalSection ) ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
CTask_IWbemServices :: ~CTask_IWbemServices ()
 | 
						|
{
 | 
						|
	DeleteCriticalSection ( & m_CriticalSection ) ;
 | 
						|
 | 
						|
	if ( m_User ) 
 | 
						|
	{
 | 
						|
		SysFreeString ( m_User ) ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Locale ) 
 | 
						|
	{
 | 
						|
		SysFreeString ( m_Locale ) ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Namespace ) 
 | 
						|
	{
 | 
						|
		SysFreeString ( m_Namespace ) ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_CoreService ) 
 | 
						|
	{
 | 
						|
		m_CoreService->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Win32_Task_Object ) 
 | 
						|
	{
 | 
						|
		m_Win32_Task_Object->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Win32_DailyTrigger_Object )
 | 
						|
	{
 | 
						|
		m_Win32_DailyTrigger_Object->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Win32_Once_Object )
 | 
						|
	{
 | 
						|
		m_Win32_Once_Object->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Win32_WeeklyTrigger_Object )	
 | 
						|
	{
 | 
						|
		m_Win32_WeeklyTrigger_Object->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Win32_MonthlyDateTrigger_Object )
 | 
						|
	{
 | 
						|
		m_Win32_MonthlyDateTrigger_Object->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Win32_MonthlyDayOfWeekTrigger_Object )
 | 
						|
	{
 | 
						|
		m_Win32_MonthlyDayOfWeekTrigger_Object->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Win32_OnIdle_Object )
 | 
						|
	{
 | 
						|
		m_Win32_OnIdle_Object->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Win32_AtSystemStart_Object )
 | 
						|
	{
 | 
						|
		m_Win32_AtSystemStart_Object->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Win32_AtLogon_Object )
 | 
						|
	{
 | 
						|
		m_Win32_AtLogon_Object->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( m_Win32_ScheduledWorkItemTrigger_Object )
 | 
						|
	{
 | 
						|
		m_Win32_ScheduledWorkItemTrigger_Object->Release () ;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
STDMETHODIMP_(ULONG) CTask_IWbemServices :: AddRef ( void )
 | 
						|
{
 | 
						|
	return InterlockedIncrement ( & m_ReferenceCount ) ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
STDMETHODIMP_(ULONG) CTask_IWbemServices :: Release ( void )
 | 
						|
{
 | 
						|
	LONG t_Reference ;
 | 
						|
	if ( ( t_Reference = InterlockedDecrement ( & m_ReferenceCount ) ) == 0 )
 | 
						|
	{
 | 
						|
		delete this ;
 | 
						|
		return 0 ;
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		return t_Reference ;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
STDMETHODIMP CTask_IWbemServices :: QueryInterface (
 | 
						|
 | 
						|
	REFIID iid , 
 | 
						|
	LPVOID FAR *iplpv 
 | 
						|
) 
 | 
						|
{
 | 
						|
	*iplpv = NULL ;
 | 
						|
 | 
						|
	if ( iid == IID_IUnknown )
 | 
						|
	{
 | 
						|
		*iplpv = ( LPVOID ) this ;
 | 
						|
	}
 | 
						|
	else if ( iid == IID_IWbemServices )
 | 
						|
	{
 | 
						|
		*iplpv = ( LPVOID ) ( IWbemServices * ) this ;		
 | 
						|
	}	
 | 
						|
	else if ( iid == IID_IWbemProviderInit )
 | 
						|
	{
 | 
						|
		*iplpv = ( LPVOID ) ( IWbemProviderInit * ) this ;		
 | 
						|
	}	
 | 
						|
	else if ( iid == IID_IWbemShutdown )
 | 
						|
	{
 | 
						|
		*iplpv = ( LPVOID ) ( IWbemShutdown * ) this ;		
 | 
						|
	}	
 | 
						|
 | 
						|
	if ( *iplpv )
 | 
						|
	{
 | 
						|
		( ( LPUNKNOWN ) *iplpv )->AddRef () ;
 | 
						|
 | 
						|
		return ResultFromScode ( S_OK ) ;
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		return ResultFromScode ( E_NOINTERFACE ) ;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices::OpenNamespace ( 
 | 
						|
 | 
						|
	const BSTR ObjectPath, 
 | 
						|
	long lFlags, 
 | 
						|
	IWbemContext FAR* pCtx,
 | 
						|
	IWbemServices FAR* FAR* pNewContext, 
 | 
						|
	IWbemCallResult FAR* FAR* ppErrorObject
 | 
						|
)
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: CancelAsyncCall ( 
 | 
						|
		
 | 
						|
	IWbemObjectSink *pSink
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = WBEM_E_NOT_AVAILABLE ;
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: QueryObjectSink ( 
 | 
						|
 | 
						|
	long lFlags,		
 | 
						|
	IWbemObjectSink FAR* FAR* ppResponseHandler
 | 
						|
) 
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: GetObject ( 
 | 
						|
		
 | 
						|
	const BSTR ObjectPath,
 | 
						|
    long lFlags,
 | 
						|
    IWbemContext FAR *pCtx,
 | 
						|
    IWbemClassObject FAR* FAR *ppObject,
 | 
						|
    IWbemCallResult FAR* FAR *ppCallResult
 | 
						|
)
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: GetObjectAsync_Win32_Task (
 | 
						|
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemObjectSink FAR *a_Sink ,
 | 
						|
	IWbemPath *a_Path 
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	wchar_t *t_Key_Name = NULL ;
 | 
						|
 | 
						|
	IWbemPathKeyList *t_Keys = NULL ;
 | 
						|
 | 
						|
	t_Result = a_Path->GetKeyList (
 | 
						|
 | 
						|
		& t_Keys 
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		ULONG t_KeyCount = 0 ;
 | 
						|
		t_Result = t_Keys->GetCount (
 | 
						|
 | 
						|
			& t_KeyCount 
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			if ( t_KeyCount == 1 )
 | 
						|
			{
 | 
						|
				wchar_t t_Key [ 32 ] ; 
 | 
						|
				ULONG t_KeyLength = 32 ;
 | 
						|
				ULONG t_KeyValueLength = 0 ;
 | 
						|
				ULONG t_KeyType = 0 ;
 | 
						|
 | 
						|
				t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
					0 ,
 | 
						|
					0 ,
 | 
						|
					& t_KeyLength ,
 | 
						|
					t_Key ,
 | 
						|
					& t_KeyValueLength ,
 | 
						|
					NULL ,
 | 
						|
					& t_KeyType
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
				{
 | 
						|
					if ( t_KeyType == CIM_STRING )
 | 
						|
					{
 | 
						|
						t_Key_Name = new wchar_t [ t_KeyValueLength ] ;
 | 
						|
						if ( t_Key_Name )
 | 
						|
						{
 | 
						|
							t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
								0 ,
 | 
						|
								0 ,
 | 
						|
								& t_KeyLength ,
 | 
						|
								t_Key ,
 | 
						|
								& t_KeyValueLength ,
 | 
						|
								t_Key_Name ,
 | 
						|
								& t_KeyType
 | 
						|
							) ;
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							t_Result = WBEM_E_OUT_OF_MEMORY ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	BOOL t_Found = FALSE ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		ITaskScheduler *t_TaskScheduler = NULL ;
 | 
						|
 | 
						|
		t_Result = CoCreateInstance (
 | 
						|
 | 
						|
			CLSID_CTaskScheduler,
 | 
						|
			NULL,
 | 
						|
			CLSCTX_INPROC_SERVER,
 | 
						|
			IID_ITaskScheduler,
 | 
						|
			(void **) & t_TaskScheduler
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
		{
 | 
						|
			IEnumTasks *t_TaskEnumerator = NULL ;
 | 
						|
			t_Result = t_TaskScheduler->Enum ( & t_TaskEnumerator ) ;
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				wchar_t **t_Name = NULL ;
 | 
						|
				t_TaskEnumerator->Reset () ;
 | 
						|
				while ( ( t_Result = t_TaskEnumerator->Next ( 1 , & t_Name , NULL ) ) == S_OK ) 
 | 
						|
				{
 | 
						|
					if ( wcscmp ( t_Name [ 0 ] , t_Key_Name ) == 0 )
 | 
						|
					{
 | 
						|
						t_Found = TRUE ;
 | 
						|
 | 
						|
						IWbemClassObject *t_Instance = NULL ;
 | 
						|
						t_Result = a_ClassObject->SpawnInstance ( 
 | 
						|
 | 
						|
							0 , 
 | 
						|
							& t_Instance
 | 
						|
						) ;
 | 
						|
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							HRESULT t_Result = CommonAsync_Win32_Task_Load (
 | 
						|
 | 
						|
								t_TaskScheduler ,
 | 
						|
								t_Name [ 0 ] ,
 | 
						|
								t_Instance
 | 
						|
							) ;
 | 
						|
 | 
						|
							if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
							{
 | 
						|
								t_Result = a_Sink->Indicate ( 1 , & t_Instance ) ;
 | 
						|
							}
 | 
						|
 | 
						|
							t_Instance->Release () ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
 | 
						|
					CoTaskMemFree ( t_Name ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				if ( t_Result != S_FALSE )
 | 
						|
				{
 | 
						|
					t_Result = WBEM_E_FAILED ;
 | 
						|
				}
 | 
						|
 | 
						|
				t_TaskEnumerator->Release () ;
 | 
						|
			}
 | 
						|
 | 
						|
			t_TaskScheduler->Release () ;
 | 
						|
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if ( t_Key_Name )
 | 
						|
	{
 | 
						|
		delete [] t_Key_Name ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) && t_Found == FALSE )
 | 
						|
	{
 | 
						|
		t_Result = WBEM_E_NOT_FOUND ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: GetObjectAsync_Win32_Trigger (
 | 
						|
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemObjectSink FAR *a_Sink ,
 | 
						|
	IWbemPath *a_Path ,
 | 
						|
	TASK_TRIGGER_TYPE a_TriggerType 
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	wchar_t *t_Key_Name = NULL ;
 | 
						|
	WORD t_Key_TriggerIndex = 0 ;
 | 
						|
 | 
						|
	IWbemPathKeyList *t_Keys = NULL ;
 | 
						|
 | 
						|
	t_Result = a_Path->GetKeyList (
 | 
						|
 | 
						|
		& t_Keys 
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		ULONG t_KeyCount = 0 ;
 | 
						|
		t_Result = t_Keys->GetCount (
 | 
						|
 | 
						|
			& t_KeyCount 
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			if ( t_KeyCount == 2 )
 | 
						|
			{
 | 
						|
				wchar_t t_Key [ 32 ] ; 
 | 
						|
				ULONG t_KeyLength = 32 ;
 | 
						|
				ULONG t_KeyValueLength = 0 ;
 | 
						|
				ULONG t_KeyType = 0 ;
 | 
						|
 | 
						|
				t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
					0 ,
 | 
						|
					0 ,
 | 
						|
					& t_KeyLength ,
 | 
						|
					t_Key ,
 | 
						|
					& t_KeyValueLength ,
 | 
						|
					NULL ,
 | 
						|
					& t_KeyType
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
				{
 | 
						|
					if ( t_KeyType == CIM_SINT32 )
 | 
						|
					{
 | 
						|
						t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
							0 ,
 | 
						|
							0 ,
 | 
						|
							& t_KeyLength ,
 | 
						|
							t_Key ,
 | 
						|
							& t_KeyValueLength ,
 | 
						|
							& t_Key_TriggerIndex ,
 | 
						|
							& t_KeyType
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
				t_KeyLength = 32 ;
 | 
						|
				t_KeyValueLength = 0 ;
 | 
						|
				t_KeyType = 0 ;
 | 
						|
 | 
						|
				t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
					1 ,
 | 
						|
					0 ,
 | 
						|
					& t_KeyLength ,
 | 
						|
					t_Key ,
 | 
						|
					& t_KeyValueLength ,
 | 
						|
					NULL ,
 | 
						|
					& t_KeyType
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
				{
 | 
						|
					if ( t_KeyType == CIM_STRING )
 | 
						|
					{
 | 
						|
						t_Key_Name = new wchar_t [ t_KeyValueLength ] ;
 | 
						|
						if ( t_Key_Name )
 | 
						|
						{
 | 
						|
							t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
								1 ,
 | 
						|
								0 ,
 | 
						|
								& t_KeyLength ,
 | 
						|
								t_Key ,
 | 
						|
								& t_KeyValueLength ,
 | 
						|
								t_Key_Name ,
 | 
						|
								& t_KeyType
 | 
						|
							) ;
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							t_Result = WBEM_E_OUT_OF_MEMORY ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	BOOL t_Found = FALSE ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		ITaskScheduler *t_TaskScheduler = NULL ;
 | 
						|
 | 
						|
		t_Result = CoCreateInstance (
 | 
						|
 | 
						|
			CLSID_CTaskScheduler,
 | 
						|
			NULL,
 | 
						|
			CLSCTX_INPROC_SERVER,
 | 
						|
			IID_ITaskScheduler,
 | 
						|
			(void **) & t_TaskScheduler
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
		{
 | 
						|
			IEnumTasks *t_TaskEnumerator = NULL ;
 | 
						|
			t_Result = t_TaskScheduler->Enum ( & t_TaskEnumerator ) ;
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				wchar_t **t_Name = NULL ;
 | 
						|
				t_TaskEnumerator->Reset () ;
 | 
						|
				while ( ( t_Result = t_TaskEnumerator->Next ( 1 , & t_Name , NULL ) ) == S_OK ) 
 | 
						|
				{
 | 
						|
					if ( wcscmp ( t_Name [ 0 ] , t_Key_Name ) == 0 )
 | 
						|
					{
 | 
						|
						t_Found = TRUE ;
 | 
						|
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							t_Result = GetObjectAsync_Win32_Trigger_Load (
 | 
						|
 | 
						|
								a_ClassObject ,
 | 
						|
								a_Sink ,
 | 
						|
								t_TaskScheduler ,
 | 
						|
								t_Key_Name ,
 | 
						|
								t_Key_TriggerIndex ,
 | 
						|
								a_TriggerType
 | 
						|
							) ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
 | 
						|
					CoTaskMemFree ( t_Name ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				if ( t_Result != S_FALSE )
 | 
						|
				{
 | 
						|
					t_Result = WBEM_E_FAILED ;
 | 
						|
				}
 | 
						|
 | 
						|
				t_TaskEnumerator->Release () ;
 | 
						|
			}
 | 
						|
 | 
						|
			t_TaskScheduler->Release () ;
 | 
						|
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if ( t_Key_Name )
 | 
						|
	{
 | 
						|
		delete [] t_Key_Name ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) && t_Found == FALSE )
 | 
						|
	{
 | 
						|
		t_Result = WBEM_E_NOT_FOUND ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: GetObjectAsync ( 
 | 
						|
		
 | 
						|
	const BSTR a_ObjectPath , 
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context ,
 | 
						|
	IWbemObjectSink *a_Sink
 | 
						|
) 
 | 
						|
{
 | 
						|
	IWbemPath *t_Path = NULL ;
 | 
						|
 | 
						|
	HRESULT t_Result = CoCreateInstance (
 | 
						|
 | 
						|
		CLSID_WbemDefPath ,
 | 
						|
		NULL ,
 | 
						|
		CLSCTX_INPROC_SERVER ,
 | 
						|
		IID_IWbemPath ,
 | 
						|
		( void ** )  & t_Path
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		t_Result = t_Path->SetText ( WBEMPATH_CREATE_ACCEPT_ALL , a_ObjectPath ) ;
 | 
						|
		if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
		{
 | 
						|
			ULONG t_Length = 32 ; // None of supported classes is longer than this length
 | 
						|
			BSTR t_Class = SysAllocStringLen ( NULL , t_Length ) ; 
 | 
						|
			if ( t_Class )
 | 
						|
			{
 | 
						|
				t_Result = t_Path->GetClassName (
 | 
						|
 | 
						|
					& t_Length ,
 | 
						|
					t_Class
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					HRESULT t_Result = CoImpersonateClient () ;
 | 
						|
 | 
						|
					if ( _wcsicmp ( t_Class , L"Win32_Task" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = GetObjectAsync_Win32_Task ( 
 | 
						|
 | 
						|
							m_Win32_Task_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_Once" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = GetObjectAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_Once_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_TIME_TRIGGER_ONCE
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_WeeklyTrigger" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = GetObjectAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_WeeklyTrigger_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_TIME_TRIGGER_WEEKLY
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_DailyTrigger" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = GetObjectAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_DailyTrigger_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_TIME_TRIGGER_DAILY
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_MonthlyDateTrigger" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = GetObjectAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_MonthlyDateTrigger_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_TIME_TRIGGER_MONTHLYDATE
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_MonthlyDayOfWeekTrigger" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = GetObjectAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_MonthlyDayOfWeekTrigger_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_TIME_TRIGGER_MONTHLYDOW
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_OnIdle" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = GetObjectAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_OnIdle_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_EVENT_TRIGGER_ON_IDLE
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_AtSystemStart" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = GetObjectAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_AtSystemStart_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_EVENT_TRIGGER_AT_SYSTEMSTART
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_AtLogon" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = GetObjectAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_AtLogon_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_EVENT_TRIGGER_AT_LOGON
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_ScheduledWorkItemTrigger" ) == 0 ) 
 | 
						|
					{
 | 
						|
#if 0
 | 
						|
						t_Result = GetObjectAsync_Win32_ScheduledWorkItemTrigger ( 
 | 
						|
 | 
						|
							m_Win32_ScheduledWorkItemTrigger_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink
 | 
						|
						) ;
 | 
						|
#endif
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
					}
 | 
						|
	
 | 
						|
					SysFreeString ( t_Class ) ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_OUT_OF_MEMORY ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		t_Path->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	a_Sink->SetStatus ( 0 , t_Result , NULL , NULL ) ;
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: PutClass ( 
 | 
						|
		
 | 
						|
	IWbemClassObject FAR* pObject, 
 | 
						|
	long lFlags, 
 | 
						|
	IWbemContext FAR *pCtx,
 | 
						|
	IWbemCallResult FAR* FAR* ppCallResult
 | 
						|
) 
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: PutClassAsync ( 
 | 
						|
		
 | 
						|
	IWbemClassObject FAR* pObject, 
 | 
						|
	long lFlags, 
 | 
						|
	IWbemContext FAR *pCtx,
 | 
						|
	IWbemObjectSink FAR* pResponseHandler
 | 
						|
) 
 | 
						|
{
 | 
						|
 	 return WBEM_E_NOT_FOUND ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: DeleteClass ( 
 | 
						|
		
 | 
						|
	const BSTR Class, 
 | 
						|
	long lFlags, 
 | 
						|
	IWbemContext FAR *pCtx,
 | 
						|
	IWbemCallResult FAR* FAR* ppCallResult
 | 
						|
) 
 | 
						|
{
 | 
						|
 	 return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: DeleteClassAsync ( 
 | 
						|
		
 | 
						|
	const BSTR Class, 
 | 
						|
	long lFlags, 
 | 
						|
	IWbemContext FAR *pCtx,
 | 
						|
	IWbemObjectSink FAR* pResponseHandler
 | 
						|
) 
 | 
						|
{
 | 
						|
 	 return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: CreateClassEnum ( 
 | 
						|
 | 
						|
	const BSTR Superclass, 
 | 
						|
	long lFlags, 
 | 
						|
	IWbemContext FAR *pCtx,
 | 
						|
	IEnumWbemClassObject FAR *FAR *ppEnum
 | 
						|
) 
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
SCODE CTask_IWbemServices :: CreateClassEnumAsync (
 | 
						|
 | 
						|
	const BSTR Superclass, 
 | 
						|
	long lFlags, 
 | 
						|
	IWbemContext FAR* pCtx,
 | 
						|
	IWbemObjectSink FAR* pHandler
 | 
						|
) 
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_FOUND ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: PutInstance (
 | 
						|
 | 
						|
    IWbemClassObject *a_Instance ,
 | 
						|
    long a_Flags ,
 | 
						|
    IWbemContext *a_Context ,
 | 
						|
	IWbemCallResult **a_CallResult
 | 
						|
) 
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: PutInstanceAsync_Win32_Task (
 | 
						|
 | 
						|
	IWbemClassObject *a_Instance, 
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemObjectSink *a_Sink
 | 
						|
)
 | 
						|
{
 | 
						|
	_IWmiObject *t_FastInstance = NULL ;
 | 
						|
	HRESULT t_Result = a_Instance->QueryInterface ( IID__IWmiObject , ( void ** ) & t_FastInstance ) ;
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		wchar_t *t_WorkItemName = NULL ;
 | 
						|
		BOOL t_Null = FALSE ;
 | 
						|
 | 
						|
		t_Result = ProviderSubSystem_Common_Globals :: Get_String (
 | 
						|
 | 
						|
			a_Instance ,
 | 
						|
			L"WorkItemName" ,
 | 
						|
			t_WorkItemName ,
 | 
						|
			t_Null 
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			if ( t_Null )
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_INVALID_OBJECT ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		wchar_t *t_ApplicationName = NULL ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_String (
 | 
						|
 | 
						|
				a_Instance ,
 | 
						|
				L"ApplicationName" ,
 | 
						|
				t_ApplicationName ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_Result = WBEM_E_INVALID_OBJECT ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		wchar_t *t_Parameters = NULL ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_String (
 | 
						|
 | 
						|
				a_Instance ,
 | 
						|
				L"Parameters" ,
 | 
						|
				t_Parameters ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
		}
 | 
						|
 | 
						|
		wchar_t *t_WorkingDirectory = NULL ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_String (
 | 
						|
 | 
						|
				a_Instance ,
 | 
						|
				L"WorkingDirectory" ,
 | 
						|
				t_WorkingDirectory ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
		}
 | 
						|
 | 
						|
		wchar_t *t_AccountName = NULL ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_String (
 | 
						|
 | 
						|
				a_Instance ,
 | 
						|
				L"AccountName" ,
 | 
						|
				t_AccountName ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
		}
 | 
						|
 | 
						|
		wchar_t *t_Password = NULL ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_String (
 | 
						|
 | 
						|
				a_Instance ,
 | 
						|
				L"Password" ,
 | 
						|
				t_Password ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
		}
 | 
						|
 | 
						|
		wchar_t *t_Comment = NULL ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_String (
 | 
						|
 | 
						|
				a_Instance ,
 | 
						|
				L"Comment" ,
 | 
						|
				t_Comment ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
		}
 | 
						|
 | 
						|
		wchar_t *t_Creator = NULL ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_String (
 | 
						|
 | 
						|
				a_Instance ,
 | 
						|
				L"Creator" ,
 | 
						|
				t_Creator ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
		}
 | 
						|
 | 
						|
		WORD t_RetryCount = 0 ;
 | 
						|
		BOOL t_RetryCountSpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
				t_FastInstance ,
 | 
						|
				L"RetryCount" ,
 | 
						|
				t_RetryCount ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_RetryCountSpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		WORD t_RetryInterval = 0 ;
 | 
						|
		BOOL t_RetryIntervalSpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
				t_FastInstance ,
 | 
						|
				L"RetryInterval" ,
 | 
						|
				t_RetryInterval ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_RetryIntervalSpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		WORD t_IdleWait = 0 ;
 | 
						|
		BOOL t_IdleWaitSpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
				t_FastInstance ,
 | 
						|
				L"IdleWait" ,
 | 
						|
				t_IdleWait ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_IdleWaitSpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		WORD t_Deadline = 0 ;
 | 
						|
		BOOL t_DeadlineSpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
				t_FastInstance ,
 | 
						|
				L"Deadline" ,
 | 
						|
				t_Deadline ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_DeadlineSpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		DWORD t_Flags = 0 ;
 | 
						|
		BOOL t_FlagsSpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_Uint32 (
 | 
						|
 | 
						|
				t_FastInstance ,
 | 
						|
				L"Flags" ,
 | 
						|
				t_Flags ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_FlagsSpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		DWORD t_MaxRunTime = 0 ;
 | 
						|
		BOOL t_MaxRunTimeSpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_Uint32 (
 | 
						|
 | 
						|
				t_FastInstance ,
 | 
						|
				L"MaxRunTime" ,
 | 
						|
				t_MaxRunTime ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_MaxRunTimeSpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		DWORD t_Priority = 0 ;
 | 
						|
		BOOL t_PrioritySpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_Uint32 (
 | 
						|
 | 
						|
				t_FastInstance ,
 | 
						|
				L"Priority" ,
 | 
						|
				t_Priority ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_PrioritySpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			ITaskScheduler *t_TaskScheduler = NULL ;
 | 
						|
 | 
						|
			t_Result = CoCreateInstance (
 | 
						|
 | 
						|
				CLSID_CTaskScheduler,
 | 
						|
				NULL,
 | 
						|
				CLSCTX_INPROC_SERVER,
 | 
						|
				IID_ITaskScheduler,
 | 
						|
				(void **) & t_TaskScheduler
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
			{
 | 
						|
				IScheduledWorkItem *t_ScheduledWorkItem = NULL ;
 | 
						|
 | 
						|
				t_Result = GetScheduledWorkItem (
 | 
						|
 | 
						|
					t_TaskScheduler ,
 | 
						|
					t_WorkItemName ,
 | 
						|
					t_ScheduledWorkItem
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( t_Result == WBEM_E_NOT_FOUND ) 
 | 
						|
				{
 | 
						|
					if ( ( a_Flags & ( WBEM_FLAG_CREATE_ONLY | WBEM_FLAG_UPDATE_ONLY ) ) == WBEM_FLAG_UPDATE_ONLY ) 
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_NOT_FOUND ;
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = t_TaskScheduler->NewWorkItem (
 | 
						|
 | 
						|
							t_WorkItemName ,
 | 
						|
							CLSID_CTask ,
 | 
						|
							IID_IScheduledWorkItem ,
 | 
						|
							( IUnknown ** ) & t_ScheduledWorkItem
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					if ( ( a_Flags & ( WBEM_FLAG_CREATE_ONLY | WBEM_FLAG_UPDATE_ONLY ) ) == WBEM_FLAG_CREATE_ONLY )
 | 
						|
					{		
 | 
						|
						t_Result = WBEM_E_ALREADY_EXISTS ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					if ( SUCCEEDED ( t_Result ) && t_Comment )
 | 
						|
					{
 | 
						|
						t_Result = t_ScheduledWorkItem->SetComment ( t_Comment ) ;
 | 
						|
					}
 | 
						|
 | 
						|
					if ( SUCCEEDED ( t_Result ) && t_Creator )
 | 
						|
					{
 | 
						|
						t_Result = t_ScheduledWorkItem->SetCreator ( t_Creator ) ;
 | 
						|
					}
 | 
						|
 | 
						|
					if ( SUCCEEDED ( t_Result ) && ( t_AccountName || t_Password ) )
 | 
						|
					{
 | 
						|
						t_Result = t_ScheduledWorkItem->SetAccountInformation ( t_AccountName , t_Password ) ;
 | 
						|
					}
 | 
						|
 | 
						|
#if 0
 | 
						|
/*
 | 
						|
 * Not implemented
 | 
						|
 */
 | 
						|
					if ( SUCCEEDED ( t_Result ) && t_RetryCountSpecified )
 | 
						|
					{
 | 
						|
						t_Result = t_ScheduledWorkItem->SetErrorRetryCount ( t_RetryCount ) ;
 | 
						|
					}
 | 
						|
 | 
						|
					if ( SUCCEEDED ( t_Result ) && t_RetryIntervalSpecified )
 | 
						|
					{
 | 
						|
						t_Result = t_ScheduledWorkItem->SetErrorRetryInterval ( t_RetryInterval ) ;
 | 
						|
					}
 | 
						|
#endif
 | 
						|
 | 
						|
					if ( SUCCEEDED ( t_Result ) && t_FlagsSpecified )
 | 
						|
					{
 | 
						|
						t_Result = t_ScheduledWorkItem->SetFlags ( t_Flags ) ;
 | 
						|
					}
 | 
						|
 | 
						|
					if ( SUCCEEDED ( t_Result ) && ( t_IdleWaitSpecified && t_DeadlineSpecified ) )
 | 
						|
					{
 | 
						|
						t_Result = t_ScheduledWorkItem->SetIdleWait ( t_IdleWait , t_Deadline ) ;
 | 
						|
					}
 | 
						|
 | 
						|
					if ( SUCCEEDED ( t_Result ) )
 | 
						|
					{
 | 
						|
						ITask *t_Task = NULL ;
 | 
						|
						t_Result = t_ScheduledWorkItem->QueryInterface (
 | 
						|
 | 
						|
							IID_ITask , 
 | 
						|
							( void ** ) & t_Task
 | 
						|
						) ;
 | 
						|
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							if ( SUCCEEDED ( t_Result ) && t_ApplicationName )
 | 
						|
							{
 | 
						|
								t_Result = t_Task->SetApplicationName ( t_ApplicationName ) ;
 | 
						|
							}
 | 
						|
 | 
						|
							if ( SUCCEEDED ( t_Result ) && t_WorkingDirectory )
 | 
						|
							{
 | 
						|
								t_Result = t_Task->SetWorkingDirectory ( t_WorkingDirectory ) ;
 | 
						|
							}
 | 
						|
 | 
						|
							if ( SUCCEEDED ( t_Result ) && t_Parameters )
 | 
						|
							{
 | 
						|
								t_Result = t_Task->SetParameters ( t_Parameters ) ;
 | 
						|
							}
 | 
						|
 | 
						|
							if ( SUCCEEDED ( t_Result ) && t_PrioritySpecified )
 | 
						|
							{
 | 
						|
								t_Result = t_Task->SetPriority ( t_Priority ) ;
 | 
						|
							}
 | 
						|
 | 
						|
						}
 | 
						|
					}
 | 
						|
 | 
						|
					if ( SUCCEEDED ( t_Result ) )
 | 
						|
					{
 | 
						|
						IPersistFile *t_Persist = NULL ;
 | 
						|
						t_Result = t_ScheduledWorkItem->QueryInterface (
 | 
						|
 | 
						|
							IID_IPersistFile ,
 | 
						|
							( void ** ) & t_Persist 
 | 
						|
						) ;
 | 
						|
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							t_Result = t_Persist->Save ( NULL , TRUE ) ;
 | 
						|
 | 
						|
							t_Persist->Release () ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
 | 
						|
					t_ScheduledWorkItem->Release () ;
 | 
						|
				}
 | 
						|
 | 
						|
				t_TaskScheduler->Release () ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if ( t_WorkItemName )
 | 
						|
		{
 | 
						|
			delete [] t_WorkItemName ;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( t_ApplicationName )
 | 
						|
		{
 | 
						|
			delete [] t_ApplicationName ;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( t_Parameters )
 | 
						|
		{
 | 
						|
			delete [] t_Parameters ;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( t_WorkingDirectory )
 | 
						|
		{
 | 
						|
			delete [] t_WorkingDirectory ;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( t_AccountName )
 | 
						|
		{
 | 
						|
			delete [] t_AccountName ;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( t_Password )
 | 
						|
		{
 | 
						|
			delete [] t_Password ;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( t_Comment )
 | 
						|
		{
 | 
						|
			delete [] t_Comment ;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( t_Creator )
 | 
						|
		{
 | 
						|
			delete [] t_Creator ;
 | 
						|
		}
 | 
						|
 | 
						|
		t_FastInstance->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
#if 0
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				t_Result = t_TaskScheduler->AddWorkItem (
 | 
						|
 | 
						|
					t_WorkItemName ,
 | 
						|
					t_ScheduledWorkItem
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					t_ScheduledWorkItem->Release () ;
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					if ( t_Result == HRESULT_FROM_WIN32(ERROR_FILE_EXISTS) )
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_ALREADY_EXISTS ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
#endif
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: PutInstanceAsync_Win32_Trigger (
 | 
						|
 | 
						|
	IWbemClassObject *a_Instance, 
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemObjectSink FAR *a_Sink ,
 | 
						|
	TASK_TRIGGER_TYPE a_TriggerType 
 | 
						|
)
 | 
						|
{
 | 
						|
	_IWmiObject *t_FastInstance = NULL ;
 | 
						|
	HRESULT t_Result = a_Instance->QueryInterface ( IID__IWmiObject , ( void ** ) & t_FastInstance ) ;
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		wchar_t *t_WorkItemName = NULL ;
 | 
						|
		BOOL t_Null = FALSE ;
 | 
						|
 | 
						|
		t_Result = ProviderSubSystem_Common_Globals :: Get_String (
 | 
						|
 | 
						|
				a_Instance ,
 | 
						|
				L"WorkItemName" ,
 | 
						|
				t_WorkItemName ,
 | 
						|
				t_Null 
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			if ( t_Null )
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_INVALID_OBJECT ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		FILETIME t_BeginDate ;
 | 
						|
		SYSTEMTIME t_SystemBeginDate ;
 | 
						|
		ZeroMemory ( & t_SystemBeginDate , sizeof ( t_SystemBeginDate ) ) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_DateTime (
 | 
						|
 | 
						|
					a_Instance ,
 | 
						|
					L"BeginDate" ,
 | 
						|
					t_BeginDate ,
 | 
						|
					t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( ! t_Null )
 | 
						|
				{
 | 
						|
					if ( FileTimeToSystemTime ( & t_BeginDate , & t_SystemBeginDate ) )
 | 
						|
					{
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					t_Result = WBEM_E_INVALID_OBJECT ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		FILETIME t_EndDate ;
 | 
						|
		SYSTEMTIME t_SystemEndDate ;
 | 
						|
		ZeroMemory ( & t_SystemEndDate , sizeof ( t_SystemEndDate ) ) ;
 | 
						|
		BOOL t_EndDateSpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_DateTime (
 | 
						|
 | 
						|
					a_Instance ,
 | 
						|
					L"EndDate" ,
 | 
						|
					t_EndDate ,
 | 
						|
					t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( ! t_Null )
 | 
						|
				{
 | 
						|
					if ( FileTimeToSystemTime ( & t_EndDate , & t_SystemEndDate ) )
 | 
						|
					{
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					t_EndDateSpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		WORD t_TriggerId = 0 ;
 | 
						|
		BOOL t_TriggerIdSpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
				t_FastInstance ,
 | 
						|
				L"TriggerId" ,
 | 
						|
				t_TriggerId ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_TriggerIdSpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		DWORD t_Duration = 0 ;
 | 
						|
		BOOL t_DurationSpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_Uint32 (
 | 
						|
 | 
						|
				t_FastInstance ,
 | 
						|
				L"Duration" ,
 | 
						|
				t_Duration ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_DurationSpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		DWORD t_Interval = 0 ;
 | 
						|
		BOOL t_IntervalSpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_Uint32 (
 | 
						|
 | 
						|
				t_FastInstance ,
 | 
						|
				L"Interval" ,
 | 
						|
				t_Interval ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_IntervalSpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		BOOL t_KillAtDurationEnd = 0 ;
 | 
						|
		BOOL t_KillAtDurationEndSpecified = TRUE ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = ProviderSubSystem_Common_Globals :: Get_Bool (
 | 
						|
 | 
						|
				t_FastInstance ,
 | 
						|
				L"KillAtDurationEnd" ,
 | 
						|
				t_KillAtDurationEnd ,
 | 
						|
				t_Null 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				if ( t_Null )
 | 
						|
				{
 | 
						|
					t_KillAtDurationEndSpecified = FALSE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			ITaskScheduler *t_TaskScheduler = NULL ;
 | 
						|
 | 
						|
			t_Result = CoCreateInstance (
 | 
						|
 | 
						|
				CLSID_CTaskScheduler,
 | 
						|
				NULL,
 | 
						|
				CLSCTX_INPROC_SERVER,
 | 
						|
				IID_ITaskScheduler,
 | 
						|
				(void **) & t_TaskScheduler
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
			{
 | 
						|
				IScheduledWorkItem *t_ScheduledWorkItem = NULL ;
 | 
						|
 | 
						|
				t_Result = GetScheduledWorkItem (
 | 
						|
 | 
						|
					t_TaskScheduler ,
 | 
						|
					t_WorkItemName ,
 | 
						|
					t_ScheduledWorkItem
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					WORD t_TriggerId = 0 ;
 | 
						|
					ITaskTrigger *t_Trigger = NULL ;
 | 
						|
 | 
						|
					t_Result = t_ScheduledWorkItem->CreateTrigger (
 | 
						|
 | 
						|
						& t_TriggerId ,
 | 
						|
						& t_Trigger
 | 
						|
					) ;
 | 
						|
 | 
						|
					if ( SUCCEEDED ( t_Result ) )
 | 
						|
					{
 | 
						|
						TASK_TRIGGER t_TaskTrigger ;
 | 
						|
						ZeroMemory ( & t_TaskTrigger , sizeof ( t_TaskTrigger ) ) ;
 | 
						|
						t_TaskTrigger.cbTriggerSize = sizeof ( t_TaskTrigger ) ;
 | 
						|
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							t_TaskTrigger.TriggerType = a_TriggerType ;
 | 
						|
							t_TaskTrigger.wBeginYear = t_SystemBeginDate.wYear ;
 | 
						|
							t_TaskTrigger.wBeginMonth = t_SystemBeginDate.wMonth ;
 | 
						|
							t_TaskTrigger.wBeginDay = t_SystemBeginDate.wDay ;
 | 
						|
 | 
						|
							if ( t_EndDateSpecified )
 | 
						|
							{
 | 
						|
								t_TaskTrigger.wEndYear = t_SystemEndDate.wYear ;
 | 
						|
								t_TaskTrigger.wEndMonth = t_SystemEndDate.wMonth ;
 | 
						|
								t_TaskTrigger.wEndDay = t_SystemEndDate.wDay ;
 | 
						|
								t_TaskTrigger.rgFlags |= TASK_TRIGGER_FLAG_HAS_END_DATE ;
 | 
						|
							}
 | 
						|
 | 
						|
							if ( t_KillAtDurationEndSpecified && t_KillAtDurationEnd )
 | 
						|
							{
 | 
						|
								t_TaskTrigger.rgFlags |= TASK_TRIGGER_FLAG_KILL_AT_DURATION_END ;
 | 
						|
							}
 | 
						|
						}
 | 
						|
 | 
						|
						switch ( t_TaskTrigger.TriggerType )
 | 
						|
						{
 | 
						|
							case TASK_TIME_TRIGGER_ONCE:
 | 
						|
							case TASK_TIME_TRIGGER_DAILY:
 | 
						|
							case TASK_TIME_TRIGGER_WEEKLY:
 | 
						|
							case TASK_TIME_TRIGGER_MONTHLYDATE:
 | 
						|
							case TASK_TIME_TRIGGER_MONTHLYDOW:
 | 
						|
							{
 | 
						|
								WORD t_StartHour = 0 ;
 | 
						|
								BOOL t_StartHourSpecified = TRUE ;
 | 
						|
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
										t_FastInstance ,
 | 
						|
										L"StartHour" ,
 | 
						|
										t_StartHour ,
 | 
						|
										t_Null 
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) )
 | 
						|
									{
 | 
						|
										if ( t_Null )
 | 
						|
										{
 | 
						|
											t_StartHourSpecified = FALSE ;
 | 
						|
										}
 | 
						|
									}
 | 
						|
								}
 | 
						|
 | 
						|
								WORD t_StartMinute = 0 ;
 | 
						|
								BOOL t_StartMinuteSpecified = TRUE ;
 | 
						|
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
										t_FastInstance ,
 | 
						|
										L"StartMinute" ,
 | 
						|
										t_StartMinute ,
 | 
						|
										t_Null 
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) )
 | 
						|
									{
 | 
						|
										if ( t_Null )
 | 
						|
										{
 | 
						|
											t_StartMinuteSpecified = FALSE ;
 | 
						|
										}
 | 
						|
									}
 | 
						|
								}
 | 
						|
 | 
						|
								if ( t_StartHourSpecified && t_StartMinuteSpecified )
 | 
						|
								{
 | 
						|
									t_TaskTrigger.wStartHour = t_StartHour ;
 | 
						|
									t_TaskTrigger.wStartMinute = t_StartMinute ;
 | 
						|
								}
 | 
						|
								else
 | 
						|
								{
 | 
						|
									t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
								}
 | 
						|
							}
 | 
						|
							break ;
 | 
						|
 | 
						|
							case TASK_EVENT_TRIGGER_ON_IDLE:
 | 
						|
							case TASK_EVENT_TRIGGER_AT_SYSTEMSTART:
 | 
						|
							case TASK_EVENT_TRIGGER_AT_LOGON:
 | 
						|
							{
 | 
						|
							}
 | 
						|
							break ;
 | 
						|
 | 
						|
							default:
 | 
						|
							{
 | 
						|
								t_Result = WBEM_E_UNEXPECTED ;
 | 
						|
							}
 | 
						|
							break ;
 | 
						|
						}
 | 
						|
 | 
						|
						switch ( t_TaskTrigger.TriggerType )
 | 
						|
						{
 | 
						|
							case TASK_TIME_TRIGGER_DAILY:
 | 
						|
							{
 | 
						|
								WORD t_DaysInterval = 0 ;
 | 
						|
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
										t_FastInstance ,
 | 
						|
										L"DaysInterval" ,
 | 
						|
										t_DaysInterval ,
 | 
						|
										t_Null 
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) )
 | 
						|
									{
 | 
						|
										if ( t_Null == FALSE )
 | 
						|
										{
 | 
						|
											t_TaskTrigger.Type.Daily.DaysInterval = t_DaysInterval ;
 | 
						|
										}
 | 
						|
										else
 | 
						|
										{
 | 
						|
											t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
										}
 | 
						|
									}
 | 
						|
								}
 | 
						|
							}
 | 
						|
							break ;
 | 
						|
 | 
						|
							case TASK_TIME_TRIGGER_WEEKLY:
 | 
						|
							{
 | 
						|
								WORD t_Days = 0 ;
 | 
						|
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
										t_FastInstance ,
 | 
						|
										L"Days" ,
 | 
						|
										t_Days ,
 | 
						|
										t_Null 
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) )
 | 
						|
									{
 | 
						|
										if ( t_Null == FALSE )
 | 
						|
										{
 | 
						|
											t_TaskTrigger.Type.Weekly.rgfDaysOfTheWeek = t_Days ;
 | 
						|
										}
 | 
						|
										else
 | 
						|
										{
 | 
						|
											t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
										}
 | 
						|
									}
 | 
						|
								}
 | 
						|
 | 
						|
								WORD t_WeeklyInterval = 0 ;
 | 
						|
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
										t_FastInstance ,
 | 
						|
										L"WeeklyInterval" ,
 | 
						|
										t_WeeklyInterval ,
 | 
						|
										t_Null 
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) )
 | 
						|
									{
 | 
						|
										if ( t_Null == FALSE )
 | 
						|
										{
 | 
						|
											t_TaskTrigger.Type.Weekly.WeeksInterval = t_WeeklyInterval ;
 | 
						|
										}
 | 
						|
										else
 | 
						|
										{
 | 
						|
											t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
										}
 | 
						|
									}
 | 
						|
								}
 | 
						|
							}
 | 
						|
							break ;
 | 
						|
 | 
						|
							case TASK_TIME_TRIGGER_MONTHLYDATE:
 | 
						|
							{
 | 
						|
								DWORD t_Days = 0 ;
 | 
						|
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									t_Result = ProviderSubSystem_Common_Globals :: Get_Uint32 (
 | 
						|
 | 
						|
										t_FastInstance ,
 | 
						|
										L"Days" ,
 | 
						|
										t_Days ,
 | 
						|
										t_Null 
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) )
 | 
						|
									{
 | 
						|
										if ( t_Null == FALSE )
 | 
						|
										{
 | 
						|
											t_TaskTrigger.Type.MonthlyDate.rgfDays = t_Days ;
 | 
						|
										}
 | 
						|
										else
 | 
						|
										{
 | 
						|
											t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
										}
 | 
						|
									}
 | 
						|
								}
 | 
						|
 | 
						|
								WORD t_Months = 0 ;
 | 
						|
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
										t_FastInstance ,
 | 
						|
										L"Months" ,
 | 
						|
										t_Months ,
 | 
						|
										t_Null 
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) )
 | 
						|
									{
 | 
						|
										if ( t_Null == FALSE )
 | 
						|
										{
 | 
						|
											t_TaskTrigger.Type.MonthlyDate.rgfMonths = t_Months ;
 | 
						|
										}
 | 
						|
										else
 | 
						|
										{
 | 
						|
											t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
										}
 | 
						|
									}
 | 
						|
								}
 | 
						|
							}
 | 
						|
							break ;
 | 
						|
 | 
						|
							case TASK_TIME_TRIGGER_MONTHLYDOW:
 | 
						|
							{
 | 
						|
								WORD t_Week = 0 ;
 | 
						|
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
										t_FastInstance ,
 | 
						|
										L"Week" ,
 | 
						|
										t_Week ,
 | 
						|
										t_Null 
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) )
 | 
						|
									{
 | 
						|
										if ( t_Null == FALSE )
 | 
						|
										{
 | 
						|
											t_TaskTrigger.Type.MonthlyDOW.wWhichWeek = t_Week ;
 | 
						|
										}
 | 
						|
										else
 | 
						|
										{
 | 
						|
											t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
										}
 | 
						|
									}
 | 
						|
								}
 | 
						|
 | 
						|
								WORD t_Days = 0 ;
 | 
						|
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
										t_FastInstance ,
 | 
						|
										L"Days" ,
 | 
						|
										t_Days ,
 | 
						|
										t_Null 
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) )
 | 
						|
									{
 | 
						|
										if ( t_Null == FALSE )
 | 
						|
										{
 | 
						|
											t_TaskTrigger.Type.MonthlyDOW.rgfDaysOfTheWeek = t_Days ;
 | 
						|
										}
 | 
						|
										else
 | 
						|
										{
 | 
						|
											t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
										}
 | 
						|
									}
 | 
						|
								}
 | 
						|
 | 
						|
								WORD t_Months = 0 ;
 | 
						|
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									t_Result = ProviderSubSystem_Common_Globals :: Get_Uint16 (
 | 
						|
 | 
						|
										t_FastInstance ,
 | 
						|
										L"Months" ,
 | 
						|
										t_Months ,
 | 
						|
										t_Null 
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) )
 | 
						|
									{
 | 
						|
										if ( t_Null == FALSE )
 | 
						|
										{
 | 
						|
											t_TaskTrigger.Type.MonthlyDOW.rgfMonths = t_Months ;
 | 
						|
										}
 | 
						|
										else
 | 
						|
										{
 | 
						|
											t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
										}
 | 
						|
									}
 | 
						|
								}
 | 
						|
							}
 | 
						|
							break ;
 | 
						|
 | 
						|
							case TASK_TIME_TRIGGER_ONCE:
 | 
						|
							case TASK_EVENT_TRIGGER_ON_IDLE:
 | 
						|
							case TASK_EVENT_TRIGGER_AT_SYSTEMSTART:
 | 
						|
							case TASK_EVENT_TRIGGER_AT_LOGON:
 | 
						|
							{
 | 
						|
							}
 | 
						|
							break ;
 | 
						|
 | 
						|
							default:
 | 
						|
							{
 | 
						|
								t_Result = WBEM_E_UNEXPECTED ;
 | 
						|
							}
 | 
						|
							break ;
 | 
						|
						}
 | 
						|
						
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							t_Result = t_Trigger->SetTrigger ( & t_TaskTrigger ) ;
 | 
						|
						}
 | 
						|
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							IPersistFile *t_Persist = NULL ;
 | 
						|
							t_Result = t_ScheduledWorkItem->QueryInterface (
 | 
						|
 | 
						|
								IID_IPersistFile ,
 | 
						|
								( void ** ) & t_Persist 
 | 
						|
							) ;
 | 
						|
 | 
						|
							if ( SUCCEEDED ( t_Result ) )
 | 
						|
							{
 | 
						|
								t_Result = t_Persist->Save ( NULL , TRUE ) ;
 | 
						|
 | 
						|
								t_Persist->Release () ;
 | 
						|
							}
 | 
						|
						}
 | 
						|
					}
 | 
						|
 | 
						|
					t_ScheduledWorkItem->Release () ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			t_TaskScheduler->Release () ;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( t_WorkItemName )
 | 
						|
		{
 | 
						|
			delete [] t_WorkItemName ;
 | 
						|
		}
 | 
						|
 | 
						|
		t_FastInstance->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *
 | 
						|
 * Uint16 IdleWait ;
 | 
						|
 * Uint16 Deadline ;
 | 
						|
 * String Comment ;
 | 
						|
 * String Creator ;
 | 
						|
 * Uint32 ItemData [] ;
 | 
						|
 * Uint16 RetryCount ;
 | 
						|
 * Uint16 RetryInterval ;
 | 
						|
 * Uint32 Flags ;
 | 
						|
 * String AccountName ;
 | 
						|
 * String Password ;
 | 
						|
 * String WorkItemName ;
 | 
						|
 * String ApplicationName ;
 | 
						|
 * String Parameters ;
 | 
						|
 * String WorkingDirectory ;
 | 
						|
 * Uint32 Priority ;
 | 
						|
 * Uint32 MaxRunTime ;
 | 
						|
 * 
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: PutInstanceAsync ( 
 | 
						|
		
 | 
						|
	IWbemClassObject *a_Instance, 
 | 
						|
	long a_Flags, 
 | 
						|
    IWbemContext *a_Context ,
 | 
						|
	IWbemObjectSink *a_Sink
 | 
						|
) 
 | 
						|
{
 | 
						|
	wchar_t *t_Class = NULL ;
 | 
						|
	BOOL t_Null = FALSE ;
 | 
						|
 | 
						|
	HRESULT t_Result = ProviderSubSystem_Common_Globals :: Get_String (
 | 
						|
 | 
						|
		a_Instance ,
 | 
						|
		L"__CLASS" ,
 | 
						|
		t_Class ,
 | 
						|
		t_Null 
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		if ( ! t_Null )
 | 
						|
		{
 | 
						|
			t_Result = CoImpersonateClient () ;
 | 
						|
 | 
						|
			if ( _wcsicmp ( t_Class , L"Win32_Task" ) == 0 ) 
 | 
						|
			{
 | 
						|
				t_Result = PutInstanceAsync_Win32_Task ( 
 | 
						|
 | 
						|
					a_Instance ,
 | 
						|
					m_Win32_Task_Object ,
 | 
						|
					a_Flags ,
 | 
						|
					a_Context , 
 | 
						|
					a_Sink
 | 
						|
				) ;
 | 
						|
			}
 | 
						|
			else if ( _wcsicmp ( t_Class , L"Win32_Once" ) == 0 ) 
 | 
						|
			{
 | 
						|
				t_Result = PutInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
					a_Instance ,
 | 
						|
					m_Win32_Once_Object ,
 | 
						|
					a_Flags ,
 | 
						|
					a_Context , 
 | 
						|
					a_Sink ,
 | 
						|
					TASK_TIME_TRIGGER_ONCE
 | 
						|
				) ;
 | 
						|
			}
 | 
						|
			else if ( _wcsicmp ( t_Class , L"Win32_WeeklyTrigger" ) == 0 ) 
 | 
						|
			{
 | 
						|
				t_Result = PutInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
					a_Instance ,
 | 
						|
					m_Win32_WeeklyTrigger_Object ,
 | 
						|
					a_Flags ,
 | 
						|
					a_Context , 
 | 
						|
					a_Sink ,
 | 
						|
					TASK_TIME_TRIGGER_WEEKLY
 | 
						|
				) ;
 | 
						|
			}
 | 
						|
			else if ( _wcsicmp ( t_Class , L"Win32_DailyTrigger" ) == 0 ) 
 | 
						|
			{
 | 
						|
				t_Result = PutInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
					a_Instance ,
 | 
						|
					m_Win32_DailyTrigger_Object ,
 | 
						|
					a_Flags ,
 | 
						|
					a_Context , 
 | 
						|
					a_Sink ,
 | 
						|
					TASK_TIME_TRIGGER_DAILY
 | 
						|
				) ;
 | 
						|
			}
 | 
						|
			else if ( _wcsicmp ( t_Class , L"Win32_MonthlyDateTrigger" ) == 0 ) 
 | 
						|
			{
 | 
						|
				t_Result = PutInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
					a_Instance ,
 | 
						|
					m_Win32_MonthlyDateTrigger_Object ,
 | 
						|
					a_Flags ,
 | 
						|
					a_Context , 
 | 
						|
					a_Sink ,
 | 
						|
					TASK_TIME_TRIGGER_MONTHLYDATE
 | 
						|
				) ;
 | 
						|
			}
 | 
						|
			else if ( _wcsicmp ( t_Class , L"Win32_MonthlyDayOfWeekTrigger" ) == 0 ) 
 | 
						|
			{
 | 
						|
				t_Result = PutInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
					a_Instance ,
 | 
						|
					m_Win32_MonthlyDayOfWeekTrigger_Object ,
 | 
						|
					a_Flags ,
 | 
						|
					a_Context , 
 | 
						|
					a_Sink ,
 | 
						|
					TASK_TIME_TRIGGER_MONTHLYDOW
 | 
						|
				) ;
 | 
						|
			}
 | 
						|
			else if ( _wcsicmp ( t_Class , L"Win32_OnIdle" ) == 0 ) 
 | 
						|
			{
 | 
						|
				t_Result = PutInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
					a_Instance ,
 | 
						|
					m_Win32_OnIdle_Object ,
 | 
						|
					a_Flags ,
 | 
						|
					a_Context , 
 | 
						|
					a_Sink ,
 | 
						|
					TASK_EVENT_TRIGGER_ON_IDLE
 | 
						|
				) ;
 | 
						|
			}
 | 
						|
			else if ( _wcsicmp ( t_Class , L"Win32_AtSystemStart" ) == 0 ) 
 | 
						|
			{
 | 
						|
				t_Result = PutInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
					a_Instance ,
 | 
						|
					m_Win32_AtSystemStart_Object ,
 | 
						|
					a_Flags ,
 | 
						|
					a_Context , 
 | 
						|
					a_Sink ,
 | 
						|
					TASK_EVENT_TRIGGER_AT_SYSTEMSTART
 | 
						|
				) ;
 | 
						|
			}
 | 
						|
			else if ( _wcsicmp ( t_Class , L"Win32_AtLogon" ) == 0 ) 
 | 
						|
			{
 | 
						|
				t_Result = PutInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
					a_Instance ,
 | 
						|
					m_Win32_AtLogon_Object ,
 | 
						|
					a_Flags ,
 | 
						|
					a_Context , 
 | 
						|
					a_Sink ,
 | 
						|
					TASK_EVENT_TRIGGER_AT_LOGON
 | 
						|
				) ;
 | 
						|
			}
 | 
						|
			else if ( _wcsicmp ( t_Class , L"Win32_ScheduledWorkItemTrigger" ) == 0 ) 
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_NOT_SUPPORTED ;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			t_Result = WBEM_E_INVALID_PROPERTY ;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if ( t_Class )
 | 
						|
	{
 | 
						|
		delete [] t_Class ;
 | 
						|
	}
 | 
						|
 | 
						|
	a_Sink->SetStatus ( 0 , t_Result , NULL , NULL ) ;
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: DeleteInstance ( 
 | 
						|
 | 
						|
	const BSTR ObjectPath,
 | 
						|
    long lFlags,
 | 
						|
    IWbemContext FAR *pCtx,
 | 
						|
    IWbemCallResult FAR *FAR *ppCallResult
 | 
						|
)
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: DeleteInstanceAsync_Win32_Task (
 | 
						|
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemObjectSink FAR *a_Sink ,
 | 
						|
	IWbemPath *a_Path 
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	wchar_t *t_Key_Name = NULL ;
 | 
						|
 | 
						|
	IWbemPathKeyList *t_Keys = NULL ;
 | 
						|
 | 
						|
	t_Result = a_Path->GetKeyList (
 | 
						|
 | 
						|
		& t_Keys 
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		ULONG t_KeyCount = 0 ;
 | 
						|
		t_Result = t_Keys->GetCount (
 | 
						|
 | 
						|
			& t_KeyCount 
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			if ( t_KeyCount == 1 )
 | 
						|
			{
 | 
						|
				wchar_t t_Key [ 32 ] ; 
 | 
						|
				ULONG t_KeyLength = 32 ;
 | 
						|
				ULONG t_KeyValueLength = 0 ;
 | 
						|
				ULONG t_KeyType = 0 ;
 | 
						|
 | 
						|
				t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
					0 ,
 | 
						|
					0 ,
 | 
						|
					& t_KeyLength ,
 | 
						|
					t_Key ,
 | 
						|
					& t_KeyValueLength ,
 | 
						|
					NULL ,
 | 
						|
					& t_KeyType
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
				{
 | 
						|
					if ( t_KeyType == CIM_STRING )
 | 
						|
					{
 | 
						|
						t_Key_Name = new wchar_t [ t_KeyValueLength ] ;
 | 
						|
						if ( t_Key_Name )
 | 
						|
						{
 | 
						|
							t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
								0 ,
 | 
						|
								0 ,
 | 
						|
								& t_KeyLength ,
 | 
						|
								t_Key ,
 | 
						|
								& t_KeyValueLength ,
 | 
						|
								t_Key_Name ,
 | 
						|
								& t_KeyType
 | 
						|
							) ;
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							t_Result = WBEM_E_OUT_OF_MEMORY ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	BOOL t_Found = FALSE ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		ITaskScheduler *t_TaskScheduler = NULL ;
 | 
						|
 | 
						|
		t_Result = CoCreateInstance (
 | 
						|
 | 
						|
			CLSID_CTaskScheduler,
 | 
						|
			NULL,
 | 
						|
			CLSCTX_INPROC_SERVER,
 | 
						|
			IID_ITaskScheduler,
 | 
						|
			(void **) & t_TaskScheduler
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
		{
 | 
						|
			IEnumTasks *t_TaskEnumerator = NULL ;
 | 
						|
			t_Result = t_TaskScheduler->Delete ( t_Key_Name ) ;
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				t_Found = TRUE ;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_NOT_FOUND ;
 | 
						|
			}
 | 
						|
 | 
						|
			t_TaskScheduler->Release () ;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if ( t_Key_Name )
 | 
						|
	{
 | 
						|
		delete [] t_Key_Name ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) && t_Found == FALSE )
 | 
						|
	{
 | 
						|
		t_Result = WBEM_E_NOT_FOUND ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: DeleteInstanceAsync_Win32_Trigger (
 | 
						|
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemObjectSink FAR *a_Sink ,
 | 
						|
	IWbemPath *a_Path ,
 | 
						|
	TASK_TRIGGER_TYPE a_TriggerType 
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	wchar_t *t_Key_Name = NULL ;
 | 
						|
	WORD t_Key_TriggerIndex = 0 ;
 | 
						|
 | 
						|
	IWbemPathKeyList *t_Keys = NULL ;
 | 
						|
 | 
						|
	t_Result = a_Path->GetKeyList (
 | 
						|
 | 
						|
		& t_Keys 
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		ULONG t_KeyCount = 0 ;
 | 
						|
		t_Result = t_Keys->GetCount (
 | 
						|
 | 
						|
			& t_KeyCount 
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			if ( t_KeyCount == 2 )
 | 
						|
			{
 | 
						|
				wchar_t t_Key [ 32 ] ; 
 | 
						|
				ULONG t_KeyLength = 32 ;
 | 
						|
				ULONG t_KeyValueLength = 0 ;
 | 
						|
				ULONG t_KeyType = 0 ;
 | 
						|
 | 
						|
				t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
					0 ,
 | 
						|
					0 ,
 | 
						|
					& t_KeyLength ,
 | 
						|
					t_Key ,
 | 
						|
					& t_KeyValueLength ,
 | 
						|
					NULL ,
 | 
						|
					& t_KeyType
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
				{
 | 
						|
					if ( t_KeyType == CIM_SINT32 )
 | 
						|
					{
 | 
						|
						t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
							0 ,
 | 
						|
							0 ,
 | 
						|
							& t_KeyLength ,
 | 
						|
							t_Key ,
 | 
						|
							& t_KeyValueLength ,
 | 
						|
							& t_Key_TriggerIndex ,
 | 
						|
							& t_KeyType
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
				t_KeyLength = 32 ;
 | 
						|
				t_KeyValueLength = 0 ;
 | 
						|
				t_KeyType = 0 ;
 | 
						|
 | 
						|
				t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
					1 ,
 | 
						|
					0 ,
 | 
						|
					& t_KeyLength ,
 | 
						|
					t_Key ,
 | 
						|
					& t_KeyValueLength ,
 | 
						|
					NULL ,
 | 
						|
					& t_KeyType
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
				{
 | 
						|
					if ( t_KeyType == CIM_STRING )
 | 
						|
					{
 | 
						|
						t_Key_Name = new wchar_t [ t_KeyValueLength ] ;
 | 
						|
						if ( t_Key_Name )
 | 
						|
						{
 | 
						|
							t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
								1 ,
 | 
						|
								0 ,
 | 
						|
								& t_KeyLength ,
 | 
						|
								t_Key ,
 | 
						|
								& t_KeyValueLength ,
 | 
						|
								t_Key_Name ,
 | 
						|
								& t_KeyType
 | 
						|
							) ;
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							t_Result = WBEM_E_OUT_OF_MEMORY ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	BOOL t_Found = FALSE ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		ITaskScheduler *t_TaskScheduler = NULL ;
 | 
						|
 | 
						|
		t_Result = CoCreateInstance (
 | 
						|
 | 
						|
			CLSID_CTaskScheduler,
 | 
						|
			NULL,
 | 
						|
			CLSCTX_INPROC_SERVER,
 | 
						|
			IID_ITaskScheduler,
 | 
						|
			(void **) & t_TaskScheduler
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
		{
 | 
						|
			IEnumTasks *t_TaskEnumerator = NULL ;
 | 
						|
			t_Result = t_TaskScheduler->Enum ( & t_TaskEnumerator ) ;
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				wchar_t **t_Name = NULL ;
 | 
						|
				t_TaskEnumerator->Reset () ;
 | 
						|
				while ( ( t_Result = t_TaskEnumerator->Next ( 1 , & t_Name , NULL ) ) == S_OK ) 
 | 
						|
				{
 | 
						|
					if ( wcscmp ( t_Name [ 0 ] , t_Key_Name ) == 0 )
 | 
						|
					{
 | 
						|
						IScheduledWorkItem *t_ScheduledWorkItem = NULL ;
 | 
						|
						t_Result = t_TaskScheduler->Activate (
 | 
						|
 | 
						|
							t_Name [ 0 ] , 
 | 
						|
							IID_IScheduledWorkItem , 
 | 
						|
							( IUnknown ** ) & t_ScheduledWorkItem
 | 
						|
						) ;
 | 
						|
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							t_Found = TRUE ;
 | 
						|
 | 
						|
							t_Result = t_ScheduledWorkItem->DeleteTrigger (
 | 
						|
 | 
						|
								t_Key_TriggerIndex
 | 
						|
							) ;
 | 
						|
 | 
						|
							if ( SUCCEEDED ( t_Result ) )
 | 
						|
							{
 | 
						|
								IPersistFile *t_Persist = NULL ;
 | 
						|
								t_Result = t_ScheduledWorkItem->QueryInterface (
 | 
						|
 | 
						|
									IID_IPersistFile ,
 | 
						|
									( void ** ) & t_Persist 
 | 
						|
								) ;
 | 
						|
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									t_Result = t_Persist->Save ( NULL , TRUE ) ;
 | 
						|
 | 
						|
									t_Persist->Release () ;
 | 
						|
								}
 | 
						|
							}
 | 
						|
 | 
						|
							t_ScheduledWorkItem->Release () ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
 | 
						|
					CoTaskMemFree ( t_Name ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				if ( t_Result != S_FALSE )
 | 
						|
				{
 | 
						|
					t_Result = WBEM_E_FAILED ;
 | 
						|
				}
 | 
						|
 | 
						|
				t_TaskEnumerator->Release () ;
 | 
						|
			}
 | 
						|
 | 
						|
			t_TaskScheduler->Release () ;
 | 
						|
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if ( t_Key_Name )
 | 
						|
	{
 | 
						|
		delete [] t_Key_Name ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) && t_Found == FALSE )
 | 
						|
	{
 | 
						|
		t_Result = WBEM_E_NOT_FOUND ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
        
 | 
						|
HRESULT CTask_IWbemServices :: DeleteInstanceAsync (
 | 
						|
 
 | 
						|
	const BSTR a_ObjectPath,
 | 
						|
    long a_Flags ,
 | 
						|
    IWbemContext *a_Context ,
 | 
						|
    IWbemObjectSink *a_Sink	
 | 
						|
)
 | 
						|
{
 | 
						|
	IWbemPath *t_Path = NULL ;
 | 
						|
 | 
						|
	HRESULT t_Result = CoCreateInstance (
 | 
						|
 | 
						|
		CLSID_WbemDefPath ,
 | 
						|
		NULL ,
 | 
						|
		CLSCTX_INPROC_SERVER ,
 | 
						|
		IID_IWbemPath ,
 | 
						|
		( void ** )  & t_Path
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		t_Result = t_Path->SetText ( WBEMPATH_CREATE_ACCEPT_ALL , a_ObjectPath ) ;
 | 
						|
		if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
		{
 | 
						|
			ULONG t_Length = 32 ; // None of supported classes is longer than this length
 | 
						|
			BSTR t_Class = SysAllocStringLen ( NULL , t_Length ) ; 
 | 
						|
			if ( t_Class )
 | 
						|
			{
 | 
						|
				t_Result = t_Path->GetClassName (
 | 
						|
 | 
						|
					& t_Length ,
 | 
						|
					t_Class
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					t_Result = CoImpersonateClient () ;
 | 
						|
 | 
						|
					if ( _wcsicmp ( t_Class , L"Win32_Task" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = DeleteInstanceAsync_Win32_Task ( 
 | 
						|
 | 
						|
							m_Win32_Task_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_Once" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = DeleteInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_Once_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_TIME_TRIGGER_ONCE
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_WeeklyTrigger" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = DeleteInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_WeeklyTrigger_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_TIME_TRIGGER_WEEKLY
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_DailyTrigger" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = DeleteInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_DailyTrigger_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_TIME_TRIGGER_DAILY
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_MonthlyDateTrigger" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = DeleteInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_MonthlyDateTrigger_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_TIME_TRIGGER_MONTHLYDATE
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_MonthlyDayOfWeekTrigger" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = DeleteInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_MonthlyDayOfWeekTrigger_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_TIME_TRIGGER_MONTHLYDOW
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_OnIdle" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = DeleteInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_OnIdle_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_EVENT_TRIGGER_ON_IDLE
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_AtSystemStart" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = DeleteInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_AtSystemStart_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_EVENT_TRIGGER_AT_SYSTEMSTART
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_AtLogon" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = DeleteInstanceAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
							m_Win32_AtLogon_Object ,
 | 
						|
							a_Flags ,
 | 
						|
							a_Context , 
 | 
						|
							a_Sink ,
 | 
						|
							t_Path ,
 | 
						|
							TASK_EVENT_TRIGGER_AT_LOGON
 | 
						|
						) ;
 | 
						|
					}
 | 
						|
					else if ( _wcsicmp ( t_Class , L"Win32_ScheduledWorkItemTrigger" ) == 0 ) 
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_NOT_SUPPORTED ;
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
				SysFreeString ( t_Class ) ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		t_Path->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	a_Sink->SetStatus ( 0 , t_Result , NULL , NULL ) ;
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: CreateInstanceEnum ( 
 | 
						|
 | 
						|
	const BSTR a_Class, 
 | 
						|
	long a_Flags, 
 | 
						|
	IWbemContext FAR *a_Context, 
 | 
						|
	IEnumWbemClassObject **a_Enum
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = WBEM_E_NOT_AVAILABLE ;
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: CreateInstanceEnumAsync (
 | 
						|
 | 
						|
 	const BSTR a_Class ,
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemObjectSink FAR *a_Sink
 | 
						|
 | 
						|
) 
 | 
						|
{
 | 
						|
	HRESULT t_Result = CoImpersonateClient () ;
 | 
						|
 | 
						|
	if ( _wcsicmp ( a_Class , L"Win32_Task" ) == 0 ) 
 | 
						|
	{
 | 
						|
		t_Result = CreateInstanceEnumAsync_Win32_Task ( 
 | 
						|
 | 
						|
			m_Win32_Task_Object ,
 | 
						|
			a_Flags ,
 | 
						|
			a_Context , 
 | 
						|
			a_Sink
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	else if ( _wcsicmp ( a_Class , L"Win32_Once" ) == 0 ) 
 | 
						|
	{
 | 
						|
		t_Result = CreateInstanceEnumAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
			m_Win32_Once_Object ,
 | 
						|
			a_Flags ,
 | 
						|
			a_Context , 
 | 
						|
			a_Sink ,
 | 
						|
			TASK_TIME_TRIGGER_ONCE
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	else if ( _wcsicmp ( a_Class , L"Win32_WeeklyTrigger" ) == 0 ) 
 | 
						|
	{
 | 
						|
		t_Result = CreateInstanceEnumAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
			m_Win32_WeeklyTrigger_Object ,
 | 
						|
			a_Flags ,
 | 
						|
			a_Context , 
 | 
						|
			a_Sink ,
 | 
						|
			TASK_TIME_TRIGGER_WEEKLY
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	else if ( _wcsicmp ( a_Class , L"Win32_DailyTrigger" ) == 0 ) 
 | 
						|
	{
 | 
						|
		t_Result = CreateInstanceEnumAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
			m_Win32_DailyTrigger_Object ,
 | 
						|
			a_Flags ,
 | 
						|
			a_Context , 
 | 
						|
			a_Sink ,
 | 
						|
			TASK_TIME_TRIGGER_DAILY
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	else if ( _wcsicmp ( a_Class , L"Win32_MonthlyDateTrigger" ) == 0 ) 
 | 
						|
	{
 | 
						|
		t_Result = CreateInstanceEnumAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
			m_Win32_MonthlyDateTrigger_Object ,
 | 
						|
			a_Flags ,
 | 
						|
			a_Context , 
 | 
						|
			a_Sink ,
 | 
						|
			TASK_TIME_TRIGGER_MONTHLYDATE
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	else if ( _wcsicmp ( a_Class , L"Win32_MonthlyDayOfWeekTrigger" ) == 0 ) 
 | 
						|
	{
 | 
						|
		t_Result = CreateInstanceEnumAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
			m_Win32_MonthlyDayOfWeekTrigger_Object ,
 | 
						|
			a_Flags ,
 | 
						|
			a_Context , 
 | 
						|
			a_Sink ,
 | 
						|
			TASK_TIME_TRIGGER_MONTHLYDOW
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	else if ( _wcsicmp ( a_Class , L"Win32_OnIdle" ) == 0 ) 
 | 
						|
	{
 | 
						|
		t_Result = CreateInstanceEnumAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
			m_Win32_OnIdle_Object ,
 | 
						|
			a_Flags ,
 | 
						|
			a_Context , 
 | 
						|
			a_Sink ,
 | 
						|
			TASK_EVENT_TRIGGER_ON_IDLE
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	else if ( _wcsicmp ( a_Class , L"Win32_AtSystemStart" ) == 0 ) 
 | 
						|
	{
 | 
						|
		t_Result = CreateInstanceEnumAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
			m_Win32_AtSystemStart_Object ,
 | 
						|
			a_Flags ,
 | 
						|
			a_Context , 
 | 
						|
			a_Sink ,
 | 
						|
			TASK_EVENT_TRIGGER_AT_SYSTEMSTART
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	else if ( _wcsicmp ( a_Class , L"Win32_AtLogon" ) == 0 ) 
 | 
						|
	{
 | 
						|
		t_Result = CreateInstanceEnumAsync_Win32_Trigger ( 
 | 
						|
 | 
						|
			m_Win32_AtLogon_Object ,
 | 
						|
			a_Flags ,
 | 
						|
			a_Context , 
 | 
						|
			a_Sink ,
 | 
						|
			TASK_EVENT_TRIGGER_AT_LOGON
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	else if ( _wcsicmp ( a_Class , L"Win32_ScheduledWorkItemTrigger" ) == 0 ) 
 | 
						|
	{
 | 
						|
		t_Result = CreateInstanceEnumAsync_Win32_ScheduledWorkItemTrigger ( 
 | 
						|
 | 
						|
			m_Win32_ScheduledWorkItemTrigger_Object ,
 | 
						|
			a_Flags ,
 | 
						|
			a_Context , 
 | 
						|
			a_Sink
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
	}
 | 
						|
	
 | 
						|
	a_Sink->SetStatus ( 0 , t_Result , NULL , NULL ) ;
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: ExecQuery ( 
 | 
						|
 | 
						|
	const BSTR a_QueryLanguage, 
 | 
						|
	const BSTR a_Query, 
 | 
						|
	long a_Flags, 
 | 
						|
	IWbemContext *a_Context ,
 | 
						|
	IEnumWbemClassObject **a_Enumerator
 | 
						|
)
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: ExecQueryAsync ( 
 | 
						|
		
 | 
						|
	const BSTR a_QueryFormat, 
 | 
						|
	const BSTR a_Query, 
 | 
						|
	long a_Flags, 
 | 
						|
	IWbemContext *a_Context ,
 | 
						|
	IWbemObjectSink *a_Sink
 | 
						|
) 
 | 
						|
{
 | 
						|
	HRESULT t_Result = CoImpersonateClient () ;
 | 
						|
 | 
						|
	a_Sink->SetStatus ( WBEM_STATUS_REQUIREMENTS , S_OK , NULL , NULL ) ;
 | 
						|
 | 
						|
	t_Result = CreateInstanceEnumAsync_Win32_Task ( 
 | 
						|
 | 
						|
		m_Win32_Task_Object ,
 | 
						|
		a_Flags ,
 | 
						|
		a_Context , 
 | 
						|
		a_Sink
 | 
						|
	) ;
 | 
						|
 | 
						|
	a_Sink->SetStatus ( 0 , t_Result , NULL , NULL ) ;
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: ExecNotificationQuery ( 
 | 
						|
 | 
						|
	const BSTR a_QueryLanguage,
 | 
						|
    const BSTR a_Query,
 | 
						|
    long a_Flags,
 | 
						|
    IWbemContext *a_Context ,
 | 
						|
    IEnumWbemClassObject **a_Enumerator
 | 
						|
)
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
        
 | 
						|
HRESULT CTask_IWbemServices :: ExecNotificationQueryAsync ( 
 | 
						|
            
 | 
						|
	const BSTR a_QueryLanguage,
 | 
						|
    const BSTR a_Query,
 | 
						|
    long a_Flags ,
 | 
						|
    IWbemContext *a_Context ,
 | 
						|
    IWbemObjectSink *a_Sink
 | 
						|
)
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}       
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT STDMETHODCALLTYPE CTask_IWbemServices :: ExecMethod ( 
 | 
						|
 | 
						|
	const BSTR ObjectPath,
 | 
						|
    const BSTR MethodName,
 | 
						|
    long lFlags,
 | 
						|
    IWbemContext FAR *pCtx,
 | 
						|
    IWbemClassObject FAR *pInParams,
 | 
						|
    IWbemClassObject FAR *FAR *ppOutParams,
 | 
						|
    IWbemCallResult FAR *FAR *ppCallResult
 | 
						|
)
 | 
						|
{
 | 
						|
	return WBEM_E_NOT_AVAILABLE ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: ExecMethodAsync_Win32_Task (
 | 
						|
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemObjectSink FAR *a_Sink ,
 | 
						|
	IWbemPath *a_Path ,
 | 
						|
	BSTR a_MethodName
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	wchar_t *t_Key_Name = NULL ;
 | 
						|
 | 
						|
	IWbemPathKeyList *t_Keys = NULL ;
 | 
						|
 | 
						|
	t_Result = a_Path->GetKeyList (
 | 
						|
 | 
						|
		& t_Keys 
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		ULONG t_KeyCount = 0 ;
 | 
						|
		t_Result = t_Keys->GetCount (
 | 
						|
 | 
						|
			& t_KeyCount 
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			if ( t_KeyCount == 1 )
 | 
						|
			{
 | 
						|
				wchar_t t_Key [ 32 ] ; 
 | 
						|
				ULONG t_KeyLength = 32 ;
 | 
						|
				ULONG t_KeyValueLength = 0 ;
 | 
						|
				ULONG t_KeyType = 0 ;
 | 
						|
 | 
						|
				t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
					0 ,
 | 
						|
					0 ,
 | 
						|
					& t_KeyLength ,
 | 
						|
					t_Key ,
 | 
						|
					& t_KeyValueLength ,
 | 
						|
					NULL ,
 | 
						|
					& t_KeyType
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
				{
 | 
						|
					if ( t_KeyType == CIM_STRING )
 | 
						|
					{
 | 
						|
						t_Key_Name = new wchar_t [ t_KeyValueLength ] ;
 | 
						|
						if ( t_Key_Name )
 | 
						|
						{
 | 
						|
							t_Result = t_Keys->GetKey (
 | 
						|
 | 
						|
								0 ,
 | 
						|
								0 ,
 | 
						|
								& t_KeyLength ,
 | 
						|
								t_Key ,
 | 
						|
								& t_KeyValueLength ,
 | 
						|
								t_Key_Name ,
 | 
						|
								& t_KeyType
 | 
						|
							) ;
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							t_Result = WBEM_E_OUT_OF_MEMORY ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	BOOL t_Found = FALSE ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		ITaskScheduler *t_TaskScheduler = NULL ;
 | 
						|
 | 
						|
		t_Result = CoCreateInstance (
 | 
						|
 | 
						|
			CLSID_CTaskScheduler,
 | 
						|
			NULL,
 | 
						|
			CLSCTX_INPROC_SERVER,
 | 
						|
			IID_ITaskScheduler,
 | 
						|
			(void **) & t_TaskScheduler
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
		{
 | 
						|
			IEnumTasks *t_TaskEnumerator = NULL ;
 | 
						|
			t_Result = t_TaskScheduler->Enum ( & t_TaskEnumerator ) ;
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				wchar_t **t_Name = NULL ;
 | 
						|
				t_TaskEnumerator->Reset () ;
 | 
						|
				while ( ( t_Result = t_TaskEnumerator->Next ( 1 , & t_Name , NULL ) ) == S_OK ) 
 | 
						|
				{
 | 
						|
					if ( wcscmp ( t_Name [ 0 ] , t_Key_Name ) == 0 )
 | 
						|
					{
 | 
						|
						t_Found = TRUE ;
 | 
						|
 | 
						|
						IScheduledWorkItem *t_ScheduledWorkItem = NULL ;
 | 
						|
						t_Result = t_TaskScheduler->Activate (
 | 
						|
 | 
						|
							t_Name [ 0 ] , 
 | 
						|
							IID_IScheduledWorkItem , 
 | 
						|
							( IUnknown ** ) & t_ScheduledWorkItem
 | 
						|
						) ;
 | 
						|
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							if ( _wcsicmp ( a_MethodName , L"Run" ) == 0 ) 
 | 
						|
							{
 | 
						|
								t_Result = t_ScheduledWorkItem->Run () ;
 | 
						|
							}
 | 
						|
							else if ( _wcsicmp ( a_MethodName , L"Terminate" ) == 0 ) 
 | 
						|
							{
 | 
						|
								t_Result = t_ScheduledWorkItem->Terminate () ;
 | 
						|
							}
 | 
						|
							
 | 
						|
							t_ScheduledWorkItem->Release () ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
 | 
						|
					CoTaskMemFree ( t_Name ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				if ( t_Result != S_FALSE )
 | 
						|
				{
 | 
						|
					t_Result = WBEM_E_FAILED ;
 | 
						|
				}
 | 
						|
 | 
						|
				t_TaskEnumerator->Release () ;
 | 
						|
			}
 | 
						|
 | 
						|
			t_TaskScheduler->Release () ;
 | 
						|
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if ( t_Key_Name )
 | 
						|
	{
 | 
						|
		delete [] t_Key_Name ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) && t_Found == FALSE )
 | 
						|
	{
 | 
						|
		t_Result = WBEM_E_NOT_FOUND ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT STDMETHODCALLTYPE CTask_IWbemServices :: ExecMethodAsync ( 
 | 
						|
 | 
						|
    const BSTR a_ObjectPath,
 | 
						|
    const BSTR a_MethodName,
 | 
						|
    long a_Flags,
 | 
						|
    IWbemContext *a_Context,
 | 
						|
    IWbemClassObject *a_InParams,
 | 
						|
	IWbemObjectSink *a_Sink
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	IWbemPath *t_Path = NULL ;
 | 
						|
 | 
						|
	if ( a_ObjectPath && a_MethodName ) 
 | 
						|
	{
 | 
						|
		t_Result = CoCreateInstance (
 | 
						|
 | 
						|
			CLSID_WbemDefPath ,
 | 
						|
			NULL ,
 | 
						|
			CLSCTX_INPROC_SERVER ,
 | 
						|
			IID_IWbemPath ,
 | 
						|
			( void ** )  & t_Path
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			t_Result = t_Path->SetText ( WBEMPATH_CREATE_ACCEPT_ALL , a_ObjectPath ) ;
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				ULONG t_Length = 32 ; // None of supported classes is longer than this length
 | 
						|
				BSTR t_Class = SysAllocStringLen ( NULL , t_Length ) ; 
 | 
						|
				if ( t_Class )
 | 
						|
				{
 | 
						|
					t_Result = t_Path->GetClassName (
 | 
						|
 | 
						|
						& t_Length ,
 | 
						|
						t_Class
 | 
						|
					) ;
 | 
						|
 | 
						|
					if ( SUCCEEDED ( t_Result ) )
 | 
						|
					{
 | 
						|
						if ( _wcsicmp ( t_Class , L"Win32_ScheduledWorkItem" ) == 0 ) 
 | 
						|
						{
 | 
						|
							if ( _wcsicmp ( a_MethodName , L"Run" ) == 0 ) 
 | 
						|
							{
 | 
						|
								t_Result = ExecMethodAsync_Win32_Task ( 
 | 
						|
 | 
						|
									m_Win32_Task_Object ,
 | 
						|
									a_Flags ,
 | 
						|
									a_Context , 
 | 
						|
									a_Sink ,
 | 
						|
									t_Path ,
 | 
						|
									a_MethodName 
 | 
						|
								) ;
 | 
						|
							}
 | 
						|
							else if ( _wcsicmp ( a_MethodName , L"Terminate" ) == 0 ) 
 | 
						|
							{
 | 
						|
								t_Result = ExecMethodAsync_Win32_Task ( 
 | 
						|
 | 
						|
									m_Win32_Task_Object ,
 | 
						|
									a_Flags ,
 | 
						|
									a_Context , 
 | 
						|
									a_Sink ,
 | 
						|
									t_Path ,
 | 
						|
									a_MethodName 
 | 
						|
								) ;
 | 
						|
							}
 | 
						|
							else
 | 
						|
							{
 | 
						|
								t_Result = WBEM_E_INVALID_METHOD ;
 | 
						|
							}
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							t_Result = WBEM_E_INVALID_CLASS ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
 | 
						|
					SysFreeString ( t_Class ) ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			t_Path->Release () ;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		t_Result = WBEM_E_INVALID_PARAMETER ;
 | 
						|
	}
 | 
						|
 | 
						|
	a_Sink->SetStatus ( 0 , t_Result , NULL , NULL ) ;
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT GetClassObject (
 | 
						|
 | 
						|
	IWbemServices *a_CoreService,
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	wchar_t *a_Class ,
 | 
						|
	IWbemClassObject **a_ClassObject
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	BSTR t_Class = SysAllocString ( a_Class ) ;
 | 
						|
	if ( t_Class ) 
 | 
						|
	{
 | 
						|
		t_Result = a_CoreService->GetObject (
 | 
						|
 | 
						|
			t_Class ,
 | 
						|
			0 ,
 | 
						|
			a_Context ,
 | 
						|
			a_ClassObject ,
 | 
						|
			NULL 
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
		}
 | 
						|
 | 
						|
		SysFreeString ( t_Class ) ;
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		t_Result = WBEM_E_OUT_OF_MEMORY ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: Initialize (
 | 
						|
 | 
						|
	LPWSTR a_User,
 | 
						|
	LONG a_Flags,
 | 
						|
	LPWSTR a_Namespace,
 | 
						|
	LPWSTR a_Locale,
 | 
						|
	IWbemServices *a_CoreService,         // For anybody
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemProviderInitSink *a_Sink     // For init signals
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	if ( a_CoreService ) 
 | 
						|
	{
 | 
						|
		m_CoreService = a_CoreService ;
 | 
						|
		m_CoreService->AddRef () ;
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		t_Result = WBEM_E_INVALID_PARAMETER ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		if ( a_User ) 
 | 
						|
		{
 | 
						|
			m_User = SysAllocString ( a_User ) ;
 | 
						|
			if ( m_User == NULL )
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_OUT_OF_MEMORY ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		if ( a_Locale ) 
 | 
						|
		{
 | 
						|
			m_Locale = SysAllocString ( a_Locale ) ;
 | 
						|
			if ( m_Locale == NULL )
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_OUT_OF_MEMORY ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		if ( a_Namespace ) 
 | 
						|
		{
 | 
						|
			m_Namespace = SysAllocString ( a_Namespace ) ;
 | 
						|
			if ( m_Namespace == NULL )
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_OUT_OF_MEMORY ;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		t_Result = GetClassObject (
 | 
						|
 | 
						|
			a_CoreService ,
 | 
						|
			a_Context ,
 | 
						|
			L"Win32_Task" ,
 | 
						|
			& m_Win32_Task_Object
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		t_Result = GetClassObject (
 | 
						|
 | 
						|
			a_CoreService ,
 | 
						|
			a_Context ,
 | 
						|
			L"Win32_Once" ,
 | 
						|
			& m_Win32_Once_Object
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		t_Result = GetClassObject (
 | 
						|
 | 
						|
			a_CoreService ,
 | 
						|
			a_Context ,
 | 
						|
			L"Win32_WeeklyTrigger" ,
 | 
						|
			& m_Win32_WeeklyTrigger_Object
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		t_Result = GetClassObject (
 | 
						|
 | 
						|
			a_CoreService ,
 | 
						|
			a_Context ,
 | 
						|
			L"Win32_DailyTrigger" ,
 | 
						|
			& m_Win32_DailyTrigger_Object
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		t_Result = GetClassObject (
 | 
						|
 | 
						|
			a_CoreService ,
 | 
						|
			a_Context ,
 | 
						|
			L"Win32_MonthlyDateTrigger" ,
 | 
						|
			& m_Win32_MonthlyDateTrigger_Object
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		t_Result = GetClassObject (
 | 
						|
 | 
						|
			a_CoreService ,
 | 
						|
			a_Context ,
 | 
						|
			L"Win32_MonthlyDayOfWeekTrigger" ,
 | 
						|
			& m_Win32_MonthlyDayOfWeekTrigger_Object
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		t_Result = GetClassObject (
 | 
						|
 | 
						|
			a_CoreService ,
 | 
						|
			a_Context ,
 | 
						|
			L"Win32_OnIdle" ,
 | 
						|
			& m_Win32_OnIdle_Object
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		t_Result = GetClassObject (
 | 
						|
 | 
						|
			a_CoreService ,
 | 
						|
			a_Context ,
 | 
						|
			L"Win32_AtSystemStart" ,
 | 
						|
			& m_Win32_AtSystemStart_Object
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
	
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		t_Result = GetClassObject (
 | 
						|
 | 
						|
			a_CoreService ,
 | 
						|
			a_Context ,
 | 
						|
			L"Win32_AtLogon" ,
 | 
						|
			& m_Win32_AtLogon_Object
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		t_Result = GetClassObject (
 | 
						|
 | 
						|
			a_CoreService ,
 | 
						|
			a_Context ,
 | 
						|
			L"Win32_ScheduledWorkItemTrigger" ,
 | 
						|
			& m_Win32_ScheduledWorkItemTrigger_Object
 | 
						|
		) ;
 | 
						|
	}
 | 
						|
 | 
						|
	a_Sink->SetStatus ( t_Result , 0 ) ;
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: Shutdown (
 | 
						|
 | 
						|
	LONG a_Flags ,
 | 
						|
	ULONG a_MaxMilliSeconds ,
 | 
						|
	IWbemContext *a_Context
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: CreateInstanceEnumAsync_Win32_Task (
 | 
						|
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemObjectSink FAR *a_Sink
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	ITaskScheduler *t_TaskScheduler = NULL ;
 | 
						|
 | 
						|
    t_Result = CoCreateInstance (
 | 
						|
 | 
						|
		CLSID_CTaskScheduler,
 | 
						|
        NULL,
 | 
						|
        CLSCTX_INPROC_SERVER,
 | 
						|
        IID_ITaskScheduler,
 | 
						|
        (void **) & t_TaskScheduler
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		IEnumTasks *t_TaskEnumerator = NULL ;
 | 
						|
		t_Result = t_TaskScheduler->Enum ( & t_TaskEnumerator ) ;
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			wchar_t **t_Name = NULL ;
 | 
						|
			t_TaskEnumerator->Reset () ;
 | 
						|
			while ( ( t_Result = t_TaskEnumerator->Next ( 1 , & t_Name , NULL ) ) == S_OK ) 
 | 
						|
			{
 | 
						|
				IWbemClassObject *t_Instance = NULL ;
 | 
						|
				t_Result = a_ClassObject->SpawnInstance ( 
 | 
						|
 | 
						|
					0 , 
 | 
						|
					& t_Instance
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					HRESULT t_Result = CommonAsync_Win32_Task_Load (
 | 
						|
 | 
						|
						t_TaskScheduler ,
 | 
						|
						t_Name [ 0 ] ,
 | 
						|
						t_Instance
 | 
						|
					) ;
 | 
						|
 | 
						|
					if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
					{
 | 
						|
						t_Result = a_Sink->Indicate ( 1 , & t_Instance ) ;
 | 
						|
					}
 | 
						|
 | 
						|
					t_Instance->Release () ;
 | 
						|
				}
 | 
						|
 | 
						|
				CoTaskMemFree ( t_Name ) ;
 | 
						|
			}
 | 
						|
 | 
						|
			if ( t_Result != S_FALSE )
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_FAILED ;
 | 
						|
			}
 | 
						|
 | 
						|
			t_TaskEnumerator->Release () ;
 | 
						|
		}
 | 
						|
 | 
						|
		t_TaskScheduler->Release () ;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: CommonAsync_Win32_Task_Load (
 | 
						|
 | 
						|
	ITaskScheduler *a_TaskScheduler ,
 | 
						|
	wchar_t *a_TaskName ,
 | 
						|
	IWbemClassObject *a_Instance 
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	_IWmiObject *t_FastInstance = NULL ;
 | 
						|
	t_Result = a_Instance->QueryInterface ( IID__IWmiObject , ( void ** ) & t_FastInstance ) ;
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		ITask *t_Task = NULL ;
 | 
						|
		t_Result = a_TaskScheduler->Activate (
 | 
						|
 | 
						|
			a_TaskName , 
 | 
						|
			IID_ITask , 
 | 
						|
			( IUnknown ** ) & t_Task
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			ProviderSubSystem_Common_Globals :: Set_String ( a_Instance , L"WorkItemName" , a_TaskName ) ;
 | 
						|
 | 
						|
			wchar_t *t_ApplicationName = NULL ;
 | 
						|
			t_Result = t_Task->GetApplicationName ( & t_ApplicationName ) ;
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				ProviderSubSystem_Common_Globals :: Set_String ( a_Instance , L"ApplicationName" , t_ApplicationName ) ;
 | 
						|
 | 
						|
				CoTaskMemFree ( t_ApplicationName ) ;
 | 
						|
			}
 | 
						|
 | 
						|
			wchar_t *t_WorkingDirectory = NULL ;
 | 
						|
			t_Result = t_Task->GetWorkingDirectory ( & t_WorkingDirectory ) ;
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				ProviderSubSystem_Common_Globals :: Set_String ( a_Instance , L"WorkingDirectory" , t_WorkingDirectory ) ;
 | 
						|
 | 
						|
				CoTaskMemFree ( t_WorkingDirectory ) ;
 | 
						|
			}
 | 
						|
 | 
						|
			wchar_t *t_Parameters = NULL ;
 | 
						|
			t_Result = t_Task->GetParameters ( & t_Parameters ) ;
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				ProviderSubSystem_Common_Globals :: Set_String ( a_Instance , L"Parameters" , t_Parameters ) ;
 | 
						|
 | 
						|
				CoTaskMemFree ( t_Parameters ) ;
 | 
						|
			}
 | 
						|
 | 
						|
			DWORD t_MaxRunTime = 0 ;
 | 
						|
			t_Result = t_Task->GetMaxRunTime ( & t_MaxRunTime ) ;
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"MaxRunTime" , t_MaxRunTime ) ;
 | 
						|
			}
 | 
						|
 | 
						|
			DWORD t_Priority = 0 ;
 | 
						|
			t_Result = t_Task->GetPriority ( & t_Priority ) ;
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"Priority" , t_Priority ) ;
 | 
						|
			}
 | 
						|
 | 
						|
			IScheduledWorkItem *t_ScheduledWorkItem = NULL ;
 | 
						|
			t_Result = t_Task->QueryInterface (
 | 
						|
 | 
						|
				IID_IScheduledWorkItem , 
 | 
						|
				( void ** ) & t_ScheduledWorkItem
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				wchar_t *t_Comment = NULL ;
 | 
						|
				t_Result = t_ScheduledWorkItem->GetComment ( & t_Comment ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_String ( a_Instance , L"Comment" , t_Comment ) ;
 | 
						|
 | 
						|
					CoTaskMemFree ( t_Comment ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				wchar_t *t_Creator = NULL ;
 | 
						|
				t_Result = t_ScheduledWorkItem->GetCreator ( & t_Creator ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_String ( a_Instance , L"Creator" , t_Creator ) ;
 | 
						|
 | 
						|
					CoTaskMemFree ( t_Creator ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				wchar_t *t_AccountInformation = NULL ;
 | 
						|
				t_Result = t_ScheduledWorkItem->GetAccountInformation ( & t_AccountInformation ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_String ( a_Instance , L"AccountName" , t_AccountInformation ) ;
 | 
						|
 | 
						|
					CoTaskMemFree ( t_AccountInformation ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				HRESULT t_Status = 0 ;
 | 
						|
				t_Result = t_ScheduledWorkItem->GetStatus ( & t_Status ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"Status" , t_Status ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				DWORD t_ExitCode = 0 ;
 | 
						|
				t_Result = t_ScheduledWorkItem->GetExitCode ( & t_ExitCode ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"ExitCode" , t_ExitCode ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				DWORD t_Flags = 0 ;
 | 
						|
				t_Result = t_ScheduledWorkItem->GetExitCode ( & t_Flags ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"Flags" , t_Flags ) ;
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_Bool ( t_FastInstance , L"Enabled" , ( t_Flags & TASK_FLAG_DISABLED ) == 0 ) ;
 | 
						|
 | 
						|
				}
 | 
						|
 | 
						|
				WORD t_ErrorRetryCount = 0 ;
 | 
						|
				t_Result = t_ScheduledWorkItem->GetErrorRetryCount ( & t_ErrorRetryCount ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"RetryCount" , t_ErrorRetryCount ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				WORD t_ErrorRetryInterval = 0 ;
 | 
						|
				t_Result = t_ScheduledWorkItem->GetErrorRetryInterval ( & t_ErrorRetryInterval ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"RetryInterval" , t_ErrorRetryInterval ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				WORD t_IdleWait = 0 ;
 | 
						|
				WORD t_DeadlineMinutes = 0 ;
 | 
						|
 | 
						|
				t_Result = t_ScheduledWorkItem->GetIdleWait ( & t_IdleWait , &  t_DeadlineMinutes ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"IdleWait" , t_IdleWait ) ;
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"Deadline" , t_DeadlineMinutes ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				SYSTEMTIME t_LastRunTime ;
 | 
						|
				t_Result = t_ScheduledWorkItem->GetMostRecentRunTime ( & t_LastRunTime ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					FILETIME t_FileTime ;
 | 
						|
 | 
						|
					BOOL t_Status = SystemTimeToFileTime (
 | 
						|
 | 
						|
					  & t_LastRunTime ,
 | 
						|
					  & t_FileTime
 | 
						|
					) ;
 | 
						|
 | 
						|
					if ( t_Status )
 | 
						|
					{
 | 
						|
						ProviderSubSystem_Common_Globals :: Set_DateTime ( a_Instance , L"LastRunTime" , t_FileTime ) ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
				SYSTEMTIME t_NextRunTime ;
 | 
						|
				t_Result = t_ScheduledWorkItem->GetNextRunTime ( & t_NextRunTime ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					FILETIME t_FileTime ;
 | 
						|
 | 
						|
					BOOL t_Status = SystemTimeToFileTime (
 | 
						|
 | 
						|
					  & t_NextRunTime ,
 | 
						|
					  & t_FileTime
 | 
						|
					) ;
 | 
						|
 | 
						|
					if ( t_Status )
 | 
						|
					{
 | 
						|
						ProviderSubSystem_Common_Globals :: Set_DateTime ( a_Instance , L"NextRunTime" , t_FileTime ) ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
				WORD t_ItemDataByteCount = 0 ;
 | 
						|
				BYTE *t_ItemDataByte = NULL ;
 | 
						|
 | 
						|
				t_Result = t_ScheduledWorkItem->GetWorkItemData ( & t_ItemDataByteCount , & t_ItemDataByte ) ;
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					ProviderSubSystem_Common_Globals :: Set_Byte_Array ( t_FastInstance , L"ItemData" , t_ItemDataByte , t_ItemDataByteCount ) ;
 | 
						|
 | 
						|
					CoTaskMemFree ( t_ItemDataByte ) ;
 | 
						|
				}
 | 
						|
 | 
						|
				t_ScheduledWorkItem->Release () ;
 | 
						|
			}
 | 
						|
 | 
						|
			t_Task->Release () ;
 | 
						|
		}
 | 
						|
 | 
						|
		t_FastInstance->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: CreateInstanceEnumAsync_Win32_Trigger (
 | 
						|
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemObjectSink FAR *a_Sink ,
 | 
						|
	TASK_TRIGGER_TYPE a_TriggerType 
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	ITaskScheduler *t_TaskScheduler = NULL ;
 | 
						|
 | 
						|
    t_Result = CoCreateInstance (
 | 
						|
 | 
						|
		CLSID_CTaskScheduler,
 | 
						|
        NULL,
 | 
						|
        CLSCTX_INPROC_SERVER,
 | 
						|
        IID_ITaskScheduler,
 | 
						|
        (void **) & t_TaskScheduler
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		IEnumTasks *t_TaskEnumerator = NULL ;
 | 
						|
		t_Result = t_TaskScheduler->Enum ( & t_TaskEnumerator ) ;
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			wchar_t **t_Name = NULL ;
 | 
						|
			t_TaskEnumerator->Reset () ;
 | 
						|
			while ( ( t_Result = t_TaskEnumerator->Next ( 1 , & t_Name , NULL ) ) == S_OK ) 
 | 
						|
			{
 | 
						|
				HRESULT t_Result = CreateInstanceEnumAsync_Win32_Trigger_Enumerate (
 | 
						|
 | 
						|
					a_ClassObject ,
 | 
						|
					a_Sink ,
 | 
						|
					t_TaskScheduler ,
 | 
						|
					t_Name [ 0 ] ,
 | 
						|
					a_TriggerType
 | 
						|
				) ;	
 | 
						|
 | 
						|
				CoTaskMemFree ( t_Name ) ;
 | 
						|
			}
 | 
						|
 | 
						|
			if ( t_Result != S_FALSE )
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_FAILED ;
 | 
						|
			}
 | 
						|
 | 
						|
			t_TaskEnumerator->Release () ;
 | 
						|
		}
 | 
						|
 | 
						|
		t_TaskScheduler->Release () ;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: CreateInstanceEnumAsync_Win32_Trigger_Enumerate (
 | 
						|
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	IWbemObjectSink *a_Sink ,
 | 
						|
	ITaskScheduler *a_TaskScheduler ,
 | 
						|
	wchar_t *a_TaskName ,
 | 
						|
	TASK_TRIGGER_TYPE a_TriggerType 
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	ITask *t_Task = NULL ;
 | 
						|
	t_Result = a_TaskScheduler->Activate (
 | 
						|
 | 
						|
		a_TaskName , 
 | 
						|
		IID_ITask , 
 | 
						|
		( IUnknown ** ) & t_Task
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		IScheduledWorkItem *t_ScheduledWorkItem = NULL ;
 | 
						|
		t_Result = t_Task->QueryInterface (
 | 
						|
 | 
						|
			IID_IScheduledWorkItem , 
 | 
						|
			( void ** ) & t_ScheduledWorkItem
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			WORD t_TriggerCount = 0 ;
 | 
						|
 | 
						|
			t_Result = t_ScheduledWorkItem->GetTriggerCount(
 | 
						|
 | 
						|
				& t_TriggerCount 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				for ( WORD t_Index = 0 ;t_Index < t_TriggerCount ; t_Index ++ )
 | 
						|
				{
 | 
						|
					IWbemClassObject *t_Instance = NULL ;
 | 
						|
					t_Result = a_ClassObject->SpawnInstance ( 
 | 
						|
 | 
						|
						0 , 
 | 
						|
						& t_Instance
 | 
						|
					) ;
 | 
						|
 | 
						|
					if ( SUCCEEDED ( t_Result ) )
 | 
						|
					{
 | 
						|
						_IWmiObject *t_FastInstance = NULL ;
 | 
						|
						t_Result = t_Instance->QueryInterface ( IID__IWmiObject , ( void ** ) & t_FastInstance ) ;
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"TriggerId" , t_Index ) ;
 | 
						|
 | 
						|
							ProviderSubSystem_Common_Globals :: Set_String ( t_Instance , L"WorkItemName" , a_TaskName ) ;
 | 
						|
 | 
						|
							wchar_t *t_TriggerString = NULL ;
 | 
						|
							t_Result = t_Task->GetTriggerString ( t_Index , & t_TriggerString ) ;
 | 
						|
							if ( SUCCEEDED ( t_Result ) )
 | 
						|
							{
 | 
						|
								ProviderSubSystem_Common_Globals :: Set_String ( t_Instance , L"TriggerName" , t_TriggerString ) ;
 | 
						|
 | 
						|
								CoTaskMemFree ( t_TriggerString ) ;
 | 
						|
							}
 | 
						|
 | 
						|
							ITaskTrigger *t_Trigger = NULL ;
 | 
						|
							t_Result = t_Task->GetTrigger ( t_Index , & t_Trigger ) ;
 | 
						|
							if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
							{
 | 
						|
								TASK_TRIGGER t_TaskTrigger ;
 | 
						|
								ZeroMemory ( & t_TaskTrigger , sizeof ( t_TaskTrigger ) ) ;
 | 
						|
								t_TaskTrigger.cbTriggerSize = sizeof ( t_TaskTrigger ) ;
 | 
						|
 | 
						|
								t_Result = t_Trigger->GetTrigger ( & t_TaskTrigger ) ;
 | 
						|
								if ( SUCCEEDED ( t_Result ) )
 | 
						|
								{
 | 
						|
									ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"Type" , t_TaskTrigger.TriggerType ) ;
 | 
						|
 | 
						|
									SYSTEMTIME t_BeginDate ;
 | 
						|
									ZeroMemory ( & t_BeginDate , sizeof ( t_BeginDate ) ) ;
 | 
						|
 | 
						|
									t_BeginDate.wYear = t_TaskTrigger.wBeginYear ;
 | 
						|
									t_BeginDate.wMonth = t_TaskTrigger.wBeginMonth ;
 | 
						|
									t_BeginDate.wDay = t_TaskTrigger.wBeginDay ;
 | 
						|
 | 
						|
									FILETIME t_BeginFileTime ;
 | 
						|
 | 
						|
									BOOL t_Status = SystemTimeToFileTime (
 | 
						|
 | 
						|
									  & t_BeginDate ,
 | 
						|
									  & t_BeginFileTime
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( t_Status )
 | 
						|
									{
 | 
						|
										ProviderSubSystem_Common_Globals :: Set_DateTime ( t_Instance , L"BeginDate" , t_BeginFileTime ) ;
 | 
						|
									}
 | 
						|
 | 
						|
									if ( t_TaskTrigger.rgFlags == TASK_TRIGGER_FLAG_HAS_END_DATE )
 | 
						|
									{
 | 
						|
										SYSTEMTIME t_EndDate ;
 | 
						|
										ZeroMemory ( & t_EndDate , sizeof ( t_EndDate ) ) ;
 | 
						|
 | 
						|
										t_EndDate.wYear = t_TaskTrigger.wEndYear ;          
 | 
						|
										t_EndDate.wMonth = t_TaskTrigger.wEndMonth ;
 | 
						|
										t_EndDate.wDay = t_TaskTrigger.wEndDay ;        
 | 
						|
 | 
						|
										FILETIME t_EndFileTime ;
 | 
						|
 | 
						|
										t_Status = SystemTimeToFileTime (
 | 
						|
 | 
						|
										  & t_EndDate ,
 | 
						|
										  & t_EndFileTime
 | 
						|
										) ;
 | 
						|
 | 
						|
										if ( t_Status )
 | 
						|
										{
 | 
						|
											ProviderSubSystem_Common_Globals :: Set_DateTime ( t_Instance , L"EndDate" , t_EndFileTime ) ;
 | 
						|
										}
 | 
						|
									}
 | 
						|
 | 
						|
									ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"Interval" , t_TaskTrigger.MinutesInterval ) ;
 | 
						|
									ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"Duration" , t_TaskTrigger.MinutesDuration ) ;
 | 
						|
									ProviderSubSystem_Common_Globals :: Set_Bool ( t_FastInstance , L"KillAtDurationEnd" , t_TaskTrigger.rgFlags == TASK_TRIGGER_FLAG_KILL_AT_DURATION_END ) ;
 | 
						|
 | 
						|
									if ( t_TaskTrigger.TriggerType == a_TriggerType )
 | 
						|
									{	
 | 
						|
										switch ( t_TaskTrigger.TriggerType )
 | 
						|
										{
 | 
						|
											case TASK_TIME_TRIGGER_ONCE:
 | 
						|
											case TASK_TIME_TRIGGER_DAILY:
 | 
						|
											case TASK_TIME_TRIGGER_WEEKLY:
 | 
						|
											case TASK_TIME_TRIGGER_MONTHLYDATE:
 | 
						|
											case TASK_TIME_TRIGGER_MONTHLYDOW:
 | 
						|
											{
 | 
						|
												ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"StartHour" , t_TaskTrigger.wStartHour ) ;
 | 
						|
												ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"StartMinute" , t_TaskTrigger.wStartMinute ) ;
 | 
						|
											}
 | 
						|
											break ;
 | 
						|
 | 
						|
											case TASK_EVENT_TRIGGER_ON_IDLE:
 | 
						|
											case TASK_EVENT_TRIGGER_AT_SYSTEMSTART:
 | 
						|
											case TASK_EVENT_TRIGGER_AT_LOGON:
 | 
						|
											{
 | 
						|
											}
 | 
						|
											break ;
 | 
						|
 | 
						|
											default:
 | 
						|
											{
 | 
						|
												t_Result = WBEM_E_UNEXPECTED ;
 | 
						|
											}
 | 
						|
											break ;
 | 
						|
										}
 | 
						|
 | 
						|
										switch ( t_TaskTrigger.TriggerType )
 | 
						|
										{
 | 
						|
											case TASK_TIME_TRIGGER_DAILY:
 | 
						|
											{
 | 
						|
												ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"DailyInterval" , t_TaskTrigger.Type.Daily.DaysInterval ) ;
 | 
						|
											}
 | 
						|
											break ;
 | 
						|
 | 
						|
 | 
						|
											case TASK_TIME_TRIGGER_WEEKLY:
 | 
						|
											{
 | 
						|
												ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"WeeklyInterval" , t_TaskTrigger.Type.Weekly.WeeksInterval ) ;
 | 
						|
												ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"Days" , t_TaskTrigger.Type.Weekly.rgfDaysOfTheWeek ) ;
 | 
						|
											}
 | 
						|
											break ;
 | 
						|
 | 
						|
											case TASK_TIME_TRIGGER_MONTHLYDATE:
 | 
						|
											{
 | 
						|
												ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"Months" , t_TaskTrigger.Type.MonthlyDate.rgfMonths ) ;
 | 
						|
												ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"Days" , t_TaskTrigger.Type.MonthlyDate.rgfDays ) ;
 | 
						|
											}
 | 
						|
											break ;
 | 
						|
 | 
						|
											case TASK_TIME_TRIGGER_MONTHLYDOW:
 | 
						|
											{
 | 
						|
												ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"Week" , t_TaskTrigger.Type.MonthlyDOW.wWhichWeek ) ;
 | 
						|
												ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"Days" , t_TaskTrigger.Type.MonthlyDOW.rgfDaysOfTheWeek ) ;
 | 
						|
												ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"Months" , t_TaskTrigger.Type.MonthlyDOW.rgfMonths ) ;
 | 
						|
											}
 | 
						|
											break ;
 | 
						|
 | 
						|
											case TASK_TIME_TRIGGER_ONCE:
 | 
						|
											case TASK_EVENT_TRIGGER_ON_IDLE:
 | 
						|
											case TASK_EVENT_TRIGGER_AT_SYSTEMSTART:
 | 
						|
											case TASK_EVENT_TRIGGER_AT_LOGON:
 | 
						|
											{
 | 
						|
											}
 | 
						|
											break ;
 | 
						|
 | 
						|
											default:
 | 
						|
											{
 | 
						|
												t_Result = WBEM_E_UNEXPECTED ;
 | 
						|
											}
 | 
						|
											break ;
 | 
						|
										}
 | 
						|
 | 
						|
										if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
										{
 | 
						|
											t_Result = a_Sink->Indicate ( 1 , & t_Instance ) ;
 | 
						|
										}
 | 
						|
									}									
 | 
						|
								}
 | 
						|
 | 
						|
								t_Trigger->Release () ;
 | 
						|
							}
 | 
						|
 | 
						|
							t_FastInstance->Release () ;
 | 
						|
						}
 | 
						|
 | 
						|
						t_Instance->Release () ;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			t_ScheduledWorkItem->Release () ;
 | 
						|
		}
 | 
						|
 | 
						|
		t_Task->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: GetObjectAsync_Win32_Trigger_Load (
 | 
						|
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	IWbemObjectSink *a_Sink ,
 | 
						|
	ITaskScheduler *a_TaskScheduler ,
 | 
						|
	wchar_t *a_TaskName ,
 | 
						|
	WORD a_TriggerIndex ,
 | 
						|
	TASK_TRIGGER_TYPE a_TriggerType 
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	ITask *t_Task = NULL ;
 | 
						|
	t_Result = a_TaskScheduler->Activate (
 | 
						|
 | 
						|
		a_TaskName , 
 | 
						|
		IID_ITask , 
 | 
						|
		( IUnknown ** ) & t_Task
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		IScheduledWorkItem *t_ScheduledWorkItem = NULL ;
 | 
						|
		t_Result = t_Task->QueryInterface (
 | 
						|
 | 
						|
			IID_IScheduledWorkItem , 
 | 
						|
			( void ** ) & t_ScheduledWorkItem
 | 
						|
		) ;
 | 
						|
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			WORD t_TriggerCount = 0 ;
 | 
						|
 | 
						|
			t_Result = t_ScheduledWorkItem->GetTriggerCount(
 | 
						|
 | 
						|
				& t_TriggerCount 
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				IWbemClassObject *t_Instance = NULL ;
 | 
						|
				t_Result = a_ClassObject->SpawnInstance ( 
 | 
						|
 | 
						|
					0 , 
 | 
						|
					& t_Instance
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					_IWmiObject *t_FastInstance = NULL ;
 | 
						|
					t_Result = t_Instance->QueryInterface ( IID__IWmiObject , ( void ** ) & t_FastInstance ) ;
 | 
						|
					if ( SUCCEEDED ( t_Result ) )
 | 
						|
					{
 | 
						|
						ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"TriggerId" , a_TriggerIndex ) ;
 | 
						|
 | 
						|
						ProviderSubSystem_Common_Globals :: Set_String ( t_Instance , L"WorkItemName" , a_TaskName ) ;
 | 
						|
 | 
						|
						wchar_t *t_TriggerString = NULL ;
 | 
						|
						t_Result = t_Task->GetTriggerString ( a_TriggerIndex , & t_TriggerString ) ;
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							ProviderSubSystem_Common_Globals :: Set_String ( t_Instance , L"TriggerName" , t_TriggerString ) ;
 | 
						|
 | 
						|
							CoTaskMemFree ( t_TriggerString ) ;
 | 
						|
						}
 | 
						|
 | 
						|
						ITaskTrigger *t_Trigger = NULL ;
 | 
						|
						t_Result = t_Task->GetTrigger ( a_TriggerIndex , & t_Trigger ) ;
 | 
						|
						if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
						{
 | 
						|
							TASK_TRIGGER t_TaskTrigger ;
 | 
						|
							ZeroMemory ( & t_TaskTrigger , sizeof ( t_TaskTrigger ) ) ;
 | 
						|
							t_TaskTrigger.cbTriggerSize = sizeof ( t_TaskTrigger ) ;
 | 
						|
 | 
						|
							t_Result = t_Trigger->GetTrigger ( & t_TaskTrigger ) ;
 | 
						|
							if ( SUCCEEDED ( t_Result ) )
 | 
						|
							{
 | 
						|
								ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"Type" , t_TaskTrigger.TriggerType ) ;
 | 
						|
 | 
						|
								SYSTEMTIME t_BeginDate ;
 | 
						|
								ZeroMemory ( & t_BeginDate , sizeof ( t_BeginDate ) ) ;
 | 
						|
 | 
						|
								t_BeginDate.wYear = t_TaskTrigger.wBeginYear ;
 | 
						|
								t_BeginDate.wMonth = t_TaskTrigger.wBeginMonth ;
 | 
						|
								t_BeginDate.wDay = t_TaskTrigger.wBeginDay ;
 | 
						|
 | 
						|
								FILETIME t_BeginFileTime ;
 | 
						|
 | 
						|
								BOOL t_Status = SystemTimeToFileTime (
 | 
						|
 | 
						|
								  & t_BeginDate ,
 | 
						|
								  & t_BeginFileTime
 | 
						|
								) ;
 | 
						|
 | 
						|
								if ( t_Status )
 | 
						|
								{
 | 
						|
 | 
						|
									ProviderSubSystem_Common_Globals :: Set_DateTime ( t_Instance , L"BeginDate" , t_BeginFileTime ) ;
 | 
						|
								}
 | 
						|
 | 
						|
								if ( t_TaskTrigger.rgFlags == TASK_TRIGGER_FLAG_HAS_END_DATE )
 | 
						|
								{
 | 
						|
									SYSTEMTIME t_EndDate ;
 | 
						|
									ZeroMemory ( & t_EndDate , sizeof ( t_EndDate ) ) ;
 | 
						|
 | 
						|
									t_EndDate.wYear = t_TaskTrigger.wEndYear ;          
 | 
						|
									t_EndDate.wMonth = t_TaskTrigger.wEndMonth ;
 | 
						|
									t_EndDate.wDay = t_TaskTrigger.wEndDay ;        
 | 
						|
 | 
						|
									FILETIME t_EndFileTime ;
 | 
						|
 | 
						|
									t_Status = SystemTimeToFileTime (
 | 
						|
 | 
						|
									  & t_EndDate ,
 | 
						|
									  & t_EndFileTime
 | 
						|
									) ;
 | 
						|
 | 
						|
									if ( t_Status )
 | 
						|
									{
 | 
						|
										ProviderSubSystem_Common_Globals :: Set_DateTime ( t_Instance , L"EndDate" , t_EndFileTime ) ;
 | 
						|
									}
 | 
						|
								}
 | 
						|
 | 
						|
								ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"Interval" , t_TaskTrigger.MinutesInterval ) ;
 | 
						|
								ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"Duration" , t_TaskTrigger.MinutesDuration ) ;
 | 
						|
								ProviderSubSystem_Common_Globals :: Set_Bool ( t_FastInstance , L"KillAtDurationEnd" , t_TaskTrigger.rgFlags == TASK_TRIGGER_FLAG_KILL_AT_DURATION_END ) ;
 | 
						|
 | 
						|
								if ( t_TaskTrigger.TriggerType == a_TriggerType )
 | 
						|
								{	
 | 
						|
									switch ( t_TaskTrigger.TriggerType )
 | 
						|
									{
 | 
						|
										case TASK_TIME_TRIGGER_ONCE:
 | 
						|
										case TASK_TIME_TRIGGER_DAILY:
 | 
						|
										case TASK_TIME_TRIGGER_WEEKLY:
 | 
						|
										case TASK_TIME_TRIGGER_MONTHLYDATE:
 | 
						|
										case TASK_TIME_TRIGGER_MONTHLYDOW:
 | 
						|
										{
 | 
						|
											ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"StartHour" , t_TaskTrigger.wStartHour ) ;
 | 
						|
											ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"StartMinute" , t_TaskTrigger.wStartMinute ) ;
 | 
						|
										}
 | 
						|
										break ;
 | 
						|
 | 
						|
										case TASK_EVENT_TRIGGER_ON_IDLE:
 | 
						|
										case TASK_EVENT_TRIGGER_AT_SYSTEMSTART:
 | 
						|
										case TASK_EVENT_TRIGGER_AT_LOGON:
 | 
						|
										{
 | 
						|
										}
 | 
						|
										break ;
 | 
						|
 | 
						|
										default:
 | 
						|
										{
 | 
						|
											t_Result = WBEM_E_UNEXPECTED ;
 | 
						|
										}
 | 
						|
										break ;
 | 
						|
									}
 | 
						|
 | 
						|
									switch ( t_TaskTrigger.TriggerType )
 | 
						|
									{
 | 
						|
										case TASK_TIME_TRIGGER_DAILY:
 | 
						|
										{
 | 
						|
											ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"DailyInterval" , t_TaskTrigger.Type.Daily.DaysInterval ) ;
 | 
						|
										}
 | 
						|
										break ;
 | 
						|
 | 
						|
 | 
						|
										case TASK_TIME_TRIGGER_WEEKLY:
 | 
						|
										{
 | 
						|
											ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"WeeklyInterval" , t_TaskTrigger.Type.Weekly.WeeksInterval ) ;
 | 
						|
											ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"Days" , t_TaskTrigger.Type.Weekly.rgfDaysOfTheWeek ) ;
 | 
						|
										}
 | 
						|
										break ;
 | 
						|
 | 
						|
										case TASK_TIME_TRIGGER_MONTHLYDATE:
 | 
						|
										{
 | 
						|
											ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"Months" , t_TaskTrigger.Type.MonthlyDate.rgfMonths ) ;
 | 
						|
											ProviderSubSystem_Common_Globals :: Set_Uint32 ( t_FastInstance , L"Days" , t_TaskTrigger.Type.MonthlyDate.rgfDays ) ;
 | 
						|
										}
 | 
						|
										break ;
 | 
						|
 | 
						|
										case TASK_TIME_TRIGGER_MONTHLYDOW:
 | 
						|
										{
 | 
						|
											ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"Week" , t_TaskTrigger.Type.MonthlyDOW.wWhichWeek ) ;
 | 
						|
											ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"Days" , t_TaskTrigger.Type.MonthlyDOW.rgfDaysOfTheWeek ) ;
 | 
						|
											ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"Months" , t_TaskTrigger.Type.MonthlyDOW.rgfMonths ) ;
 | 
						|
										}
 | 
						|
										break ;
 | 
						|
 | 
						|
										case TASK_TIME_TRIGGER_ONCE:
 | 
						|
										case TASK_EVENT_TRIGGER_ON_IDLE:
 | 
						|
										case TASK_EVENT_TRIGGER_AT_SYSTEMSTART:
 | 
						|
										case TASK_EVENT_TRIGGER_AT_LOGON:
 | 
						|
										{
 | 
						|
										}
 | 
						|
										break ;
 | 
						|
 | 
						|
										default:
 | 
						|
										{
 | 
						|
											t_Result = WBEM_E_UNEXPECTED ;
 | 
						|
										}
 | 
						|
										break ;
 | 
						|
									}
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
									{
 | 
						|
										t_Result = a_Sink->Indicate ( 1 , & t_Instance ) ;
 | 
						|
									}
 | 
						|
								}
 | 
						|
								else
 | 
						|
								{
 | 
						|
									t_Result = WBEM_E_NOT_FOUND ;
 | 
						|
								}					
 | 
						|
							}
 | 
						|
 | 
						|
							t_Trigger->Release () ;
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							t_Result = WBEM_E_NOT_FOUND ;
 | 
						|
						}
 | 
						|
 | 
						|
						t_FastInstance->Release () ;
 | 
						|
					}
 | 
						|
 | 
						|
					t_Instance->Release () ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			t_ScheduledWorkItem->Release () ;
 | 
						|
		}
 | 
						|
 | 
						|
		t_Task->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: CreateInstanceEnumAsync_Win32_ScheduledWorkItemTrigger (
 | 
						|
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	long a_Flags , 
 | 
						|
	IWbemContext *a_Context,
 | 
						|
	IWbemObjectSink FAR *a_Sink
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	ITaskScheduler *t_TaskScheduler = NULL ;
 | 
						|
 | 
						|
    t_Result = CoCreateInstance (
 | 
						|
 | 
						|
		CLSID_CTaskScheduler,
 | 
						|
        NULL,
 | 
						|
        CLSCTX_INPROC_SERVER,
 | 
						|
        IID_ITaskScheduler,
 | 
						|
        (void **) & t_TaskScheduler
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
	{
 | 
						|
		IEnumTasks *t_TaskEnumerator = NULL ;
 | 
						|
		t_Result = t_TaskScheduler->Enum ( & t_TaskEnumerator ) ;
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			wchar_t **t_Name = NULL ;
 | 
						|
			t_TaskEnumerator->Reset () ;
 | 
						|
			while ( ( t_Result = t_TaskEnumerator->Next ( 1 , & t_Name , NULL ) ) == S_OK ) 
 | 
						|
			{
 | 
						|
				HRESULT t_Result = CreateInstanceEnumAsync_Win32_ScheduledWorkItemTrigger_Enumerate (
 | 
						|
 | 
						|
					a_ClassObject ,
 | 
						|
					a_Sink ,
 | 
						|
					t_TaskScheduler ,
 | 
						|
					t_Name [ 0 ]
 | 
						|
				) ;	
 | 
						|
 | 
						|
				CoTaskMemFree ( t_Name ) ;
 | 
						|
			}
 | 
						|
 | 
						|
			if ( t_Result != S_FALSE )
 | 
						|
			{
 | 
						|
				t_Result = WBEM_E_FAILED ;
 | 
						|
			}
 | 
						|
 | 
						|
			t_TaskEnumerator->Release () ;
 | 
						|
		}
 | 
						|
 | 
						|
		t_TaskScheduler->Release () ;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: CreateInstanceEnumAsync_Win32_ScheduledWorkItemTrigger_Enumerate (
 | 
						|
 | 
						|
	IWbemClassObject *a_ClassObject ,
 | 
						|
	IWbemObjectSink *a_Sink ,
 | 
						|
	ITaskScheduler *a_TaskScheduler ,
 | 
						|
	wchar_t *a_TaskName
 | 
						|
)
 | 
						|
{
 | 
						|
	HRESULT t_Result = S_OK ;
 | 
						|
 | 
						|
	ITask *t_Task = NULL ;
 | 
						|
	t_Result = a_TaskScheduler->Activate (
 | 
						|
 | 
						|
		a_TaskName , 
 | 
						|
		IID_ITask , 
 | 
						|
		( IUnknown ** ) & t_Task
 | 
						|
	) ;
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		wchar_t *t_ApplicationName = NULL ;
 | 
						|
		t_Result = t_Task->GetApplicationName ( & t_ApplicationName ) ;
 | 
						|
		if ( SUCCEEDED ( t_Result ) )
 | 
						|
		{
 | 
						|
			IScheduledWorkItem *t_ScheduledWorkItem = NULL ;
 | 
						|
			t_Result = t_Task->QueryInterface (
 | 
						|
 | 
						|
				IID_IScheduledWorkItem , 
 | 
						|
				( void ** ) & t_ScheduledWorkItem
 | 
						|
			) ;
 | 
						|
 | 
						|
			if ( SUCCEEDED ( t_Result ) )
 | 
						|
			{
 | 
						|
				WORD t_TriggerCount = 0 ;
 | 
						|
 | 
						|
				t_Result = t_ScheduledWorkItem->GetTriggerCount(
 | 
						|
 | 
						|
					& t_TriggerCount 
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					for ( WORD t_Index = 0 ;t_Index < t_TriggerCount ; t_Index ++ )
 | 
						|
					{
 | 
						|
						IWbemClassObject *t_Instance = NULL ;
 | 
						|
						t_Result = a_ClassObject->SpawnInstance ( 
 | 
						|
 | 
						|
							0 , 
 | 
						|
							& t_Instance
 | 
						|
						) ;
 | 
						|
 | 
						|
						if ( SUCCEEDED ( t_Result ) )
 | 
						|
						{
 | 
						|
							_IWmiObject *t_FastInstance = NULL ;
 | 
						|
							t_Result = t_Instance->QueryInterface ( IID__IWmiObject , ( void ** ) & t_FastInstance ) ;
 | 
						|
							if ( SUCCEEDED ( t_Result ) )
 | 
						|
							{
 | 
						|
								ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"TriggerId" , t_Index ) ;
 | 
						|
 | 
						|
								ProviderSubSystem_Common_Globals :: Set_String ( t_Instance , L"WorkItemName" , t_ApplicationName ) ;
 | 
						|
 | 
						|
								ITaskTrigger *t_Trigger = NULL ;
 | 
						|
								t_Result = t_Task->GetTrigger ( t_Index , & t_Trigger ) ;
 | 
						|
								if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
								{
 | 
						|
									ProviderSubSystem_Common_Globals :: Set_Uint16 ( t_FastInstance , L"TriggerId" , t_Index ) ;
 | 
						|
 | 
						|
									if ( SUCCEEDED ( t_Result ) ) 
 | 
						|
									{
 | 
						|
										t_Result = a_Sink->Indicate ( 1 , & t_Instance ) ;
 | 
						|
									}
 | 
						|
 | 
						|
									t_Trigger->Release () ;
 | 
						|
								}
 | 
						|
 | 
						|
								t_FastInstance->Release () ;
 | 
						|
							}
 | 
						|
 | 
						|
							t_Instance->Release () ;
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
				t_ScheduledWorkItem->Release () ;
 | 
						|
			}
 | 
						|
 | 
						|
			CoTaskMemFree ( t_ApplicationName ) ;
 | 
						|
		}
 | 
						|
 | 
						|
		t_Task->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 *
 | 
						|
 *	Name:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *  Description:
 | 
						|
 *
 | 
						|
 *	
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
HRESULT CTask_IWbemServices :: GetScheduledWorkItem (
 | 
						|
 | 
						|
	ITaskScheduler *a_TaskScheduler ,
 | 
						|
	wchar_t *a_Name ,
 | 
						|
	IScheduledWorkItem *&a_ScheduledWorkItem
 | 
						|
)
 | 
						|
{
 | 
						|
	BOOL t_Found = FALSE ;
 | 
						|
 | 
						|
	IEnumTasks *t_TaskEnumerator = NULL ;
 | 
						|
	HRESULT t_Result = a_TaskScheduler->Enum ( & t_TaskEnumerator ) ;
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		wchar_t **t_Name = NULL ;
 | 
						|
		t_TaskEnumerator->Reset () ;
 | 
						|
		while ( ( t_Result = t_TaskEnumerator->Next ( 1 , & t_Name , NULL ) ) == S_OK ) 
 | 
						|
		{
 | 
						|
			if ( wcscmp ( t_Name [ 0 ] , a_Name ) == 0 )
 | 
						|
			{
 | 
						|
				t_Result = a_TaskScheduler->Activate (
 | 
						|
 | 
						|
					t_Name [ 0 ] , 
 | 
						|
					IID_IScheduledWorkItem , 
 | 
						|
					( IUnknown ** ) & a_ScheduledWorkItem
 | 
						|
				) ;
 | 
						|
 | 
						|
				if ( SUCCEEDED ( t_Result ) )
 | 
						|
				{
 | 
						|
					t_Found = TRUE ;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		t_TaskEnumerator->Release () ;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( SUCCEEDED ( t_Result ) )
 | 
						|
	{
 | 
						|
		if ( t_Found == FALSE )
 | 
						|
		{
 | 
						|
			t_Result = WBEM_E_NOT_FOUND ;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return t_Result ;
 | 
						|
}
 |