Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

107 lines
3.0 KiB

//******************************************************************************
//
// Copyright (c) 1999-2000, Microsoft Corporation, All rights reserved
//
//*****************************************************************************
#ifndef __DELIVREC_H__
#define __DELIVREC_H__
#include <wmimsg.h>
#include <wbemcli.h>
#include <arrtempl.h>
#include <comutl.h>
#include <winntsec.h>
#include <callsec.h>
#include <unk.h>
#include "evsink.h"
class CQueueingEventSink;
class CEssNamespace;
/*************************************************************************
CDeliveryRecord
**************************************************************************/
class CDeliveryRecord : public CUnk // for ref counting
{
private:
DWORD m_dwSize;
CRefedPointerArray<IWbemClassObject> m_Events;
CWbemPtr<IWbemCallSecurity> m_pCallSec;
CEssNamespace * m_pNamespace;
//
// later we'll have a consumer id here.
//
HRESULT AdjustTotalSize( IWbemClassObject* pObj );
void* GetInterface( REFIID ) { return NULL; }
public:
CDeliveryRecord() : m_dwSize(0), m_pNamespace( NULL ) { }
virtual ~CDeliveryRecord();
void AddToCache( CEssNamespace * pNamespace, DWORD dwTotalSize, DWORD * pdwSleep );
IWbemClassObject** GetEvents() { return m_Events.GetArrayPtr(); }
IWbemCallSecurity* GetCallSecurity() { return m_pCallSec; }
ULONG GetNumEvents() { return m_Events.GetSize(); }
ULONG GetTotalBytes() { return m_dwSize; }
void Clear() { m_Events.RemoveAll(); m_dwSize = 0; }
HRESULT Initialize( IWbemClassObject** apEvents,
ULONG cEvents,
IWbemCallSecurity* pCallSec = NULL );
virtual HRESULT PreDeliverAction( ITransaction* ppTxn ) = 0;
virtual HRESULT PostDeliverAction( ITransaction* pTxn, HRESULT hres ) = 0;
HRESULT Persist( IStream* pStrm );
HRESULT Unpersist( IStream* pStrm );
};
/*************************************************************************
CExpressDeliveryRecord
**************************************************************************/
class CExpressDeliveryRecord : public CDeliveryRecord
{
static CReuseMemoryManager mstatic_Manager;
public:
HRESULT PreDeliverAction( ITransaction* ppTxn );
HRESULT PostDeliverAction( ITransaction* pTxn, HRESULT hres );
void* operator new(size_t nSize);
void operator delete(void* p);
};
/*************************************************************************
CGuaranteedDeliveryRecord
**************************************************************************/
class CGuaranteedDeliveryRecord : public CDeliveryRecord
{
CQueueingEventSink* m_pSink;
CWbemPtr<IWmiMessageQueueReceiver> m_pRcvr;
public:
void SetCB( CQueueingEventSink* pSink, IWmiMessageQueueReceiver* pRcvr )
{
m_pSink = pSink;
m_pRcvr = pRcvr;
}
HRESULT PreDeliverAction( ITransaction* ppTxn ) ;
HRESULT PostDeliverAction( ITransaction* pTxn, HRESULT hres );
};
#endif // __DELIVREC_H__