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.
193 lines
5.3 KiB
193 lines
5.3 KiB
/*++
|
|
|
|
Copyright (C) 1999-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ADAPPERF.H
|
|
|
|
Abstract:
|
|
|
|
History:
|
|
|
|
--*/
|
|
|
|
// Use this guy to build a map of index to display name from a localized
|
|
// Name Database At this time, it just brute forces a class and a flex
|
|
// array, but could be modified to use an STL map just as easily.
|
|
|
|
#ifndef __ADAPPERF_H__
|
|
#define __ADAPPERF_H__
|
|
|
|
#include <wbemcomn.h>
|
|
#include "adapelem.h"
|
|
#include "ntreg.h"
|
|
#include "perfthrd.h"
|
|
#include "perflibschema.h"
|
|
|
|
// Registry definitions
|
|
// ====================
|
|
|
|
#define ADAP_PERFLIB_STATUS_KEY L"WbemAdapStatus"
|
|
#define ADAP_PERFLIB_SIGNATURE L"WbemAdapFileSignature"
|
|
#define ADAP_PERFLIB_SIZE L"WbemAdapFileSize"
|
|
#define ADAP_PERFLIB_TIME L"WbemAdapFileTime"
|
|
|
|
#define KNOWN_SERVICES L"KnownSvcs"
|
|
#define ADAP_TIMESTAMP_FULL L"LastFullDredgeTimestamp"
|
|
|
|
#define ADAP_PERFLIB_LASTCHANCE 3L
|
|
#define ADAP_PERFLIB_BOOBOO 2L
|
|
#define ADAP_PERFLIB_PROCESSING 1L
|
|
#define ADAP_PERFLIB_OK 0L
|
|
#define ADAP_PERFLIB_CORRUPT -1L
|
|
|
|
// Run time definitions
|
|
// ====================
|
|
|
|
#define ADAP_PERFLIB_IS_OK 0x0000L
|
|
#define ADAP_PERFLIB_IS_CORRUPT 0x0001L
|
|
#define ADAP_PERFLIB_IS_INACTIVE 0x0002L
|
|
#define ADAP_PERFLIB_FAILED 0x0004L
|
|
#define ADAP_PERFLIB_PREVIOUSLY_PROCESSED 0x0008L
|
|
#define ADAP_PERFLIB_IS_LOADED 0x0010L
|
|
#define ADAP_PERFLIB_IS_UNAVAILABLE ADAP_PERFLIB_IS_CORRUPT | ADAP_PERFLIB_IS_INACTIVE // | ADAP_PERFLIB_IS_UNLOADED
|
|
|
|
// others
|
|
// the library has NO FirstCounter/LastCounter key
|
|
#define EX_STATUS_UNLOADED 0
|
|
// the library has al least FirstCounter/LastCounter key
|
|
#define EX_STATUS_LOADABLE 1
|
|
// the library has a Collect Function that fails
|
|
#define EX_STATUS_COLLECTFAIL 2
|
|
|
|
typedef struct tagCheckLibStruct {
|
|
BYTE Signature[16];
|
|
FILETIME FileTime;
|
|
DWORD FileSize;
|
|
} CheckLibStruct;
|
|
|
|
class CAdapSafeBuffer
|
|
{
|
|
HANDLE m_hPerfLibHeap; // A handle to the private heap for the data block
|
|
|
|
DWORD m_dwGuardSize;
|
|
|
|
BYTE* m_pRawBuffer;
|
|
|
|
BYTE* m_pSafeBuffer;
|
|
DWORD m_dwSafeBufferSize;
|
|
|
|
BYTE* m_pCurrentPtr;
|
|
DWORD m_dwDataBlobSize;
|
|
DWORD m_dwNumObjects;
|
|
|
|
HRESULT ValidateSafePointer( BYTE* pPtr );
|
|
|
|
WString m_wstrServiceName;
|
|
|
|
static BYTE s_pGuardBytes[];
|
|
|
|
public:
|
|
CAdapSafeBuffer( WString wstrServiceName );
|
|
virtual ~CAdapSafeBuffer();
|
|
|
|
HRESULT SetSize( DWORD dwNumBytes );
|
|
HRESULT Validate(BOOL * pSentToEventLog);
|
|
HRESULT CopyData( BYTE** ppData, DWORD* pdwNumBytes, DWORD* pdwNumObjects );
|
|
|
|
void** GetSafeBufferPtrPtr() { m_pCurrentPtr = m_pSafeBuffer; return (void**) &m_pCurrentPtr; }
|
|
DWORD* GetDataBlobSizePtr() { m_dwDataBlobSize = m_dwSafeBufferSize; return &m_dwDataBlobSize; }
|
|
DWORD* GetNumObjTypesPtr() {m_dwNumObjects = 0; return &m_dwNumObjects; }
|
|
};
|
|
|
|
class CPerfThread;
|
|
class CPerfLibSchema;
|
|
|
|
class CAdapPerfLib : public CAdapElement
|
|
{
|
|
private:
|
|
|
|
CPerfThread* m_pPerfThread;
|
|
BOOL m_EventLogCalled;
|
|
BOOL m_CollectOK;
|
|
|
|
WString m_wstrServiceName; // The service name of the perflib
|
|
WCHAR* m_pwcsLibrary; // The file name of the perflib
|
|
WCHAR* m_pwcsOpenProc; // The name of the perflib's open function
|
|
WCHAR* m_pwcsCollectProc; // The name of the perflib's collect function
|
|
WCHAR* m_pwcsCloseProc; // The name of the perflib's close function
|
|
|
|
PM_OPEN_PROC* m_pfnOpenProc; // The function pointer to the perflib's open function
|
|
PM_COLLECT_PROC* m_pfnCollectProc; // The function pointer to the perflib's collect function
|
|
PM_CLOSE_PROC* m_pfnCloseProc; // The function pointer to the perflib's close function
|
|
HANDLE m_hPLMutex; // Used for serializing the calls to open/collect/close
|
|
|
|
HRESULT m_dwStatus; // The status of the perflib
|
|
BOOL m_fOK;
|
|
BOOL m_fOpen; // Flags whether the perflib's open function has been called
|
|
|
|
HINSTANCE m_hLib; // The handle to the perflib
|
|
|
|
DWORD m_dwFirstCtr;
|
|
DWORD m_dwLastCtr;
|
|
|
|
HRESULT Load(void);
|
|
|
|
protected:
|
|
HRESULT InitializeEntryPoints(CNTRegistry & reg,WString & wszRegPath);
|
|
|
|
HRESULT BeginProcessingStatus();
|
|
HRESULT EndProcessingStatus();
|
|
|
|
HRESULT GetFileSignature( CheckLibStruct * pCheckLib );
|
|
HRESULT SetFileSignature();
|
|
HRESULT CheckFileSignature();
|
|
|
|
|
|
HRESULT VerifyLoaded();
|
|
|
|
public:
|
|
CAdapPerfLib( LPCWSTR pwcsServiceName, DWORD * pLoadStatus );
|
|
~CAdapPerfLib();
|
|
|
|
DWORD GetFirstCtr(){ return m_dwFirstCtr; };
|
|
DWORD GetLastCtr(){ return m_dwLastCtr; }
|
|
|
|
HRESULT _Open( void );
|
|
HRESULT _Close( void );
|
|
HRESULT _GetPerfBlock( PERF_OBJECT_TYPE** ppData, DWORD* pdwBytes, DWORD* pdwNumObjTypes, BOOL fCostly );
|
|
|
|
HRESULT Initialize();
|
|
HRESULT Close();
|
|
HRESULT Cleanup();
|
|
|
|
BOOL IsOK( void )
|
|
{
|
|
return m_fOK;
|
|
}
|
|
|
|
LPCWSTR GetServiceName( void )
|
|
{
|
|
return m_wstrServiceName;
|
|
}
|
|
|
|
LPCWSTR GetLibraryName( void )
|
|
{
|
|
return m_pwcsLibrary;
|
|
}
|
|
|
|
HRESULT GetBlob( PERF_OBJECT_TYPE** ppPerfBlock, DWORD* pdwNumBytes, DWORD* pdwNumObjects, BOOL fCostly );
|
|
|
|
HRESULT SetStatus( DWORD dwStatus );
|
|
HRESULT ClearStatus( DWORD dwStatus );
|
|
BOOL CheckStatus( DWORD dwStatus );
|
|
BOOL IsCollectOK( void ){ return m_CollectOK; };
|
|
BOOL GetEventLogCalled(){ return m_EventLogCalled; };
|
|
void SetEventLogCalled(BOOL bVal){ m_EventLogCalled = bVal; };
|
|
|
|
static DWORD s_MaxSizeCollect;
|
|
};
|
|
|
|
|
|
#endif
|