322 lines
8.2 KiB
C++
322 lines
8.2 KiB
C++
//***************************************************************************
|
|
//
|
|
// GLOBAL.H
|
|
//
|
|
// Module: HEALTHMON SERVER AGENT
|
|
//
|
|
// Purpose: Global helper functions, defines, macros...
|
|
//
|
|
// Copyright (c)1999 Microsoft Corporation, All Rights Reserved
|
|
//
|
|
//***************************************************************************
|
|
|
|
#if !defined( __GLOBAL_H )
|
|
#define __GLOBAL_H
|
|
|
|
#include <crtdbg.h>
|
|
#include <stdio.h>
|
|
#include <tchar.h>
|
|
#include <vector>
|
|
#include "wmihelper.h"
|
|
|
|
extern IWbemServices* g_pIWbemServices;
|
|
extern IWbemServices* g_pIWbemServicesCIMV2;
|
|
extern IWbemObjectSink* g_pSystemEventSink;
|
|
extern IWbemObjectSink* g_pDataGroupEventSink;
|
|
extern IWbemObjectSink* g_pDataCollectorEventSink;
|
|
extern IWbemObjectSink* g_pDataCollectorPerInstanceEventSink;
|
|
extern IWbemObjectSink* g_pDataCollectorStatisticsEventSink;
|
|
extern IWbemObjectSink* g_pThresholdEventSink;
|
|
//extern IWbemObjectSink* g_pThresholdInstanceEventSink;
|
|
extern IWbemObjectSink* g_pActionEventSink;
|
|
extern IWbemObjectSink* g_pActionTriggerEventSink;
|
|
extern HINSTANCE g_hResLib;
|
|
|
|
//#define MAX_INT 0x7fff
|
|
//#define MAX_UINT 0xffff
|
|
#define MAX_LONG 0x7fffffffL
|
|
#define MAX_ULONG 0xffffffffL
|
|
#define MAX_I64 0x7fffffffffffffffL
|
|
#define MAX_UI64 0xffffffffffffffffL
|
|
#define MAX_FLOAT 3.402823E+38F
|
|
#define MAX_DOUBLE 1.797693E+308
|
|
#define MIN_DOUBLE -1.7E+307
|
|
|
|
//#define MY_OUTPUT_TO_FILE 1
|
|
|
|
#ifdef _DEBUG
|
|
#ifdef MY_OUTPUT_TO_FILE
|
|
extern FILE* debug_f;
|
|
#define MY_OUTPUT(msg, iLevel)\
|
|
{\
|
|
TCHAR l_buf[1024];\
|
|
SYSTEMTIME l_st;\
|
|
if (iLevel >= 4) {\
|
|
GetLocalTime(&l_st);\
|
|
wsprintf(l_buf, L"%02d:%02d:%02d %08x %d, %S, %s\n",\
|
|
l_st.wHour, l_st.wMinute, l_st.wSecond,\
|
|
GetCurrentThreadId(), (int)__LINE__, __FILE__, (msg));\
|
|
OutputDebugString(l_buf);\
|
|
_ftprintf(debug_f, l_buf);\
|
|
fflush(debug_f);\
|
|
}\
|
|
}
|
|
#else
|
|
#define MY_OUTPUT(msg, iLevel)\
|
|
{\
|
|
TCHAR l_buf[1024];\
|
|
SYSTEMTIME l_st;\
|
|
if (iLevel >= 4) {\
|
|
GetLocalTime(&l_st);\
|
|
wsprintf(l_buf, L"%02d:%02d:%02d %08x %d, %S, %s\n",\
|
|
l_st.wHour, l_st.wMinute, l_st.wSecond,\
|
|
GetCurrentThreadId(), (int)__LINE__, __FILE__, msg);\
|
|
OutputDebugString(l_buf);\
|
|
}\
|
|
}
|
|
#endif
|
|
#else
|
|
#ifdef MY_OUTPUT_TO_FILE
|
|
extern FILE* debug_f;
|
|
#define MY_OUTPUT(msg, iLevel)\
|
|
{\
|
|
TCHAR l_buf[1024];\
|
|
SYSTEMTIME l_st;\
|
|
if (iLevel >= 4) {\
|
|
GetLocalTime(&l_st);\
|
|
wsprintf(l_buf, L"%02d:%02d:%02d %08x %d, %S, %s\n",\
|
|
l_st.wHour, l_st.wMinute, l_st.wSecond,\
|
|
GetCurrentThreadId(), (int)__LINE__, __FILE__, (msg));\
|
|
_ftprintf(debug_f, l_buf);\
|
|
fflush(debug_f);\
|
|
}\
|
|
}
|
|
#else
|
|
#define MY_OUTPUT(msg, iLevel)
|
|
;
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef _DEBUG
|
|
#ifdef MY_OUTPUT_TO_FILE
|
|
extern FILE* debug_f;
|
|
#define MY_OUTPUT2(msg, arg1, iLevel)\
|
|
{\
|
|
TCHAR l_msg[1024];\
|
|
TCHAR l_buf[1024];\
|
|
SYSTEMTIME l_st;\
|
|
if (iLevel >= 4) {\
|
|
GetLocalTime(&l_st);\
|
|
wsprintf(l_msg, (msg), (arg1));\
|
|
wsprintf(l_buf, L"%02d:%02d:%02d %08x %d, %S, %s\n",\
|
|
l_st.wHour, l_st.wMinute, l_st.wSecond,\
|
|
GetCurrentThreadId(), (int)__LINE__, __FILE__, l_msg);\
|
|
OutputDebugString(l_buf);\
|
|
_ftprintf(debug_f, l_buf);\
|
|
fflush(debug_f);\
|
|
}\
|
|
}
|
|
#else
|
|
#define MY_OUTPUT2(msg, arg1, iLevel)\
|
|
{\
|
|
TCHAR l_msg[1024];\
|
|
TCHAR l_buf[1024];\
|
|
SYSTEMTIME l_st;\
|
|
if (iLevel >= 4) {\
|
|
GetLocalTime(&l_st);\
|
|
wsprintf(l_msg, (msg), (arg1));\
|
|
wsprintf(l_buf, L"%02d:%02d:%02d %08x %d, %S, %s\n",\
|
|
l_st.wHour, l_st.wMinute, l_st.wSecond,\
|
|
GetCurrentThreadId(), (int)__LINE__, __FILE__, l_msg);\
|
|
OutputDebugString(l_buf);\
|
|
}\
|
|
}
|
|
#endif
|
|
#else
|
|
#ifdef MY_OUTPUT_TO_FILE
|
|
extern FILE* debug_f;
|
|
#define MY_OUTPUT2(msg, arg1, iLevel)\
|
|
{\
|
|
TCHAR l_msg[1024];\
|
|
TCHAR l_buf[1024];\
|
|
SYSTEMTIME l_st;\
|
|
if (iLevel >= 4) {\
|
|
GetLocalTime(&l_st);\
|
|
wsprintf(l_msg, (msg), (arg1));\
|
|
wsprintf(l_buf, L"%02d:%02d:%02d %08x %d, %S, %s\n",\
|
|
l_st.wHour, l_st.wMinute, l_st.wSecond,\
|
|
GetCurrentThreadId(), (int)__LINE__, __FILE__, l_msg);\
|
|
_ftprintf(debug_f, l_buf);\
|
|
fflush(debug_f);\
|
|
}\
|
|
}
|
|
#else
|
|
#define MY_OUTPUT2(msg, arg1, iLevel)
|
|
;
|
|
#endif
|
|
#endif
|
|
|
|
// _ASSERT(condition);
|
|
#ifdef _DEBUG
|
|
extern FILE* debug_f;
|
|
#define MY_ASSERT(condition)\
|
|
{\
|
|
if (!(condition)) {\
|
|
TCHAR l_buf[1024];\
|
|
SYSTEMTIME l_st;\
|
|
GetLocalTime(&l_st);\
|
|
wsprintf(l_buf, L"%02d:%02d:%02d %08x %d, %S\n",\
|
|
l_st.wHour, l_st.wMinute, l_st.wSecond,\
|
|
GetCurrentThreadId(), (int)__LINE__, __FILE__);\
|
|
_ftprintf(debug_f, l_buf);\
|
|
fflush(debug_f);\
|
|
DebugBreak();\
|
|
}\
|
|
}
|
|
#else
|
|
extern FILE* debug_f;
|
|
#define MY_ASSERT(condition)\
|
|
{\
|
|
if (!(condition)) {\
|
|
TCHAR l_buf[1024];\
|
|
SYSTEMTIME l_st;\
|
|
GetLocalTime(&l_st);\
|
|
wsprintf(l_buf, L"%02d:%02d:%02d %08x %d, %S\n",\
|
|
l_st.wHour, l_st.wMinute, l_st.wSecond,\
|
|
GetCurrentThreadId(), (int)__LINE__, __FILE__);\
|
|
_ftprintf(debug_f, l_buf);\
|
|
fflush(debug_f);\
|
|
}\
|
|
}
|
|
#endif
|
|
|
|
// _ASSERT((hres_condition)==S_OK);
|
|
#ifdef _DEBUG
|
|
extern FILE* debug_f;
|
|
#define MY_HRESASSERT(hres_condition)\
|
|
{\
|
|
if ((hres_condition)!=S_OK) {\
|
|
TCHAR l_buf[1024];\
|
|
SYSTEMTIME l_st;\
|
|
GetLocalTime(&l_st);\
|
|
wsprintf(l_buf, L"%02d:%02d:%02d %08x %d, %S 0x%08x\n",\
|
|
l_st.wHour, l_st.wMinute, l_st.wSecond,\
|
|
GetCurrentThreadId(), (int)__LINE__, __FILE__, (hres_condition));\
|
|
_ftprintf(debug_f, l_buf);\
|
|
fflush(debug_f);\
|
|
DebugBreak();\
|
|
}\
|
|
}
|
|
#else
|
|
extern FILE* debug_f;
|
|
#define MY_HRESASSERT(hres_condition)\
|
|
{\
|
|
if ((hres_condition)!=S_OK) {\
|
|
TCHAR l_buf[1024];\
|
|
SYSTEMTIME l_st;\
|
|
GetLocalTime(&l_st);\
|
|
wsprintf(l_buf, L"%02d:%02d:%02d %08x %d, %S 0x%08x\n",\
|
|
l_st.wHour, l_st.wMinute, l_st.wSecond,\
|
|
GetCurrentThreadId(), (int)__LINE__, __FILE__, (hres_condition));\
|
|
_ftprintf(debug_f, l_buf);\
|
|
fflush(debug_f);\
|
|
}\
|
|
}
|
|
#endif
|
|
|
|
//#define HM_POLLING_INTERVAL 10
|
|
#define HM_POLLING_INTERVAL 1
|
|
|
|
// HM_RESET is a special state that is temporary to the object until it is done reseting
|
|
// It is not known of outside of the agent.
|
|
enum HM_STATE {HM_GOOD, HM_COLLECTING, HM_RESET, HM_INFO, HM_DISABLED, HM_SCHEDULEDOUT, HM_RESERVED1, HM_RESERVED2, HM_WARNING, HM_CRITICAL};
|
|
|
|
enum HM_CONDITION {HM_LT, HM_GT, HM_EQ, HM_NE, HM_GE, HM_LE, HM_CONTAINS, HM_NOTCONTAINS, HM_ALWAYS};
|
|
|
|
enum HM_DE_TYPE {HM_PGDE, HM_PMDE, HM_PQDE, HM_EQDE};
|
|
|
|
//enum HM_UNKNOWN_REASON {HM_UNKNOWN_NONE, HM_UNKNOWN_BADWMI, HM_UNKNOWN_OBJECTNOTFOUND, HM_UNKNOWN_NOINST, HM_UNKNOWN_ENUMFAIL, HM_UNKNOWN_TIMEOUT, HM_UNKNOWN_NULL, HM_UNKNOWN_TOOMANYINSTS, HM_UNKNOWN_BADTHRESHPROP};
|
|
|
|
#define HMRES_BADWMI 4
|
|
#define HMRES_OBJECTNOTFOUND 5
|
|
#define HMRES_NOINST 6
|
|
#define HMRES_ENUMFAIL 7
|
|
#define HMRES_TIMEOUT 8
|
|
#define HMRES_OUTAGE 9
|
|
#define HMRES_DISABLE 10
|
|
#define HMRES_NULLVALUE 11
|
|
#define HMRES_DCUNKNOWN 12
|
|
#define HMRES_TOOMANYINSTS 13
|
|
#define HMRES_BADTHRESHPROP 14
|
|
#define HMRES_MISSINGDESC 15
|
|
#define HMRES_DESC 16
|
|
#define HMRES_BADERROR 17
|
|
#define HMRES_OK 18
|
|
#define HMRES_COLLECTING 19
|
|
#define HMRES_RESET 20
|
|
#define HMRES_INFO 21
|
|
#define HMRES_DISABLED 22
|
|
#define HMRES_SCHEDULEDOUT 23
|
|
#define HMRES_RESERVED1 24
|
|
#define HMRES_RESERVED2 25
|
|
#define HMRES_WARNING 26
|
|
#define HMRES_CRITICAL 27
|
|
#define HMRES_LT 28
|
|
#define HMRES_GT 29
|
|
#define HMRES_EQ 30
|
|
#define HMRES_NE 31
|
|
#define HMRES_GTEQ 32
|
|
#define HMRES_LTEQ 33
|
|
#define HMRES_CONTAINS 34
|
|
#define HMRES_NOTCONTAINS 35
|
|
#define HMRES_ALWAYS 36
|
|
#define HMRES_ACTION_OUTAGE 37
|
|
#define HMRES_ACTION_DISABLE 38
|
|
#define HMRES_ACTION_FIRED 39
|
|
#define HMRES_ACTION_FAILED 40
|
|
#define HMRES_ACTION_ENABLE 41
|
|
#define HMRES_ACTION_LOADFAIL 42
|
|
#define HMRES_NOMEMORY 43
|
|
#define HMRES_SYSTEM_LOADFAIL 44
|
|
#define HMRES_DG_LOADFAIL 45
|
|
#define HMRES_DC_LOADFAIL 46
|
|
#define HMRES_THRESHOLD_LOADFAIL 47
|
|
#define HMRES_BADDCPROP 48
|
|
|
|
typedef struct _tag_TOKENStruct
|
|
{
|
|
LPTSTR szOrigToken;
|
|
LPTSTR szToken;
|
|
LPTSTR szReplacementText;
|
|
} TOKENSTRUCT;
|
|
typedef std::vector<TOKENSTRUCT, std::allocator<TOKENSTRUCT> > TOKENLIST;
|
|
|
|
typedef struct _tag_REPStruct
|
|
{
|
|
LPTSTR pStartStr;
|
|
int len;
|
|
LPTSTR pszReplacementText;
|
|
} REPSTRUCT;
|
|
typedef std::vector<REPSTRUCT, std::allocator<REPSTRUCT> > REPLIST;
|
|
|
|
BOOL ReadUI64(LPCWSTR wsz, UNALIGNED unsigned __int64& rui64);
|
|
HRESULT ReplaceStr(LPTSTR *pszString, LPTSTR pszOld, LPTSTR pszNew);
|
|
|
|
#ifdef _DEBUG
|
|
#define TRACE_MUTEX(msg)\
|
|
{\
|
|
TCHAR l_buf[1024];\
|
|
SYSTEMTIME l_st;\
|
|
GetLocalTime(&l_st);\
|
|
wsprintf(l_buf, L"%s %02d:%02d:%02d %08x %d, %S\n",\
|
|
(msg), l_st.wHour, l_st.wMinute, l_st.wSecond,\
|
|
GetCurrentThreadId(), (int)__LINE__, __FILE__);\
|
|
_ftprintf(debug_f, l_buf);\
|
|
fflush(debug_f);\
|
|
}
|
|
#else
|
|
#define TRACE_MUTEX(msg)
|
|
;
|
|
#endif
|
|
#endif // __GLOBAL_H
|