WindowsXP-SP1/admin/hmonitor/hmagent/global.cpp
2020-09-30 16:53:49 +02:00

322 lines
9.1 KiB
C++

//***************************************************************************
//
// 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;
}