/*++ Copyright (C) 1999-2000 Microsoft Corporation Module Name: proputil.h Abstract: --*/ #ifndef _PROPUTIL_H_ #define _PROPUTIL_H_ #include "stdafx.h" //=========================================================================== // Constants //=========================================================================== // Property constants represent indexes into the static PropertyDataMap table. extern const DWORD IdFirstProp; // The property constants in this first section have a one-to-one // correspondence between HTML parameter and registry value extern const DWORD IdCommentProp; extern const DWORD IdLogTypeProp; extern const DWORD IdCurrentStateProp; extern const DWORD IdLogFileMaxSizeProp; extern const DWORD IdLogFileBaseNameProp; extern const DWORD IdLogFileFolderProp; extern const DWORD IdLogFileSerialNumberProp; extern const DWORD IdLogFileAutoFormatProp; extern const DWORD IdLogFileTypeProp; extern const DWORD IdEofCommandFileProp; extern const DWORD IdCommandFileProp; extern const DWORD IdNetworkNameProp; extern const DWORD IdUserTextProp; extern const DWORD IdPerfLogNameProp; extern const DWORD IdTraceBufferSizeProp; extern const DWORD IdTraceBufferMinCountProp; extern const DWORD IdTraceBufferMaxCountProp; extern const DWORD IdTraceBufferFlushIntProp; extern const DWORD IdActionFlagsProp; extern const DWORD IdTraceFlagsProp; // Property constants below require special handling for BagToRegistry, // because there is not a one-to-one correspondence between HTML // parameter and registry value. extern const DWORD IdRestartProp; extern const DWORD IdStartProp; extern const DWORD IdStopProp; extern const DWORD IdSampleProp; extern const DWORD IdCounterListProp; extern const DWORD IdGuidListProp; /* // Not handled yet, or covered by special values above. // Some of these might be needed when writing to HTML file from registry. // extern const DWORD IdSysmonVersionProp; extern const DWORD IdSysmonCounterCountProp; extern const DWORD IdSysmonCounterPathProp; extern const DWORD IdAlertThresholdProp; extern const DWORD IdAlertOverUnderProp; extern const DWORD IdTraceProviderCountProp; extern const DWORD IdTraceProviderGuidProp; extern const DWORD IdLogNameProp; extern const DWORD IdAlertNameProp; extern const DWORD IdStartModeProp; extern const DWORD IdStartAtTimeProp; extern const DWORD IdStopModeProp; extern const DWORD IdStopAtTimeProp; extern const DWORD IdStopAfterUnitTypeProp; extern const DWORD IdStopAfterValueProp; extern const DWORD IdSampleIntUnitTypeProp; extern const DWORD IdSampleIntValueProp; extern const DWORD IdSysmonUpdateIntervalProp; extern const DWORD IdSysmonSampleCountProp; extern const DWORD IdSysmonLogFileNameProp; extern const DWORD IdExecuteOnlyProp; */ extern const DWORD IdExecuteOnlyProp; class CPropertyBag; class CPropertyUtils; class CPropertyUtils { public: enum eMessageDisplayLevel { eAll = 0, //STATUS_SEVERITY_SUCCESS, eInfo = 1, //STATUS_SEVERITY_INFORMATIONAL, eWarnings = 2, //STATUS_SEVERITY_WARNING, // Default level eError = 3, //STATUS_SEVERITY_ERROR, eNone = 4, //STATUS_SEVERITY_ERROR + 1 }; CPropertyUtils ( LPCWSTR cszMachineName ); CPropertyUtils ( LPCWSTR cszMachineName, LPCWSTR cszQueryName, CPropertyBag*, HKEY hkeyQuery, HKEY hkeyQueryList ); virtual ~CPropertyUtils ( void ); void SetQueryName ( LPCWSTR ); void SetPropertyBag ( CPropertyBag* ); void SetQueryKey ( HKEY ); void SetQueryListKey ( HKEY ); void SetMessageDisplayLevel ( eMessageDisplayLevel ); eMessageDisplayLevel GetMessageDisplayLevel ( void ); // BagToRegistry requires property bag and parent registry key HRESULT BagToRegistry ( DWORD dwPropId, DWORD dwLogType = SLQ_COUNTER_LOG ); // ValidateProperty requires property bag DWORD Validate ( DWORD dwPropId, DWORD dwLogType = SLQ_COUNTER_LOG ); private: typedef DWORD ( *ValidationMethod )( CPropertyUtils*, DWORD, DWORD ); typedef struct _PROPERTY_DATA_MAP { DWORD dwPropertyId; DWORD dwRegType; LPCWSTR cwszHtmlName; LPCWSTR cwszRegName; ValidationMethod fValidate; BOOL bRequired; DWORD dwMin; DWORD dwMax; } PROPERTY_DATA_MAP, *PPROPERTY_DATA_MAP; friend DWORD ValidateDwordInterval ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidatePrimaryObjectList ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidateSlqTimeInfo ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidateMaxFileSize ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidateLogFileType ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidateString ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidateTraceFlags ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidateAlertActions ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidateDirectoryPath ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidateTraceBufferMaxCount ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidateFileName ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidateFilePath ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); friend DWORD ValidateLogExists ( CPropertyUtils* pUtils, DWORD dwPropId, DWORD dwLogType ); HRESULT StringBagToRegistry ( DWORD dwPropId, DWORD dwLogType ); HRESULT DwordBagToRegistry ( DWORD dwPropId, DWORD dwLogType ); HRESULT SlqTimeBagToRegistry ( DWORD dwPropId, DWORD dwLogType ); HRESULT MultiSzBagToRegistry ( DWORD dwPropId, DWORD dwLogType ); HRESULT MultiSzBagToBufferAlloc ( DWORD dwPropId, DWORD dwLogType, LPWSTR* pszMszBuf, DWORD* pdwMszBufLen, DWORD* pdwMszStringLen ); LPCWSTR GetQueryName ( void ); BOOL IsValidDateTime ( LONGLONG& rllDateTime ); BOOL IsDisplayLevelMessage ( DWORD dwStatus ); BOOL IsKernelTraceMode ( DWORD dwTraceFlags ); DWORD GetInvalidStatus ( DWORD dwPropId ); DWORD GetMissingStatus ( DWORD dwPropId ); static const PROPERTY_DATA_MAP m_PropertyDataMap[]; static const DWORD m_dwPropertyDataMapEntries; CPropertyBag* m_pPropBag; LPWSTR m_szPropBagBuffer; DWORD m_dwPropBagBufLen; eMessageDisplayLevel m_eMessageDisplayLevel; HKEY m_hkeyQuery; HKEY m_hkeyQueryList; WCHAR m_szQueryName[MAX_PATH + 1]; // Todo: Remove size limit WCHAR m_szMachineName[MAX_COMPUTERNAME_LENGTH + 1]; }; typedef CPropertyUtils *PCPropertyUtils; #endif //_PROPUTIL_H_