windows-nt/Source/XPSP1/NT/admin/controls/smonctrl/smonctrl.h

425 lines
13 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (C) 1996-1999 Microsoft Corporation
Module Name:
smonctrl.h
Abstract:
<abstract>
--*/
#ifndef _SMONCTRL_H_
#define _SMONCTRL_H_
#pragma warning ( disable : 4201)
#include <pdh.h>
#include "colefont.h"
#include "graph.h"
#define SMONCTRL_MAJ_VERSION 3
#define SMONCTRL_MIN_VERSION 6
#define WM_GRAPH_UPDATE (WM_USER + 1)
#define UPDGRPH_COLOR 1
#define UPDGRPH_FONT 2
#define UPDGRPH_LAYOUT 3
#define UPDGRPH_ADDCNTR 4
#define UPDGRPH_DELCNTR 5
#define UPDGRPH_PLOT 6
#define UPDGRPH_VIEW 7
#define UPDGRPH_LOGVIEW 8
#define SLQ_COUNTER_LOG 0
#define SLQ_TRACE_LOG 1
#define SLQ_ALERT_LOG 2
#define SMON_CTRL_LOG 3
#define LODWORD(ll) ((DWORD)((LONGLONG)ll & 0x00000000FFFFFFFF))
#define HIDWORD(ll) ((DWORD)(((LONGLONG)ll >> 32) & 0x00000000FFFFFFFF))
#define MAKELONGLONG(low, high) \
((LONGLONG) (((DWORD) (low)) | ((LONGLONG) ((DWORD) (high))) << 32))
typedef union {
struct {
SHORT iMajor;
SHORT iMinor;
};
DWORD dwVersion;
} SMONCTRL_VERSION_DATA;
typedef struct
{
INT32 iWidth;
INT32 iHeight;
INT32 nSamples;
INT32 iScaleMax;
INT32 iScaleMin;
BOOL bLegend; // Each BOOL is 4 bytes
BOOL bLabels;
BOOL bHorzGrid;
BOOL bVertGrid;
BOOL bValueBar;
BOOL bManualUpdate;
FLOAT fUpdateInterval;
INT32 iDisplayType;
INT32 nGraphTitleLen;
INT32 nYaxisTitleLen;
OLE_COLOR clrBackCtl;
OLE_COLOR clrFore;
OLE_COLOR clrBackPlot;
INT32 nFileNameLen;
INT32 iReserved1; // Spare for future use
LONGLONG llStartDisp; // On 8-byte boundary
LONGLONG llStopDisp;
INT32 iAppearance;
INT32 iBorderStyle;
OLE_COLOR clrGrid;
OLE_COLOR clrTimeBar;
BOOL bHighlight;
BOOL bToolbar;
INT32 iReportValueType;
BOOL bReadOnly;
BOOL bMonitorDuplicateInstances;
BOOL bAmbientFont;
INT32 iDisplayFilter;
INT32 iDataSourceType;
INT32 iSqlDsnLen;
INT32 iSqlLogSetNameLen;
INT32 iColorIndex;
INT32 iWidthIndex;
INT32 iStyleIndex;
LONG32 arrlReserved[22]; // Spare, fill out to 256 bytes
} GRAPHCTRL_DATA3;
enum COLLECT_MODE {
COLLECT_ACTIVE = 1,
COLLECT_SUSPEND,
COLLECT_QUIT
};
enum eBorderStyle {
eBorderFirst = 0,
eBorderNone = eBorderFirst,
eBorderSingle = 1,
eBorderCount
};
enum eAppearance {
eAppearFirst = 0,
eAppearFlat = eAppearFirst,
eAppear3D = 1,
eAppearCount
};
typedef struct {
HANDLE hEvent;
HANDLE hThread;
DWORD dwInterval;
DWORD dwSampleTime;
COLLECT_MODE iMode;
} COLLECT_PROC_INFO;
class CLogFileItem;
class CGraphItem;
class CCounterTree;
class CStatsBar;
class CSnapBar;
class CSysmonToolbar;
class CReport;
class CLegend;
class CGraphDisp;
typedef struct {
LPTSTR pszFileName;
} LOG_FILE_INFO;
typedef struct {
HLOG hDataSource;
LPTSTR szSqlDsnName;
LPTSTR szSqlLogSetName;
CLogFileItem * pFirstLogFile;
INT32 nSamples;
LONGLONG llBeginTime;
LONGLONG llEndTime;
LONGLONG llStartDisp;
LONGLONG llStopDisp;
LONGLONG llInterval;
LONG lLogFileCount;
} DATA_SOURCE_INFO;
class CSysmonControl
{
friend class CPolyline;
friend class CImpISystemMonitor;
friend class CSysmonToolbar;
friend LRESULT APIENTRY SysmonCtrlWndProc (HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam);
friend DWORD WINAPI CollectProc(CSysmonControl *pCtrl);
public:
CSysmonControl ( CPolyline *pObj );
virtual ~CSysmonControl ( void );
void put_BackCtlColor ( OLE_COLOR color );
void put_FgndColor ( OLE_COLOR color, BOOL fAmbient );
void put_BackPlotColor ( OLE_COLOR color, BOOL fAmbient );
void put_GridColor ( OLE_COLOR color );
void put_TimeBarColor ( OLE_COLOR color );
HRESULT put_Font( LPFONT pIFont, BOOL fAmbient );
HRESULT get_DataSourceType( eDataSourceTypeConstant& eDataSourceType );
HRESULT put_DataSourceType( INT iDataSourceType );
HRESULT AddSingleLogFile ( LPCTSTR pPath, CLogFileItem** ppLogFile = NULL );
HRESULT RemoveSingleLogFile ( CLogFileItem* pLogFile );
// TodoLogFiles: Move FirstLogFile, NumLogFiles, to Graph.h?
CLogFileItem* FirstLogFile ( void ) { return m_DataSourceInfo.pFirstLogFile; };
INT NumLogFiles ( void ){ return m_DataSourceInfo.lLogFileCount; };
void put_Appearance( INT iApp, BOOL fAmbient );
void put_BorderStyle( INT iStyle, BOOL fAmbient );
void put_Highlight ( BOOL bState );
void put_ManualUpdate ( BOOL bManual );
static BOOL RegisterWndClass( void );
COLORREF clrBackCtl ( void ) { return m_clrBackCtl; }
COLORREF clrFgnd ( void ) { return m_clrFgnd; }
COLORREF clrBackPlot ( void ) { return m_clrBackPlot; }
COLORREF clrGrid ( void ) { return m_clrGrid; }
COLORREF clrTimeBar ( void ) { return m_clrTimeBar; }
INT Appearance( void ) { return m_iAppearance; }
INT BorderStyle( void ) { return m_iBorderStyle; }
eReportValueTypeConstant ReportValueType ( void );
HFONT Font ( void ) { HFONT hFont; m_OleFont.GetHFont(&hFont); return hFont; }
HFONT BoldFont( void ) { HFONT hFont; m_OleFont.GetHFontBold(&hFont); return hFont; }
void FontChanged ( void );
void IncrementVisuals ( void );
BOOL Init ( HWND hWndParent );
void DeInit ( void );
BOOL AllocateSubcomponents ( void );
void UpdateNonAmbientSysColors ( void );
HRESULT LoadFromStream ( LPSTREAM pIStream );
HRESULT SaveToStream ( LPSTREAM pIStream );
HRESULT LoadFromPropertyBag ( IPropertyBag*, IErrorLog* );
HRESULT SaveToPropertyBag ( IPropertyBag*, BOOL fSaveAllProps );
HRESULT LoadCountersFromPropertyBag ( IPropertyBag*, IErrorLog*, BOOL bLoadData=TRUE );
HRESULT LoadLogFilesFromPropertyBag ( IPropertyBag*, IErrorLog* );
HRESULT LoadLogFilesFromMultiSz ( LPCWSTR szLogFileList );
void Render ( HDC hDC, HDC hAttribDC, BOOL fMetafile, BOOL fEntire, LPRECT pRect );
void UpdateGraph ( INT nUpdateType );
void SetIntervalTimer ( void );
PDH_STATUS UpdateCounterValues( BOOL bManual );
HRESULT AddCounter ( LPTSTR pPath, CGraphItem* *ppCtr );
HRESULT AddSingleCounter ( LPTSTR pPath, CGraphItem* *ppCtr );
HRESULT DeleteCounter ( CGraphItem* pCtr, BOOL bPropagate );
HRESULT Paste ( void );
HRESULT Copy ( void );
HRESULT Reset ( void );
void SelectCounter ( CGraphItem* pCtr );
void DblClickCounter ( CGraphItem* pCtr );
CGraphItem* FirstCounter ( void );
CGraphItem* LastCounter ( void );
CCounterTree* CounterTree ( void );
INT CounterIndex ( CGraphItem* pCtr );
HWND Window ( void );
HRESULT TranslateAccelerators( LPMSG pMsg );
INT ConfirmSampleDataOverwrite ( void );
HRESULT DisplayProperties ( DISPID dispID = DISPID_UNKNOWN );
HRESULT AddCounters ( void );
HRESULT SaveAs ( void );
HRESULT SaveData ( void );
void Activate ( void );
BOOL IsUIDead ( void ) { return m_fUIDead; }
BOOL IsUserMode ( void ) { return m_fUserMode; }
BOOL IsReadOnly ( void );
BOOL DisplayHelp ( HWND hWndSelf );
void LockCounterData ( void ) { EnterCriticalSection(&m_CounterDataLock); }
void UnlockCounterData ( void ) { LeaveCriticalSection(&m_CounterDataLock); }
BOOL IsLogSource ( void );
PHIST_CONTROL HistoryControl( void ) { return m_pHistCtrl; }
BOOL DisplayMissedSampleMessage( void );
void SetMissedSample ( void );
void SetLogViewTempTimeRange(LONGLONG llStart, LONGLONG LLStop);
void ResetLogViewTempTimeRange( void );
double GetZoomFactor ( void ) { return m_dZoomFactor; };
void CalcZoomFactor ( void );
LONG GetSaveDataFilter ( void ) { return m_lSaveDataToLogFilterValue; };
BOOL SetSaveDataFilter ( long lFilter )
{
if (lFilter) {
m_lSaveDataToLogFilterValue = lFilter;
return TRUE;
}
return FALSE;
};
void DrawBorder ( HDC hDC );
BOOL WriteFileReportHeader(HANDLE hFile);
// *** TodoMultiLogHandle: Temporary method. Remove when trace file post-processing supports multiple
// open files.
HQUERY TempGetQueryHandle ( void ){ return m_hQuery; };
private:
void ApplyChanges ( HDC hDC );
void Paint ( void );
void OnDblClick ( INT xPos, INT yPos );
void OnDropFile ( WPARAM wParam );
void DisplayContextMenu ( short x, short y );
void UpdateGraphData ( void );
void SizeComponents ( HDC hDC );
void AssignFocus( VOID );
BOOL InitView ( HWND hWndParent );
PRECT GetNewClientRect ( void );
PRECT GetCurrentClientRect ( void );
void SetCurrentClientRect ( PRECT );
HRESULT ProcessDataSourceType( LPCTSTR pszDataSourceName, INT iDataSourceType );
LPCTSTR GetDataSourceName ( void );
HLOG GetDataSourceHandle(void) { return m_DataSourceInfo.hDataSource; }
HRESULT CopyToBuffer ( LPTSTR& rpszData, DWORD& rdwBufferSize );
HRESULT PasteFromBuffer ( LPTSTR pszData, BOOL bAllSettings = FALSE );
DWORD InitializeQuery ( void );
DWORD ActivateQuery ( void );
void CloseQuery ( void );
HRESULT InitLogFileIntervals( void );
void SampleLogFile ( BOOL bViewChange );
void Clear( void );
void FindNextValidStepNum(
BOOL bDecrease,
CGraphItem* pItem,
LONGLONG llNewTime,
INT& riNewStepNum,
DWORD& rdwStatus );
void GetNewLogViewStepNum(LONGLONG llNewTime, INT& riNewStepNum);
DWORD ProcessCommandLine( void );
HRESULT LoadFromFile( LPTSTR pszFileName, BOOL bAllData );
DWORD RelogLogData (
LPCTSTR szOutputFile,
DWORD dwOutputLogType,
PDH_TIME_INFO pdhTimeInfo,
DWORD dwFilterCount);
HRESULT GetSelectedCounter ( CGraphItem** ppCtr );
DWORD BuildLogFileList (
LPWSTR szLogFileList,
BOOL bIsCommaDelimited,
ULONG* pulBufLen );
DWORD AddToErrorPathList ( LPCWSTR szPath );
LPCWSTR GetErrorPathList ( DWORD* pdwListLen );
void ClearErrorPathList ( void );
DWORD AddToErrorLogFileList ( LPCWSTR szPath );
LPCWSTR GetErrorLogFileList ( DWORD* pdwListLen );
void ClearErrorLogFileList ( void );
SMONCTRL_VERSION_DATA m_LoadedVersion;
BOOL m_fInitialized;
BOOL m_fViewInitialized;
HWND m_hWnd;
CLegend* m_pLegend;
CGraphDisp* m_pGraphDisp;
CStatsBar* m_pStatsBar;
CSnapBar* m_pSnapBar;
CReport* m_pReport;
CSysmonToolbar* m_pToolbar;
CPolyline *m_pObj;
PHIST_CONTROL m_pHistCtrl;
HQUERY m_hQuery;
UINT m_TimerID;
BOOLEAN m_fPendingUpdate;
BOOLEAN m_fPendingSizeChg;
BOOLEAN m_fPendingFontChg;
BOOLEAN m_fPendingLogViewChg;
BOOLEAN m_fPendingLogCntrChg;
BOOLEAN m_fUIDead;
BOOLEAN m_fUserMode;
BOOLEAN m_fDuplicate;
COLORREF m_clrBackCtl;
COLORREF m_clrFgnd;
COLORREF m_clrBackPlot;
COLORREF m_clrGrid;
COLORREF m_clrTimeBar;
INT m_iAppearance;
INT m_iBorderStyle;
eDisplayTypeConstant m_eDisplayType;
BOOL m_bLogFileSource;
BOOL m_bSampleDataLoaded;
double m_dZoomFactor;
BOOL m_bLoadingCounters;
BOOL m_bMissedSample;
BOOL m_bDisplayedMissedSampleMessage;
BOOL m_bSettingsLoaded;
LONG m_lSaveDataToLogFilterValue;
LCID m_lcidCurrent;
// Item properties, for saving and loading counters.
COLORREF m_clrCounter;
INT m_iColorIndex;
INT m_iWidthIndex;
INT m_iStyleIndex;
INT m_iScaleFactor;
HFONT m_hFont;
COleFont m_OleFont;
PDH_BROWSE_DLG_CONFIG m_BrowseInfo;
CGraphItem* m_pSelectedItem;
HACCEL m_hAccel;
DATA_SOURCE_INFO m_DataSourceInfo;
COLLECT_PROC_INFO m_CollectInfo;
CRITICAL_SECTION m_CounterDataLock;
RECT m_rectCurrentClient;
LPWSTR m_szErrorPathList;
DWORD m_dwErrorPathListLen;
DWORD m_dwErrorPathBufLen;
};
typedef CSysmonControl *PSYSMONCTRL;
#endif