При запуске простого win32evtlog - я могу перечислить большое количество событий - но когда я выбираю те, которые мне нужны; например 6005, они не появляются. Я отфильтровал те, которые видны, и их можно найти.
В следующем коде (Python 3.7 и win32 v222), если вы возьмете оператор IF для 6005, вы получите ряд событий. Измените оператор IF на одно из чисел; например 16, вы должны получить некоторые результаты.
import win32evtlog as wlg
handle = wlg.OpenEventLog(None,'System')
flags = wlg.EVENTLOG_BACKWARDS_READ|wlg.EVENTLOG_SEQUENTIAL_READ
while True:
events = wlg.ReadEventLog(handle, flags, 0)
for event in events:
if event.EventID == 6005:
print('Event ID:', event.EventID)
print('Time Generated:', event.TimeGenerated)
Я могу вернуть результаты, используя Powershell, и ручная проверка найдет 6005 в Windows Event Viewer.
Get-EventLog -LogName system | where-object {$_.eventid -eq 6005}
С некоторыми исследованиями, когда я писал этот вопрос - я обнаружил, что в API событий есть другой метод для определенных событий, поскольку они включают в себя квалификаторы:
<EventID Qualifiers="32768">6005</EventID>
Так что, похоже, мне нужно найти способ конвертировать квалифицированные события (иногда называемые InstanceID) аналогично тому, как это делает код
Scalyr [Линия 375 +]
Я не могу расшифровать код atm, поскольку я все еще учусь, но я понимаю суть.