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.
|
|
/*==========================================================================*\
Module: exprfdll.h
Copyright Microsoft Corporation 1998, All Rights Reserved.
Author: WayneC
Descriptions: This is the declaration for exprfdll, a perf dll. This is for the dll that runs in perfmon. It supports multiple libraries (monitored services.) \*==========================================================================*/
#ifndef _exprfdll_h_
#define _exprfdll_h_
#include "snprflib.h"
///////////////////////////////////////////////////////////////////////////////
//
// Misc defines
//
///////////////////////////////////////////////////////////////////////////////
#define DWORD_MULTIPLE(x) (((x+sizeof(DWORD)-1)/sizeof(DWORD))*sizeof(DWORD))
#define QWORD_MULTIPLE(x) (((x+sizeof(QWORD)-1)/sizeof(QWORD))*sizeof(QWORD))
#define MAX_PERF_LIBS 8
#define DIGIT 1
#define DELIMITER 2
#define INVALID 3
#define QUERY_GLOBAL 1
#define QUERY_ITEMS 2
#define QUERY_FOREIGN 3
#define QUERY_COSTLY 4
///////////////////////////////////////////////////////////////////////////////
//
// Declare utility functions
//
///////////////////////////////////////////////////////////////////////////////
//
// Figure out the query type of the perf request
//
DWORD GetQueryType (LPWSTR lpValue);
//
// Determines if a number is in a space delimited unicode string.
// this is used to parse the request to see which object counters are
// asked for.
//
BOOL IsNumberInUnicodeList (DWORD dwNumber, LPCWSTR lpwszUnicodeList);
///////////////////////////////////////////////////////////////////////////////
//
// PerfObjectData defines the data retrieved from the shared memory for
// each perf object exposed by a library (see PerfLibraryData below)
//
///////////////////////////////////////////////////////////////////////////////
class PerfObjectData { private: //
// Internal variables
//
BOOL m_fObjectRequested; DWORD m_dwSpaceNeeded; //
// These are pointers to things inside the shared memory...
//
// First the object definition
PERF_OBJECT_TYPE* m_pObjType;
// Array of counter defintions
PERF_COUNTER_DEFINITION* m_prgCounterDef;
// Pointer to a dword that tells the size of the counter data
// (PERF_COUNTER_BLOCK + all the counter values)
DWORD* m_pdwCounterData;
// The following point to the actual data for the counters...
// use pCounterBlock for numInst == -1, else use m_pbCounterBlockTotal for
// the first instanced counters (_Total)
PERF_COUNTER_BLOCK* m_pCounterBlock; PBYTE m_pbCounterBlockTotal;
// This points to the first shared memory mapping.
SharedMemorySegment* m_pSMS;
// These tell us how many instances can be stored in each mapping.
DWORD m_dwInstancesPerMapping; DWORD m_dwInstances1stMapping;
// This is the length of the object definition in the first mapping.
DWORD m_dwDefinitionLength;
// Keep the object name around to create more named mappings when needed.
WCHAR m_wszObjectName[MAX_OBJECT_NAME]; public: PerfObjectData(); ~PerfObjectData();
BOOL GetPerformanceStatistics (LPCWSTR pcwstrObjectName); DWORD SpaceNeeded (DWORD, LPCWSTR pcwstrObjects); void SavePerformanceData (VOID**, DWORD*, DWORD*); void CopyInstanceData(PBYTE pb, INSTANCE_DATA *pInst);
void AddToTotal ( PERF_COUNTER_BLOCK *pcbTotalCounter, PERF_COUNTER_BLOCK *pcbInstCounter);
void Close (void); };
///////////////////////////////////////////////////////////////////////////////
//
// PerfLibraryData is data from the shared memory about a single perf library.
//
///////////////////////////////////////////////////////////////////////////////
class PerfLibraryData { private: //
// Handle and pointer for the shared memory
//
HANDLE m_hShMem; PBYTE m_pbShMem;
// Data from the shared memory
DWORD m_dwObjects; OBJECTNAME* m_prgObjectNames;
// Data for each of the objects exposed by the library
PerfObjectData m_rgObjectData[MAX_PERF_OBJECTS];
public: // Methods for dealing with the library data
PerfLibraryData(); ~PerfLibraryData(); BOOL GetPerformanceStatistics (LPCWSTR pcwstrLibrary); DWORD SpaceNeeded (DWORD, LPCWSTR pcwstrObjects); void SavePerformanceData (VOID**, DWORD*, DWORD*); void Close (void); };
#endif
|