【问题标题】:Retrive event logs contains specific string in DATA tag检索事件日志包含 DATA 标记中的特定字符串
【发布时间】:2018-06-20 11:47:55
【问题描述】:

我开发了一个MFC 应用程序,它从event log file (EVTX) 文件中读取windows event logs 并解析它以在应用程序中呈现

为了读取日志文件,我使用 XPATH 查询从包含 40000 条记录的 event log file 文件中检索特定事件日志

示例日志记录如下代码所示

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Error_Log"/>
    <EventID Qualifiers="20225">6002</EventID>
    <Level>4</Level>
    <Task>0</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2018-05-31T10:37:16.000000000Z"/>
    <EventRecordID>11679958</EventRecordID>
    <Channel>Application</Channel>
    <Security/>
  </System>
  <EventData>
    <Data>16:07:16.339:(A)[app.exe] [scan] m_id = [1254]</Data>
    <Binary>31363A30373A31362E3333393A2841295B7275706170702E6578655D205B5363616E5D206D5F6964203D205B313235345D</Binary>
  </EventData>
</Event>

这里我只想检索那些&lt;DATA&gt; 标记包含子字符串值m_id 的日志记录。为了实现这一点,我尝试了以下query

LPWSTR Query = _T("Event/EventData[Data(Data='m_id')]");

EVT_HANDLE Results = EvtQuery(NULL, Path, Query, EvtQueryFilePath | EvtQueryForwardDirection);  

但即使字符串m_id 存在于输入日志文件中,我也无法检索任何日志,如上面的代码所示

【问题讨论】:

    标签: c++ winapi mfc event-log event-viewer


    【解决方案1】:

    您应该能够通过使用 contains() 在 XPath 2 中做到这一点

    完整事件:

    /Event[EventData/Data[contains(text(),'m_id')]]
    /Event[EventData/Data[contains(string(),'m_id')]]
    

    仅数据:

    /Event/EventData/Data[contains(string(),'m_id')]
    /Event/EventData/Data[contains(text(),'m_id')]
    

    Test Xpaths here

    Advanced Xpath Filtering

    string vs text

    【讨论】:

    • 嗨@ffhighwind,我试过提到所有4种组合。但没有运气,仍然低于不返回任何内容的方法 EVT_HANDLE Results = EvtQuery(NULL, Path, Query, EvtQueryFilePath | EvtQueryForwardDirection);
    • 这可能与 system32 重定向有关,您可能需要调用 wow64DisableWow64FsRedirection。这也可能是 UAC 问题。尝试打开 Path 以查看它是否存在。如果 EvtQuery 返回 NULL,您也应该尝试调用 GetLastError
    • 通过“打开”路径我的意思是调用 fopen 或 fstream::open(Path).good() 就可以了。无论哪种方式,我都将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多