Получить журналы событий содержит определенную строку в теге DATA

Я разработал MFC приложение, которое читает windows event logs от event log file (EVTX) файл и разобрать его для рендеринга в приложении

Для чтения файла журнала я использую XPATH запрос для извлечения определенных журналов событий из event log file файл состоит из 40000 записей

Примеры записей журнала выглядят как приведенный ниже код

<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>

Здесь я хочу получить только те записи журнала, где <DATA> тег содержит значение подстроки m_id, Для достижения этого я попытался ниже query

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

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

Но я не могу получить какие-либо журналы, даже если строка m_id присутствует во входном файле журнала, как показано в приведенном выше коде

0

Решение

Вы должны быть в состоянии сделать это с XPath 2 с помощью функции has ().

Полные события:

/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')]

Проверьте Xpaths здесь

Расширенная фильтрация Xpath

строка против текста

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]