Перечисление подписок сборщика событий
Вы можете получить список имен подписок сборщика событий, включенных на локальном компьютере. С помощью функции EcOpenSubscriptionEnum можно получить дескриптор перечислителя подписки. После создания дескриптора функция EcEnumNextSubscription используется для вывода списка подписок на локальном компьютере.
Примечание
Для получения списка подписок можно использовать следующий пример кода или ввести следующую команду в командной строке:
wecutil es
В следующем примере кода C++ показано, как получить список подписок сборщика событий.
#include <windows.h>
#include <EvColl.h>
#include <vector>
#include <strsafe.h>
#pragma comment(lib, "wecapi.lib")
void __cdecl wmain()
{
// Lists the Event Collector subscriptions that are available
// on the local computer.
DWORD dwBufferSizeUsed, dwError = ERROR_SUCCESS;
BOOL bRetVal = true;
std::vector<WCHAR> buffer(MAX_PATH);
EC_HANDLE hEnumerator;
DWORD dwRetVal;
// Create a handle to access the subscriptions.
hEnumerator = EcOpenSubscriptionEnum(NULL);
if (hEnumerator)
{
while (bRetVal)
{
// Get the next subscription.
bRetVal = EcEnumNextSubscription(hEnumerator,
(DWORD) buffer.size(),
(LPWSTR) &buffer[0],
&dwBufferSizeUsed);
dwError = GetLastError();
// If the buffer is not large enough, resize it to accommodate the
// subscription information.
if (!bRetVal && ERROR_INSUFFICIENT_BUFFER == dwError)
{
dwError = ERROR_SUCCESS;
buffer.resize(dwBufferSizeUsed);
bRetVal = EcEnumNextSubscription(hEnumerator,
(DWORD) buffer.size(),
(LPWSTR) &buffer[0],
&dwBufferSizeUsed);
dwError = GetLastError();
}
if (!bRetVal && ERROR_NO_MORE_ITEMS == dwError)
{
dwError = ERROR_SUCCESS;
break;
}
if (bRetVal && ERROR_SUCCESS != dwError)
{
break;
}
// Output the subscription name.
wprintf(L"%s\n", (LPCWSTR) &buffer[0]);
}
}
else
{
dwRetVal = GetLastError();
LPVOID lpwszBuffer;
FormatMessageW( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwRetVal,
0,
(LPWSTR) &lpwszBuffer,
0,
NULL);
if (!lpwszBuffer)
{
wprintf(L"Failed to FormatMessage. Operation Error Code: %u. Error Code from FormatMessage: %u\n", dwRetVal, GetLastError());
return;
}
wprintf(L"\nFailed to Perform Operation.\nError Code: %u\nError Message: %s\n", dwRetVal, lpwszBuffer);
LocalFree(lpwszBuffer);
}
EcClose(hEnumerator);
}
Связанные темы