|
|
//***************************************************************************
//
// GLOBAL.CPP
//
// Module: HEALTHMON SERVER AGENT
//
// Purpose: Global helper functions, defines, macros...
//
// Copyright (c)1999 Microsoft Corporation, All Rights Reserved
//
//***************************************************************************
#include "global.h"
IWbemServices* g_pIWbemServices = NULL; IWbemServices* g_pIWbemServicesCIMV2 = NULL;
//XXXSet the following as static vaiables of each of their repecive classes,
//and provide a Set function for it.
IWbemObjectSink* g_pSystemEventSink = NULL; IWbemObjectSink* g_pDataGroupEventSink = NULL; IWbemObjectSink* g_pDataCollectorEventSink = NULL; IWbemObjectSink* g_pDataCollectorPerInstanceEventSink = NULL; IWbemObjectSink* g_pDataCollectorStatisticsEventSink = NULL; IWbemObjectSink* g_pThresholdEventSink = NULL; //IWbemObjectSink* g_pThresholdInstanceEventSink = NULL;
IWbemObjectSink* g_pActionEventSink = NULL; IWbemObjectSink* g_pActionTriggerEventSink = NULL;
//LPTSTR state[] = {L"OK",L"COLLECTING",L"RESET",L"INFO",L"DISABLED",L"SCHEDULEDOUT",L"RESERVED1",L"RESERVED2",L"WARNING",L"CRITICAL"};
//LPTSTR condition[] = {L"<",L">",L"=",L"!=",L">=",L"<=",L"contains",L"!contains",L"always"};
LPTSTR stateLocStr[10]; LPTSTR conditionLocStr[9];
void ClearLocStrings(void);
// Set these at startup
HRESULT SetLocStrings(void) { int i; TCHAR szTemp[1024]; HRESULT hRetRes = S_OK;
for (i=0; i<10; i++) { stateLocStr[i] = NULL; } for (i=0; i<9; i++) { conditionLocStr[i] = NULL; }
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_OK, szTemp, 1024)) { wcscpy(szTemp, L"OK"); } stateLocStr[0] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(stateLocStr[0]); if (!stateLocStr[0]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(stateLocStr[0], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_COLLECTING, szTemp, 1024)) { wcscpy(szTemp, L"COLLECTING"); } stateLocStr[1] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(stateLocStr[1]); if (!stateLocStr[1]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(stateLocStr[1], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_RESET, szTemp, 1024)) { wcscpy(szTemp, L"RESET"); } stateLocStr[2] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(stateLocStr[2]); if (!stateLocStr[2]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(stateLocStr[2], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_INFO, szTemp, 1024)) { wcscpy(szTemp, L"INFO"); } stateLocStr[3] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(stateLocStr[3]); if (!stateLocStr[3]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(stateLocStr[3], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_DISABLED, szTemp, 1024)) { wcscpy(szTemp, L"DISABLED"); } stateLocStr[4] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(stateLocStr[4]); if (!stateLocStr[4]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(stateLocStr[4], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_SCHEDULEDOUT, szTemp, 1024)) { wcscpy(szTemp, L"SCHEDULEDOUT"); } stateLocStr[5] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(stateLocStr[5]); if (!stateLocStr[5]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(stateLocStr[5], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_RESERVED1, szTemp, 1024)) { wcscpy(szTemp, L"RESERVED1"); } stateLocStr[6] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(stateLocStr[6]); if (!stateLocStr[6]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(stateLocStr[6], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_RESERVED2, szTemp, 1024)) { wcscpy(szTemp, L"RESERVED2"); } stateLocStr[7] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(stateLocStr[7]); if (!stateLocStr[7]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(stateLocStr[7], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_WARNING, szTemp, 1024)) { wcscpy(szTemp, L"WARNING"); } stateLocStr[8] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(stateLocStr[8]); if (!stateLocStr[8]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(stateLocStr[8], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_CRITICAL, szTemp, 1024)) { wcscpy(szTemp, L"CRITICAL"); } stateLocStr[9] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(stateLocStr[9]); if (!stateLocStr[9]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(stateLocStr[9], szTemp);
//
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_LT, szTemp, 1024)) { wcscpy(szTemp, L"<"); } conditionLocStr[0] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(conditionLocStr[0]); if (!conditionLocStr[0]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(conditionLocStr[0], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_GT, szTemp, 1024)) { wcscpy(szTemp, L">"); } conditionLocStr[1] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(conditionLocStr[1]); if (!conditionLocStr[1]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(conditionLocStr[1], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_EQ, szTemp, 1024)) { wcscpy(szTemp, L"="); } conditionLocStr[2] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(conditionLocStr[2]); if (!conditionLocStr[2]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(conditionLocStr[2], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_NE, szTemp, 1024)) { wcscpy(szTemp, L"!="); } conditionLocStr[3] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(conditionLocStr[3]); if (!conditionLocStr[3]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(conditionLocStr[3], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_GTEQ, szTemp, 1024)) { wcscpy(szTemp, L">="); } conditionLocStr[4] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(conditionLocStr[4]); if (!conditionLocStr[4]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(conditionLocStr[4], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_LTEQ, szTemp, 1024)) { wcscpy(szTemp, L"<="); } conditionLocStr[5] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(conditionLocStr[5]); if (!conditionLocStr[5]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(conditionLocStr[5], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_CONTAINS, szTemp, 1024)) { wcscpy(szTemp, L"contains"); } conditionLocStr[6] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(conditionLocStr[6]); if (!conditionLocStr[6]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(conditionLocStr[6], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_NOTCONTAINS, szTemp, 1024)) { wcscpy(szTemp, L"!contains"); } conditionLocStr[7] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(conditionLocStr[7]); if (!conditionLocStr[7]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(conditionLocStr[7], szTemp);
if (g_hResLib == NULL || !LoadString(g_hResLib, HMRES_ALWAYS, szTemp, 1024)) { wcscpy(szTemp, L"always"); } conditionLocStr[8] = new TCHAR[wcslen(szTemp)+1]; MY_ASSERT(conditionLocStr[8]); if (!conditionLocStr[8]) {hRetRes = WBEM_E_OUT_OF_MEMORY; goto error;} wcscpy(conditionLocStr[8], szTemp); return S_OK;
error: MY_ASSERT(FALSE); ClearLocStrings(); return hRetRes; }
void ClearLocStrings(void) { int i;
for (i=0; i<10; i++) { delete [] stateLocStr[i]; }
for (i=0; i<9; i++) { delete [] conditionLocStr[i]; }
}
BOOL ReadUI64(LPCWSTR wsz, UNALIGNED unsigned __int64& rui64) { unsigned __int64 ui64 = 0; const WCHAR* pwc = wsz;
// Check for a NULL pointer
if ( NULL == wsz ) { return FALSE; }
while(ui64 < 0xFFFFFFFFFFFFFFFF / 8 && *pwc >= L'0' && *pwc <= L'9') { unsigned __int64 ui64old = ui64; ui64 = ui64 * 10 + (*pwc - L'0'); if(ui64 < ui64old) return FALSE;
pwc++; }
if(*pwc) { return FALSE; }
rui64 = ui64; return TRUE; }
HRESULT ReplaceStr(LPTSTR *pszString, LPTSTR pszOld, LPTSTR pszNew) { HRESULT hRetRes = S_OK; BSTR bstrPropName = NULL; TCHAR szQuery[4096]; LPTSTR pStr; LPTSTR pStr2; LPTSTR pszNewStr;
MY_ASSERT(pszOld); if (!pszOld) { return WBEM_E_INVALID_PROPERTY; }
MY_ASSERT(pszNew); if (!pszNew) { return WBEM_E_INVALID_PROPERTY; }
MY_ASSERT(*pszString); if (!*pszString) { return WBEM_E_INVALID_PROPERTY; }
wcsncpy(szQuery, *pszString, 4095); szQuery[4095] = '\0'; _wcsupr(szQuery); pStr = wcsstr(szQuery, pszOld); if (!pStr) { return S_OK; }
pszNewStr = new TCHAR[wcslen(*pszString)+wcslen(pszNew)-wcslen(pszOld)+1]; MY_ASSERT(pszNewStr); if (!pszNewStr) { hRetRes = WBEM_E_OUT_OF_MEMORY; } else { pStr2 = *pszString; pStr2 += pStr-szQuery; *pStr2 = '\0'; wcscpy(pszNewStr, *pszString); wcscat(pszNewStr, pszNew); pStr2 += wcslen(pszOld); wcscat(pszNewStr, pStr2); }
if (hRetRes == S_OK) { delete [] *pszString; *pszString = pszNewStr; }
return hRetRes; }
|