///////////////////////////////////////////////////////////////////////////// // Copyright (c) 2000, Microsoft Corporation, All rights reserved // // NCEvents.h // // This file is the interface to using non-COM events within ESS. // #include "precomp.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_WmiRegisterNotificationSink", L"Namespace!s! QueryLanguage!s! Query!s! Sink!I64u!", L"MSFT_WmiCancelNotificationSink", L"Namespace!s! QueryLanguage!s! Query!s! Sink!I64u!", L"MSFT_WmiEventProviderLoaded", L"Namespace!s! ProviderName!s!", L"MSFT_WmiEventProviderUnloaded", L"Namespace!s! ProviderName!s!", L"MSFT_WmiEventProviderNewQuery", L"Namespace!s! ProviderName!s! QueryLanguage!s! " L"Query!s! QueryId!u! Result!u!", L"MSFT_WmiEventProviderCancelQuery", L"Namespace!s! ProviderName!s! QueryId!u! Result!u!", L"MSFT_WmiEventProviderAccessCheck", L"Namespace!s! ProviderName!s! QueryLanguage!s! " L"Query!s! Sid!c[]! Result!u!", L"MSFT_WmiConsumerProviderLoaded", L"Namespace!s! ProviderName!s! Machine!s!", L"MSFT_WmiConsumerProviderUnloaded", L"Namespace!s! ProviderName!s! Machine!s!", L"MSFT_WmiConsumerProviderSinkLoaded", L"Namespace!s! ProviderName!s! Machine!s! Consumer!s!", L"MSFT_WmiConsumerProviderSinkUnloaded", L"Namespace!s! ProviderName!s! Machine!s! Consumer!s!", L"MSFT_WmiThreadPoolThreadCreated", L"ThreadId!u!", L"MSFT_WmiThreadPoolThreadDeleted", L"ThreadId!u!", L"MSFT_WmiFilterActivated", L"Namespace!s! Name!s! QueryLanguage!s! Query!s!", L"MSFT_WmiFilterDeactivated", L"Namespace!s! Name!s! QueryLanguage!s! Query!s!", }; #define WMI_SELF_PROV_NAME L"WMI Self-Instrumentation Event Provider" BOOL InitNCEvents() { #ifdef USE_NCEVENTS BOOL bRet; g_hConnection = WmiEventSourceConnect( L"root\\cimv2", WMI_SELF_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() { #ifdef USE_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 }