|
|
/////////////////////////////////////////////////////////////////////////////
// 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
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!",
L"MSFT_NetServiceDifferentPIDConnected", L"Service!s! ExpectedPID!u! ActualPID!u!" };
#define SCM_PROV_NAME L"SCM Event Provider"
BOOL InitNCEvents() { 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; }
void DeinitNCEvents() { for (int i = 0; i < NUM_NC_EVENTS; i++) { if (g_hNCEvents[i]) WmiDestroyObject(g_hNCEvents[i]); }
if (g_hConnection) WmiEventSourceDisconnect(g_hConnection); }
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]); }
|