windows-nt/Source/XPSP1/NT/admin/hmonitor/hmagent/global.h
2020-09-26 16:20:57 +08:00

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