mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
321 lines
8.8 KiB
321 lines
8.8 KiB
//***************************************************************************
|
|
//
|
|
// 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;
|
|
}
|