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.
431 lines
16 KiB
431 lines
16 KiB
/*++
|
|
|
|
Copyright (C) 1998-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
smlogqry.h
|
|
|
|
Abstract:
|
|
|
|
Class definitions for the CSmLogQuery base class. This object
|
|
is used to represent performance data log queries (a.k.a.
|
|
sysmon log queries).
|
|
|
|
--*/
|
|
|
|
#ifndef _CLASS_SMLOGQRY_
|
|
#define _CLASS_SMLOGQRY_
|
|
|
|
#include "common.h"
|
|
|
|
// Data shared between property pages before OnApply is executed.
|
|
#define PASSWORD_CLEAN 0
|
|
#define PASSWORD_SET 1
|
|
#define PASSWORD_DIRTY 2
|
|
|
|
typedef struct _SLQ_PROP_PAGE_SHARED {
|
|
DWORD dwMaxFileSize; // in units determined by dwFileSizeUnits - Set by files page
|
|
DWORD dwLogFileType; // Set by files page
|
|
SLQ_TIME_INFO stiStartTime; // Set by schedule page
|
|
SLQ_TIME_INFO stiStopTime; // Set by schedule page. Auto mode set by schedule and file pages.
|
|
SLQ_TIME_INFO stiSampleTime; // Set by counters and alerts general page.
|
|
CString strFileBaseName;// Set by files page
|
|
CString strFolderName; // Set by files page
|
|
CString strSqlName; // Set by files page
|
|
int dwSuffix; // Set by files page
|
|
DWORD dwSerialNumber; // Set by files page
|
|
} SLQ_PROP_PAGE_SHARED, *PSLQ_PROP_PAGE_SHARED;
|
|
|
|
class CSmLogService;
|
|
class CSmCounterLogQuery;
|
|
class CSmTraceLogQuery;
|
|
class CSmAlertQuery;
|
|
class CSmPropertyPage;
|
|
|
|
class CSmLogQuery
|
|
{
|
|
// constructor/destructor
|
|
public:
|
|
CSmLogQuery( CSmLogService* );
|
|
virtual ~CSmLogQuery( void );
|
|
|
|
// public methods
|
|
public:
|
|
virtual DWORD Open ( const CString& rstrName, HKEY hKeyQuery, BOOL bReadOnly );
|
|
virtual DWORD Close ( void );
|
|
|
|
DWORD UpdateService( BOOL& rbRegistryUpdated );
|
|
DWORD UpdateServiceSchedule( BOOL& rbRegistryUpdated );
|
|
|
|
DWORD ManualStart( void );
|
|
DWORD ManualStop( void );
|
|
DWORD SaveAs( const CString& );
|
|
|
|
virtual DWORD SyncSerialNumberWithRegistry( void );
|
|
virtual DWORD SyncWithRegistry( void );
|
|
|
|
HKEY GetQueryKey( void );
|
|
CSmLogService* GetLogService ( void );
|
|
DWORD GetMachineDisplayName ( CString& );
|
|
|
|
virtual BOOL GetLogTime(PSLQ_TIME_INFO pTimeInfo, DWORD dwFlags);
|
|
virtual BOOL SetLogTime(PSLQ_TIME_INFO pTimeInfo, const DWORD dwFlags);
|
|
virtual BOOL GetDefaultLogTime(SLQ_TIME_INFO& rTimeInfo, DWORD dwFlags);
|
|
|
|
virtual DWORD GetLogType( void );
|
|
|
|
virtual const CString& GetLogFileType ( void );
|
|
virtual void GetLogFileType ( DWORD& rdwFileType );
|
|
virtual BOOL SetLogFileType ( const DWORD dwType );
|
|
void GetDataStoreAppendMode(DWORD &rdwAppend);
|
|
void SetDataStoreAppendMode(DWORD dwAppend);
|
|
|
|
virtual const CString& GetLogFileName ( BOOL bLatestRunning = FALSE ); // 2000.1 GetFileName->GetLogFileName
|
|
virtual DWORD GetLogFileName ( CString& );
|
|
DWORD SetLogFileName ( const CString& rstrFileName );
|
|
DWORD SetLogFileNameIndirect ( const CString& rstrFileName );
|
|
|
|
virtual const CString& GetSqlName ( void );
|
|
virtual DWORD GetSqlName ( CString& );
|
|
DWORD SetSqlName ( const CString& rstrSqlName );
|
|
|
|
DWORD GetFileNameParts ( CString& rstrFolder, CString& rstrName );
|
|
DWORD SetFileNameParts (
|
|
const CString& rstrFolder,
|
|
const CString& rstrName );
|
|
|
|
DWORD GetFileNameAutoFormat ( void );
|
|
BOOL SetFileNameAutoFormat ( const DWORD );
|
|
|
|
DWORD GetFileSerialNumber( void );
|
|
BOOL SetFileSerialNumber ( const DWORD );
|
|
|
|
const CString& GetLogName ( void );
|
|
DWORD GetLogName ( CString& );
|
|
DWORD SetLogName ( const CString& rstrLogName );
|
|
|
|
const CString& GetLogKeyName ( void );
|
|
DWORD GetLogKeyName ( CString& );
|
|
DWORD SetLogKeyName ( const CString& rstrLogName );
|
|
|
|
const CString& GetLogComment ( void );
|
|
DWORD GetLogComment ( CString& );
|
|
DWORD SetLogComment (const CString& rstrComment);
|
|
DWORD SetLogCommentIndirect (const CString& rstrComment);
|
|
|
|
DWORD GetMaxSize ( void );
|
|
BOOL SetMaxSize ( const DWORD dwMaxSize );
|
|
|
|
DWORD GetDataStoreSizeUnits ( void ){ return mr_dwFileSizeUnits; };
|
|
|
|
DWORD GetEofCommand ( CString& );
|
|
DWORD SetEofCommand ( const CString& rstrCmdString);
|
|
|
|
DWORD GetState ( void );
|
|
BOOL SetState ( const DWORD dwNewState );
|
|
|
|
void SetNew ( const BOOL bNew ) { m_bIsNew = bNew; };
|
|
|
|
BOOL IsRunning( void );
|
|
BOOL IsAutoStart( void );
|
|
BOOL IsAutoRestart( void );
|
|
BOOL IsFirstModification ( void );
|
|
BOOL IsReadOnly ( void ) { return m_bReadOnly; };
|
|
BOOL IsExecuteOnly( void ) { return m_bExecuteOnly; };
|
|
BOOL IsModifiable( void ) { return ( !IsExecuteOnly() && !IsReadOnly() ); };
|
|
DWORD UpdateExecuteOnly ( void );
|
|
|
|
BOOL GetPropPageSharedData ( PSLQ_PROP_PAGE_SHARED );
|
|
BOOL SetPropPageSharedData ( PSLQ_PROP_PAGE_SHARED );
|
|
void SyncPropPageSharedData ( void );
|
|
void UpdatePropPageSharedData ( void );
|
|
|
|
CWnd* GetActivePropertySheet ();
|
|
CPropertySheet* GetInitialPropertySheet ();
|
|
void SetInitialPropertySheet ( CPropertySheet* );
|
|
void SetActivePropertyPage ( CSmPropertyPage* );
|
|
|
|
virtual CSmCounterLogQuery* CastToCounterLogQuery( void ) { return NULL; };
|
|
virtual CSmTraceLogQuery* CastToTraceLogQuery( void ) { return NULL; };
|
|
virtual CSmAlertQuery* CastToAlertQuery( void ) { return NULL; };
|
|
|
|
// Property bag persistence
|
|
|
|
static HRESULT StringFromPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
IErrorLog* pIErrorLog,
|
|
UINT uiPropName,
|
|
const CString& rstrDefault,
|
|
LPWSTR *pszBuffer,
|
|
LPDWORD pdwLength );
|
|
|
|
static HRESULT DwordFromPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
IErrorLog* pIErrorLog,
|
|
UINT uiPropName,
|
|
DWORD dwDefault,
|
|
DWORD& rdwData );
|
|
|
|
virtual HRESULT LoadFromPropertyBag ( IPropertyBag*, IErrorLog* );
|
|
|
|
// Registry persistence
|
|
|
|
static LONG ReadRegistryStringValue (
|
|
HKEY hKey,
|
|
LPCWSTR szValueName,
|
|
LPCWSTR szNonLocValueName,
|
|
LPCWSTR szDefault,
|
|
LPWSTR *pszBuffer,
|
|
LPDWORD pdwLength );
|
|
|
|
|
|
static DWORD SmNoLocReadRegIndStrVal (
|
|
HKEY hKey,
|
|
UINT uiValueName,
|
|
LPCWSTR szDefault,
|
|
LPWSTR* pszBuffer,
|
|
UINT* puiLength );
|
|
|
|
static LONG ReadRegistryDwordValue (
|
|
HKEY hKey,
|
|
UINT uiValueName,
|
|
DWORD dwDefault,
|
|
LPDWORD pdwValue );
|
|
|
|
static LPCWSTR GetNonLocRegValueName ( UINT uiValueName );
|
|
static LPCWSTR GetNonLocHtmlPropName ( UINT uiValueName );
|
|
|
|
// Public members
|
|
|
|
static const CString cstrEmpty;
|
|
|
|
DWORD m_fDirtyPassword;
|
|
CString m_strUser;
|
|
CString m_strPassword;
|
|
|
|
// protected methods
|
|
protected:
|
|
virtual DWORD UpdateRegistry();
|
|
|
|
virtual HRESULT SaveToPropertyBag ( IPropertyBag*, BOOL fSaveAllProps );
|
|
|
|
//
|
|
// Registry persistence
|
|
//
|
|
//
|
|
// Note: Win2k, XP, and XPSP1 were shipped with registry value names as resources.
|
|
// In some languages, these strings were localized. This causes problem when using MUI
|
|
// to switch languages between systems. for .Net, read value using the non-localized
|
|
// value name. If the value is not found, retry with the possibly localized name.
|
|
//
|
|
// When writing the value to the registry, use the nonlocalized value name.
|
|
|
|
LONG ReadRegistryStringValue (
|
|
HKEY hKey,
|
|
UINT uiValueName,
|
|
LPCWSTR szDefault,
|
|
LPWSTR *pszBuffer,
|
|
LPDWORD pdwLength );
|
|
|
|
LONG WriteRegistryStringValue (
|
|
HKEY hKey,
|
|
UINT uiValueName,
|
|
DWORD dwType,
|
|
LPCWSTR pszBuffer,
|
|
LPDWORD pdwLength );
|
|
|
|
LONG WriteRegistryDwordValue (
|
|
HKEY hKey,
|
|
UINT uiValueName,
|
|
LPDWORD pdwValue,
|
|
DWORD dwType=REG_DWORD); // Also supports REG_BINARY
|
|
|
|
LONG ReadRegistrySlqTime (
|
|
HKEY hKey,
|
|
UINT uiValueName,
|
|
PSLQ_TIME_INFO pSlqDefault,
|
|
PSLQ_TIME_INFO pSlqValue );
|
|
|
|
LONG WriteRegistrySlqTime (
|
|
HKEY hKey,
|
|
UINT uiValueName,
|
|
PSLQ_TIME_INFO pSlqTime );
|
|
|
|
// Property bag persistence
|
|
|
|
static HRESULT StringFromPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
IErrorLog* pIErrorLog,
|
|
const CString& rstrPropName,
|
|
const CString& rstrNonLocPropName,
|
|
const CString& rstrDefault,
|
|
LPWSTR *pszBuffer,
|
|
LPDWORD pdwLength );
|
|
|
|
HRESULT StringToPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
UINT uiPropName,
|
|
const CString& rstrData );
|
|
|
|
HRESULT StringToPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
const CString& rstrNonLocPropName,
|
|
const CString& rstrData );
|
|
|
|
static HRESULT DwordFromPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
IErrorLog* pIErrorLog,
|
|
const CString& rstrNonLocPropName,
|
|
const CString& rstrPropName,
|
|
DWORD dwDefault,
|
|
DWORD& rdwData );
|
|
|
|
HRESULT DwordToPropertyBag (
|
|
IPropertyBag* pPropBag,
|
|
UINT uiPropName,
|
|
DWORD dwData );
|
|
|
|
HRESULT DwordToPropertyBag (
|
|
IPropertyBag* pPropBag,
|
|
const CString& rstrNonLocPropName,
|
|
DWORD dwData );
|
|
|
|
HRESULT DoubleFromPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
IErrorLog* pIErrorLog,
|
|
UINT uiPropName,
|
|
DOUBLE dDefault,
|
|
DOUBLE& rdData );
|
|
|
|
HRESULT DoubleFromPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
IErrorLog* pIErrorLog,
|
|
const CString& rstrPropName,
|
|
const CString& rstrNonLocPropName,
|
|
DOUBLE dDefault,
|
|
DOUBLE& rdData );
|
|
|
|
HRESULT DoubleToPropertyBag (
|
|
IPropertyBag* pPropBag,
|
|
UINT uiPropName,
|
|
DOUBLE dData );
|
|
|
|
HRESULT DoubleToPropertyBag (
|
|
IPropertyBag* pPropBag,
|
|
const CString& rstrNonLocPropName,
|
|
DOUBLE dData );
|
|
|
|
HRESULT FloatFromPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
IErrorLog* pIErrorLog,
|
|
UINT uiPropName,
|
|
FLOAT fDefault,
|
|
FLOAT& rfData );
|
|
|
|
HRESULT FloatFromPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
IErrorLog* pIErrorLog,
|
|
const CString& rstrPropName,
|
|
const CString& rstrNonLocPropName,
|
|
FLOAT fDefault,
|
|
FLOAT& rfData );
|
|
|
|
HRESULT FloatToPropertyBag (
|
|
IPropertyBag* pPropBag,
|
|
UINT uiPropName,
|
|
FLOAT fData );
|
|
|
|
HRESULT FloatToPropertyBag (
|
|
IPropertyBag* pPropBag,
|
|
const CString& rstrNonLocPropName,
|
|
FLOAT fData );
|
|
|
|
HRESULT LLTimeFromPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
IErrorLog* pIErrorLog,
|
|
UINT uiPropName,
|
|
LONGLONG& rllDefault,
|
|
LONGLONG& rllData );
|
|
|
|
HRESULT LLTimeToPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
UINT uiPropName,
|
|
LONGLONG& rllData );
|
|
|
|
HRESULT SlqTimeFromPropertyBag (
|
|
IPropertyBag* pIPropBag,
|
|
IErrorLog* pIErrorLog,
|
|
DWORD dwFlags,
|
|
PSLQ_TIME_INFO pSlqDefault,
|
|
PSLQ_TIME_INFO pSlqData );
|
|
|
|
HRESULT SlqTimeToPropertyBag (
|
|
IPropertyBag* pPropBag,
|
|
DWORD dwFlags,
|
|
PSLQ_TIME_INFO pSlqData );
|
|
|
|
|
|
|
|
// protected member variables
|
|
protected:
|
|
CString m_strName;
|
|
CSmLogService* m_pLogService;
|
|
|
|
HKEY m_hKeyQuery;
|
|
BOOL m_bReadOnly;
|
|
BOOL m_bExecuteOnly;
|
|
CString m_strFileName;
|
|
|
|
// Registry Values
|
|
// Current state is private to avoid extra service query
|
|
DWORD mr_dwCurrentState;
|
|
// *** make time protected members private, access via Get, SetLogTime
|
|
DWORD mr_dwAutoRestartMode;
|
|
SLQ_TIME_INFO mr_stiSampleInterval;
|
|
|
|
private:
|
|
|
|
HRESULT CopyToBuffer ( LPWSTR& rpszData, DWORD& rdwBufferSize );
|
|
DWORD UpdateRegistryScheduleValues ( void );
|
|
DWORD UpdateRegistryLastModified ( void );
|
|
|
|
BOOL LLTimeToVariantDate (LONGLONG llTime, DATE *pDate);
|
|
BOOL VariantDateToLLTime (DATE Date, LONGLONG *pllTime);
|
|
|
|
void InitDataStoreAttributesDefault ( const DWORD dwRegLogFileType, DWORD& rdwDefault );
|
|
void ProcessLoadedDataStoreAttributes ( DWORD dwDataStoreAttributes );
|
|
|
|
BOOL m_bIsModified;
|
|
BOOL m_bIsNew;
|
|
DWORD mr_dwRealTimeQuery;
|
|
|
|
CString m_strLogFileType;
|
|
// Registry Values
|
|
CString mr_strLogKeyName;
|
|
CString mr_strComment;
|
|
CString mr_strCommentIndirect;
|
|
DWORD mr_dwMaxSize; // in size determined by mr_dwFileSizeUnits, -1 = grow to disk full
|
|
DWORD mr_dwFileSizeUnits;
|
|
DWORD mr_dwAppendMode;
|
|
CString mr_strBaseFileName;
|
|
CString mr_strBaseFileNameIndirect;
|
|
CString mr_strSqlName;
|
|
CString mr_strDefaultDirectory;
|
|
DWORD mr_dwLogAutoFormat;
|
|
DWORD mr_dwCurrentSerialNumber;
|
|
DWORD mr_dwLogFileType;
|
|
CString mr_strEofCmdFile;
|
|
SLQ_TIME_INFO mr_stiStart;
|
|
SLQ_TIME_INFO mr_stiStop;
|
|
|
|
SLQ_PROP_PAGE_SHARED m_PropData;
|
|
CSmPropertyPage* m_pActivePropPage;
|
|
CPropertySheet* m_pInitialPropertySheet;
|
|
};
|
|
|
|
typedef CSmLogQuery SLQUERY;
|
|
typedef CSmLogQuery* PSLQUERY;
|
|
|
|
|
|
#endif //_CLASS_SMLOGQRY_
|