列出事件收集器订阅
可以检索在本地计算机上启用的事件收集器订阅的名称列表。 使用 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);
}
相关主题