|
|
/*++
Copyright (C) 1996-1999 Microsoft Corporation
Module Name: log_pm.h
Abstract: <abstract> --*/
#ifndef _LOG_PM_H_
#define _LOG_PM_H_
#include <windows.h>
#include <winperf.h>
#include "strings.h"
// Filetimes are in 100NS units
#define FILETIMES_PER_SECOND 10000000
typedef PERF_DATA_BLOCK * PPERFDATA;
//BEGIN definitions included from PERFMON\sizes.h
#define MAX_SYSTEM_NAME_LENGTH 128
//END definitions included from PERFMON\sizes.h
#define LogFileIndexData 0x01
#define LogFileIndexBookmark 0x02
#define LogFileIndexCounterName 0x010
#define PlayingBackLog() (PlaybackLog.iStatus == iPMStatusPlaying)
#define IsDataIndex(pIndex) (pIndex->uFlags & LogFileIndexData)
#define IsBookmarkIndex(pIndex) (pIndex->uFlags & LogFileIndexBookmark)
#define IsCounterNameIndex(pIndex) (pIndex->uFlags & LogFileIndexCounterName)
#define MAX_BTREE_DEPTH 40
#define PDH_INVALID_POINTER ((LPVOID) -1)
typedef struct _PDHI_LOG_MACHINE_NODE PDHI_LOG_MACHINE, * PPDHI_LOG_MACHINE; typedef struct _PDHI_LOG_OBJECT_NODE PDHI_LOG_OBJECT, * PPDHI_LOG_OBJECT; typedef struct _PDHI_LOG_COUNTER_NODE PDHI_LOG_COUNTER, * PPDHI_LOG_COUNTER;
struct _PDHI_LOG_MACHINE_NODE { PPDHI_LOG_MACHINE next; PPDHI_LOG_OBJECT ObjTable; PPDHI_LOG_OBJECT ObjList; LPWSTR szMachine; PPERF_DATA_BLOCK pBlock; DWORD dwIndex; };
struct _PDHI_LOG_OBJECT_NODE { PPDHI_LOG_COUNTER CtrTable; PPDHI_LOG_COUNTER CtrList; PPDHI_LOG_COUNTER InstTable; PPDHI_LOG_COUNTER InstList; PPDHI_LOG_OBJECT left; PPDHI_LOG_OBJECT right; PPDHI_LOG_OBJECT next; LPWSTR szObject; PPERF_OBJECT_TYPE pObjData; DWORD dwObject; DWORD dwIndex; BOOL bIsRed; BOOL bNeedExpand; };
struct _PDHI_LOG_COUNTER_NODE { PPDHI_LOG_COUNTER left; PPDHI_LOG_COUNTER right; PPDHI_LOG_COUNTER next; ULONGLONG TimeStamp; LONGLONG TimeBase; LPWSTR szCounter; LPWSTR szInstance; LPWSTR szParent; DWORD dwCounterID; DWORD dwCounterType; DWORD dwDefaultScale; DWORD dwInstance; DWORD dwParent; BOOL bIsRed; };
//BEGIN definitions included from PERFMON\typedefs.h
typedef struct _COUNTERTEXT { struct _COUNTERTEXT * pNextTable; DWORD dwLangId; DWORD dwLastId; DWORD dwCounterSize; DWORD dwHelpSize; LPWSTR * TextString; LPWSTR HelpTextString; } COUNTERTEXT, * PCOUNTERTEXT;
typedef struct PERFSYSTEMSTRUCT { struct PERFSYSTEMSTRUCT * pSystemNext; WCHAR sysName[MAX_SYSTEM_NAME_LENGTH+1]; HKEY sysDataKey; COUNTERTEXT CounterInfo; DWORD FailureTime; LPWSTR lpszValue; BOOL bSystemNoLongerNeeded; BOOL bSystemCounterNameSaved; // the following used by perf data thread
DWORD dwThreadID; HANDLE hThread; DWORD StateData; HANDLE hStateDataMutex; HANDLE hPerfDataEvent; PPERFDATA pSystemPerfData; // mainly used by Alert to report system up/down
DWORD dwSystemState; // system version
DWORD SysVersion; } PERFSYSTEM, * PPERFSYSTEM, ** PPPERFSYSTEM;
//======================================//
// Log File Data Types //
//======================================//
#define LogFileSignatureLen 6
#define LogFileBlockMaxIndexes 100
typedef struct LOGHEADERSTRUCT { // LOGHEADER
WCHAR szSignature[LogFileSignatureLen]; int iLength; WORD wVersion; WORD wRevision; long lBaseCounterNameOffset; } LOGHEADER, * PLOGHEADER;
typedef struct LOGINDEXSTRUCT { // LOGINDEX
UINT uFlags; SYSTEMTIME SystemTime; long lDataOffset; int iSystemsLogged; } LOGINDEX, * PLOGINDEX;
#define LogIndexSignatureLen 7
#define LogIndexSignature L"Index "
#define LogIndexSignature1 "Perfmon Index"
typedef struct LOGFILEINDEXBLOCKSTRUCT { WCHAR szSignature[LogIndexSignatureLen]; int iNumIndexes ; LOGINDEX aIndexes[LogFileBlockMaxIndexes]; DWORD lNextBlockOffset ; } LOGINDEXBLOCK, * PLOGINDEXBLOCK;
typedef struct LOGPOSITIONSTRUCT { PLOGINDEXBLOCK pIndexBlock; int iIndex; int iPosition; } LOGPOSITION, * PLOGPOSITION;
//======================================//
// Bookmark Data Type //
//======================================//
#define BookmarkCommentLen 256
typedef struct PDH_BOOKMARKSTRUCT { struct PDH_BOOKMARKSTRUCT * pBookmarkNext; SYSTEMTIME SystemTime; WCHAR szComment[BookmarkCommentLen]; int iTic; } PDH_BOOKMARK, * PPDH_BOOKMARK, ** PPPDH_BOOKMARK;
typedef struct _LOGFILECOUNTERNAME { WCHAR szComputer[MAX_SYSTEM_NAME_LENGTH]; DWORD dwLastCounterId; DWORD dwLangId; long lBaseCounterNameOffset; long lCurrentCounterNameOffset; long lMatchLength; long lUnmatchCounterNames; } LOGFILECOUNTERNAME, * PLOGFILECOUNTERNAME, ** PPLOGFILECOUNTERNAME;
typedef struct COUNTERNAMESTRUCT { struct COUNTERNAMESTRUCT * pCounterNameNext; LOGFILECOUNTERNAME CounterName; LPWSTR pRemainNames; } LOGCOUNTERNAME, * PLOGCOUNTERNAME;
typedef struct _PDHI_PM_STRING PDHI_PM_STRING, * PPDHI_PM_STRING; struct _PDHI_PM_STRING { PPDHI_PM_STRING left; PPDHI_PM_STRING right; LPWSTR szString; DWORD dwIndex; BOOL bIsRed; };
typedef struct _PMLOG_COUNTERNAMES PMLOG_COUNTERNAMES, * PPMLOG_COUNTERNAMES; struct _PMLOG_COUNTERNAMES { PPMLOG_COUNTERNAMES pNext; LPWSTR szSystemName; LPWSTR * szNameTable; PPDHI_PM_STRING StringTree; DWORD dwLangId; DWORD dwLastIndex; };
typedef struct PLAYBACKLOGSTRUCT { LONGLONG llFileSize; LPWSTR szFilePath; PLOGHEADER pHeader; PPMLOG_COUNTERNAMES pFirstCounterNameTables; PPDHI_LOG_MACHINE MachineList; PLOGINDEX * LogIndexTable; DWORD dwFirstIndex; DWORD dwLastIndex; DWORD dwCurrentIndex;
int iTotalTics; int iSelectedTics; LOGPOSITION BeginIndexPos; LOGPOSITION EndIndexPos; LOGPOSITION StartIndexPos; LOGPOSITION StopIndexPos; LOGPOSITION LastIndexPos; // pos of last index read
PPDH_BOOKMARK pBookmarkFirst; LPWSTR pBaseCounterNames; long lBaseCounterNameSize; long lBaseCounterNameOffset; PLOGCOUNTERNAME pLogCounterNameFirst; } PLAYBACKLOG, * PPLAYBACKLOG;
PDH_FUNCTION PdhiOpenInputPerfmonLog( PPDHI_LOG pLog );
PDH_FUNCTION PdhiClosePerfmonLog( PPDHI_LOG pLog, DWORD dwFlags );
PDH_FUNCTION PdhiGetPerfmonLogCounterInfo( PPDHI_LOG pLog, PPDHI_COUNTER pCounter );
PDH_FUNCTION PdhiEnumMachinesFromPerfmonLog( PPDHI_LOG pLog, LPVOID pBuffer, LPDWORD lpdwBufferSize, BOOL bUnicodeDest );
PDH_FUNCTION PdhiEnumObjectsFromPerfmonLog( PPDHI_LOG pLog, LPCWSTR szMachineName, LPVOID mszObjectList, LPDWORD pcchBufferSize, DWORD dwDetailLevel, BOOL bUnicode );
PDH_FUNCTION PdhiEnumObjectItemsFromPerfmonLog( PPDHI_LOG hDataSource, LPCWSTR szMachineName, LPCWSTR szObjectName, PDHI_COUNTER_TABLE CounterTable, DWORD dwDetailLevel, DWORD dwFlags );
PDH_FUNCTION PdhiGetMatchingPerfmonLogRecord( PPDHI_LOG pLog, LONGLONG * pStartTime, LPDWORD pdwIndex );
PDH_FUNCTION PdhiGetCounterValueFromPerfmonLog( PPDHI_LOG hLog, DWORD dwIndex, PPDHI_COUNTER pCounter, PPDH_RAW_COUNTER pValue );
PDH_FUNCTION PdhiGetTimeRangeFromPerfmonLog( PPDHI_LOG hLog, LPDWORD pdwNumEntries, PPDH_TIME_INFO pInfo, LPDWORD dwBufferSize );
PDH_FUNCTION PdhiReadRawPerfmonLogRecord( PPDHI_LOG pLog, FILETIME * ftRecord, PPDH_RAW_LOG_RECORD pBuffer, LPDWORD pdwBufferLength );
#endif // _LOG_PM_H_
|