windows-nt/Source/XPSP1/NT/base/screg/sc/server/ncevents.cxx
2020-09-26 16:20:57 +08:00

216 lines
4.1 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2000, Microsoft Corporation, All rights reserved
//
// NCEvents.h
//
// This file is the interface to using non-COM events.
//
#include "precomp.hxx"
#include "NCObjAPI.h"
#include "NCEvents.h"
#define NUM_NC_EVENTS NCE_InvalidIndex
#define MAX_BUFFER_SIZE 32000
#define SEND_LATENCY 100
#ifndef NO_NCEVENTS
static HANDLE g_hConnection;
HANDLE g_hNCEvents[NUM_NC_EVENTS];
LPCWSTR szEventSetup[NUM_NC_EVENTS * 2] =
{
L"MSFT_NetBadAccount",
L"",
L"MSFT_NetCallToFunctionFailed",
L"FunctionName!s! Error!u!",
L"MSFT_NetCallToFunctionFailedII",
L"FunctionName!s! Argument!s! Error!u!",
L"MSFT_NetFirstLogonFailed",
L"Error!u!",
L"MSFT_NetRevertedToLastKnownGood",
L"",
L"MSFT_NetConnectionTimeout",
L"Milliseconds!u! Service!s!",
L"MSFT_NetReadfileTimeout",
L"Milliseconds!u!",
L"MSFT_NetTransactTimeout",
L"Milliseconds!u! Service!s!",
L"MSFT_NetTransactInvalid",
L"",
L"MSFT_NetServiceCrash",
L"Service!s! TimesFailed!u! ActionDelay!u! ActionType!u! Action!s!",
L"MSFT_NetServiceCrashNoAction",
L"Service!s! TimesFailed!u!",
L"MSFT_NetServiceNotInteractive",
L"Service!s!",
L"MSFT_NetServiceRecoveryFailed",
L"ActionType!u! Action!s! Service!s! Error!u!",
L"MSFT_NetInvalidDriverDependency",
L"Driver!s!",
L"MSFT_NetServiceStartFailed",
L"Service!s! Error!u!",
L"MSFT_NetCircularDependencyDemand",
L"Service!s!",
L"MSFT_NetCircularDependencyAuto",
L"",
L"MSFT_NetServiceStartFailedNone",
L"Service!s! NonExistingService!s!",
L"MSFT_NetServiceStartFailedII",
L"Service!s! DependedOnService!s! Error!u!",
L"MSFT_NetDependOnLaterService",
L"Service!s!",
L"MSFT_NetServiceStartFailedGroup",
L"Service!s! Group!s!",
L"MSFT_NetDependOnLaterGroup",
L"Service!s!",
L"MSFT_NetServiceStartHung",
L"Service!s!",
L"MSFT_NetSevereServiceFailed",
L"Service!s!",
L"MSFT_NetTakeOwnership",
L"RegistryKey!s!",
L"MSFT_NetBadServiceState",
L"Service!s! State!u!",
L"MSFT_NetServiceExitFailed",
L"Service!s! Error!u!",
L"MSFT_NetServiceExitFailedSpecific",
L"Service!s! Error!u!",
L"MSFT_NetBootSystemDriversFailed",
L"DriverList!s!",
L"MSFT_NetServiceControlSuccess",
L"Service!s! Control!s! sid!s!",
L"MSFT_NetServiceStatusSuccess",
L"Service!s! Control!s!",
L"MSFT_NetServiceConfigBackoutFailed",
L"Service!s! ConfigField!s!",
L"MSFT_NetFirstLogonFailedII",
L"Service!s! Account!s! Error!u!"
};
#endif // #ifndef NO_NCEVENTS
#define SCM_PROV_NAME L"SCM Event Provider"
BOOL InitNCEvents()
{
#ifndef NO_NCEVENTS
BOOL bRet;
g_hConnection =
WmiEventSourceConnect(
L"root\\cimv2",
SCM_PROV_NAME,
TRUE,
MAX_BUFFER_SIZE,
SEND_LATENCY,
NULL,
NULL);
if (g_hConnection)
{
for (int i = 0; i < NUM_NC_EVENTS; i++)
{
g_hNCEvents[i] =
WmiCreateObjectWithFormat(
g_hConnection,
szEventSetup[i * 2],
WMI_CREATEOBJ_LOCKABLE,
szEventSetup[i * 2 + 1]);
if (!g_hNCEvents[i])
break;
}
bRet = i == NUM_NC_EVENTS;
}
else
bRet = FALSE;
return bRet;
#else
return TRUE;
#endif
}
void DeinitNCEvents()
{
#ifndef NO_NCEVENTS
for (int i = 0; i < NUM_NC_EVENTS; i++)
{
if (g_hNCEvents[i])
WmiDestroyObject(g_hNCEvents[i]);
}
if (g_hConnection)
WmiEventSourceDisconnect(g_hConnection);
#endif
}
BOOL WINAPI NCFireEvent(DWORD dwIndex, ...)
{
va_list list;
BOOL bRet;
va_start(list, dwIndex);
bRet =
WmiSetAndCommitObject(
g_hNCEvents[dwIndex],
WMI_SENDCOMMIT_SET_NOT_REQUIRED | WMI_USE_VA_LIST,
&list);
return bRet;
}
BOOL WINAPI NCIsEventActive(DWORD dwIndex)
{
return WmiIsObjectActive(g_hNCEvents[dwIndex]);
}