windows-nt/Source/XPSP1/NT/inetsrv/iis/iisrearc/ul/ulperf/ulperf.h
2020-09-26 16:20:57 +08:00

187 lines
5.5 KiB
C++

/*++
Copyright (c) 1998-1999 Microsoft Corporation
Module Name:
ulperf.h
Abstract:
This is the main header for the ul.sys performance counter support object
Author:
Paul McDaniel (paulmcd) 10-May-1999
Revision History:
--*/
#ifndef __ULPERF_H_
#define __ULPERF_H_
#include <afxtempl.h>
#include "resource.h"
DEFINE_GUID(CLSID_UlPerfCounters, 0xe8833ce8,0x0722,0x11d3,0xa4,0x41,0x00,0x80,0xc7,0xe1,0x1d,0x99);
//
// CritSecLocker
//
class CritSecLocker
{
public:
CritSecLocker(CComAutoCriticalSection *pCritSect)
{
this->pCritSect = pCritSect;
if (pCritSect) pCritSect->Lock();
}
~CritSecLocker()
{
if (this->pCritSect) this->pCritSect->Unlock();
}
private:
CComAutoCriticalSection *pCritSect;
};
//
// CUlPerfCounters
//
class ATL_NO_VTABLE CUlPerfCounters :
public CComObjectRoot,
public CComCoClass<CUlPerfCounters, &CLSID_UlPerfCounters>,
public IWbemServices,
public IWbemProviderInit
{
public:
CUlPerfCounters();
~CUlPerfCounters();
DECLARE_REGISTRY_RESOURCEID(IDR_ULPERF)
DECLARE_NOT_AGGREGATABLE(CUlPerfCounters)
BEGIN_COM_MAP(CUlPerfCounters)
COM_INTERFACE_ENTRY(IWbemServices)
COM_INTERFACE_ENTRY(IWbemProviderInit)
END_COM_MAP()
public:
//
// IWbemProviderInit
//
STDMETHOD(Initialize)(LPWSTR wszUser,LONG lFlags,LPWSTR wszNamespace,LPWSTR wszLocale,IWbemServices* pNamespace,IWbemContext* pCtx,IWbemProviderInitSink* pInitSink);
//
// IWbemServices
//
// Context.
// ========
STDMETHOD(OpenNamespace)(BSTR strNamespace, long lFlags, IWbemContext* pCtx, IWbemServices** ppWorkingNamespace, IWbemCallResult** ppResult);
STDMETHOD(CancelAsyncCall)(IWbemObjectSink* pSink);
STDMETHOD(QueryObjectSink)(long lFlags,IWbemObjectSink** ppResponseHandler);
// Classes and instances.
// ======================
STDMETHOD(GetObject)(BSTR strObjectPath,long lFlags,IWbemContext* pCtx,IWbemClassObject** ppObject,IWbemCallResult** ppCallResult);
STDMETHOD(GetObjectAsync)(BSTR strObjectPath,long lFlags,IWbemContext* pCtx,IWbemObjectSink* pResponseHandler);
// Class manipulation.
// ===================
STDMETHOD(PutClass)(IWbemClassObject* pObject,long lFlags,IWbemContext* pCtx,IWbemCallResult** ppCallResult);
STDMETHOD(PutClassAsync)(IWbemClassObject* pObject,long lFlags,IWbemContext* pCtx,IWbemObjectSink* pResponseHandler);
STDMETHOD(DeleteClass)(BSTR strClass,long lFlags,IWbemContext* pCtx,IWbemCallResult** ppCallResult);
STDMETHOD(DeleteClassAsync)(BSTR strClass,long lFlags,IWbemContext* pCtx,IWbemObjectSink* pResponseHandler);
STDMETHOD(CreateClassEnum)(BSTR strSuperclass,long lFlags,IWbemContext* pCtx,IEnumWbemClassObject** ppEnum);
STDMETHOD(CreateClassEnumAsync)(BSTR strSuperclass,long lFlags,IWbemContext* pCtx,IWbemObjectSink* pResponseHandler);
// Instances.
// ==========
STDMETHOD(PutInstance)(IWbemClassObject* pInst,long lFlags,IWbemContext* pCtx,IWbemCallResult** ppCallResult);
STDMETHOD(PutInstanceAsync)(IWbemClassObject* pInst,long lFlags,IWbemContext* pCtx,IWbemObjectSink* pResponseHandler);
STDMETHOD(DeleteInstance)(BSTR strObjectPath,long lFlags,IWbemContext* pCtx,IWbemCallResult** ppCallResult);
STDMETHOD(DeleteInstanceAsync)(BSTR strObjectPath,long lFlags,IWbemContext* pCtx,IWbemObjectSink* pResponseHandler);
STDMETHOD(CreateInstanceEnum)(BSTR strClass,long lFlags,IWbemContext* pCtx,IEnumWbemClassObject** ppEnum);
STDMETHOD(CreateInstanceEnumAsync)(BSTR strClass,long lFlags,IWbemContext* pCtx,IWbemObjectSink* pResponseHandler);
// Queries.
// ========
STDMETHOD(ExecQuery)(BSTR strQueryLanguage,BSTR strQuery,long lFlags,IWbemContext* pCtx,IEnumWbemClassObject** ppEnum);
STDMETHOD(ExecQueryAsync)(BSTR strQueryLanguage,BSTR strQuery,long lFlags,IWbemContext* pCtx,IWbemObjectSink* pResponseHandler);
STDMETHOD(ExecNotificationQuery)(BSTR strQueryLanguage,BSTR strQuery,long lFlags,IWbemContext* pCtx,IEnumWbemClassObject** ppEnum);
STDMETHOD(ExecNotificationQueryAsync)(BSTR strQueryLanguage,BSTR strQuery,long lFlags,IWbemContext* pCtx,IWbemObjectSink* pResponseHandler);
// Methods
// =======
STDMETHOD(ExecMethod)(BSTR strObjectPath,BSTR strMethodName,long lFlags,IWbemContext* pCtx,IWbemClassObject* pInParams,IWbemClassObject** ppOutParams,IWbemCallResult** ppCallResult);
STDMETHOD(ExecMethodAsync)(BSTR strObjectPath,BSTR strMethodName,long lFlags,IWbemContext* pCtx,IWbemClassObject* pInParams,IWbemObjectSink* pResponseHandler);
public:
CComAutoCriticalSection CritSect;
};
//
// Globals
//
extern LONG g_lInit;
extern HINSTANCE g_hInstance;
typedef struct _UL_PERF_OBJECT_DEFINITION
{
PERF_OBJECT_TYPE ObjectType;
PERF_COUNTER_DEFINITION BytesSent;
PERF_COUNTER_DEFINITION BytesReceived;
PERF_COUNTER_DEFINITION CurrentConnections;
PERF_COUNTER_DEFINITION CurrentRequests;
PERF_COUNTER_DEFINITION QueuedRequests;
PERF_COUNTER_DEFINITION AttachedProcesses;
} UL_PERF_OBJECT_DEFINITION;
typedef struct _UL_COUNTER_BLOCK
{
PERF_COUNTER_BLOCK PerfCounterBlock;
DWORD BytesSent;
DWORD BytesReceived;
DWORD CurrentConnections;
DWORD CurrentRequests;
DWORD QueuedRequests;
DWORD AttachedProcesses;
} UL_COUNTER_BLOCK;
extern UL_PERF_OBJECT_DEFINITION PerfObjectDefinition;
#endif // __ULPERF_H_