Leaked source code of windows server 2003
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.
|
|
//-----------------------------------------------------------------------------
//
//
// File: localq.h
//
// Description: Header file for CLocalLinkMsgQueue class... a subclass of
// CLinkMsgQueue that provides the additional functionality need to
// admin a local queue
//
// Author: Mike Swafford (MikeSwa)
//
// History:
// 2/23/99 - MikeSwa Created
//
// Copyright (C) 1999 Microsoft Corporation
//
//-----------------------------------------------------------------------------
#ifndef __LOCALQ_H__
#define __LOCALQ_H__
#include "linkmsgq.h"
#define LOCAL_LINK_MSG_QUEUE_SIG 'QMLL'
//---[ CLocalLinkNotifyWrapper ]-----------------------------------------------
//
//
// Description:
// Implements IAQNotify for the local link. This is encapsulated in a
// different class, because QAPI functions need to call also update
// the perfcounters when a message is removed. We cannot call directly
// into the HrNotify on CLinkMsgQueue... and we cannot override the
// basic HrNotify functionality (because we only need it for QAPI
// functionality).
//
//-----------------------------------------------------------------------------
class CLocalLinkNotifyWrapper : public IAQNotify { private: CAQSvrInst *m_paqinst; CLinkMsgQueue *m_plmq; public: CLocalLinkNotifyWrapper() { m_paqinst = NULL; m_plmq = NULL; }
inline void Init(CAQSvrInst *paqinst, CLinkMsgQueue *plmq) { _ASSERT(paqinst); _ASSERT(plmq); m_paqinst = paqinst; m_plmq = plmq; }
virtual HRESULT HrNotify(CAQStats *paqstats, BOOL fAdd) { UpdateCountersForLinkType(m_paqinst, LI_TYPE_LOCAL_DELIVERY); if (m_plmq) return m_plmq->HrNotify(paqstats, fAdd); else return S_OK; }
};
//---[ CLocalLinkMsgQueue ]----------------------------------------------------
//
//
// Description:
// Derived class of CLinkMsgQueue that provides that additional queue
// admin functionality required to handle local delivery
// Hungarian:
// llmq, pllmq
//
//-----------------------------------------------------------------------------
class CLocalLinkMsgQueue : public CLinkMsgQueue { protected: DWORD m_dwLocalLinkSig; CAsyncAdminMsgRefQueue *m_paradmq; CLocalLinkNotifyWrapper m_AQNotify; public: CLocalLinkMsgQueue(CAsyncAdminMsgRefQueue *paradmq, GUID guidLink, CAQSvrInst *paqinst);
virtual BOOL fIsRemote() {return FALSE;};
public: //IQueueAdminAction
STDMETHOD(HrApplyQueueAdminFunction)( IQueueAdminMessageFilter *pIQueueAdminMessageFilter);
STDMETHOD_(BOOL, fMatchesID) (QUEUELINK_ID *QueueLinkID);
STDMETHOD(QuerySupportedActions)(DWORD *pdwSupportedActions, DWORD *pdwSupportedFilterFlags) { return QueryDefaultSupportedActions(pdwSupportedActions, pdwSupportedFilterFlags); };
public: //IQueueAdminLink
STDMETHOD(HrGetLinkInfo)( LINK_INFO *pliLinkInfo, HRESULT *phrLinkDiagnostic);
STDMETHOD(HrApplyActionToLink)( LINK_ACTION la);
STDMETHOD(HrGetNumQueues)( DWORD *pcQueues);
STDMETHOD(HrGetQueueIDs)( DWORD *pcQueues, QUEUELINK_ID *rgQueues);
};
#endif //__LOCALQ_H__
|