You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取_EVT_SYSTEM_PROPERTY_ID的Event-ID数据错误,如何正确打印?

如何正确用WIN32 API获取并打印Event ID

使用WIN32 API打印Event ID时,获取的数据与事件查看器显示不符,以下是相关代码及正确解决方案:

事件渲染部分代码

hContext = EvtCreateRenderContext(0, NULL, EvtRenderContextUser);
if (NULL == hContext)
{
    ERRMSG("ParseEventDataBySource: Failed with error code : %lu\n", errorCode = GetLastError());
    goto cleanup;
}

if (!EvtRender(hContext, hEvent, EvtRenderEventValues, dwBufferSize, pRenderedValues, &dwBufferUsed, &dwPropertyCount))
{
    if (ERROR_INSUFFICIENT_BUFFER == (errorCode = GetLastError()))
    {
        dwBufferSize = dwBufferUsed;
        pRenderedValues = (PEVT_VARIANT)malloc(dwBufferSize);
        if (pRenderedValues)
        {
            EvtRender(hContext, hEvent, EvtRenderEventValues, dwBufferSize, pRenderedValues, &dwBufferUsed, &dwPropertyCount);

本人获取Event ID的代码

UINT16 EventID;
EventID = pRenderedValues[EvtSystemEventID].UInt16Val;
eventIDString.Format(" [EventID : %hu] ", EventID);
dataBuffer += eventIDString; 

官方参考代码

DWORD EventID = pRenderedValues[EvtSystemEventID].UInt16Val;
if (EvtVarTypeNull != pRenderedValues[EvtSystemQualifiers].Type)
{
    EventID = MAKELONG(pRenderedValues[EvtSystemEventID].UInt16Val, pRenderedValues[EvtSystemQualifiers].UInt16Val);
}
wprintf(L"EventID: %lu\n", EventID);

解决方案

问题根源是仅读取了EvtSystemEventID的16位值,但部分事件的Event ID是32位结构:低16位为EvtSystemEventID,高16位为EvtSystemQualifiers。事件查看器显示的是完整32位ID,因此需要按官方逻辑组合两个值:

修改后的获取代码示例:

DWORD EventID = pRenderedValues[EvtSystemEventID].UInt16Val;
// 检查Qualifiers字段是否存在有效值,存在则组合成完整32位ID
if (EvtVarTypeNull != pRenderedValues[EvtSystemQualifiers].Type)
{
    EventID = MAKELONG(pRenderedValues[EvtSystemEventID].UInt16Val, pRenderedValues[EvtSystemQualifiers].UInt16Val);
}
eventIDString.Format(" [EventID : %lu] ", EventID);
dataBuffer += eventIDString; 

调整后获取的Event ID将与事件查看器显示内容一致。

内容的提问来源于stack exchange,提问作者NImIPKZvUc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:54:59