Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

304 lines
8.7 KiB

/*++
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_