运行简单的win32evtlog时-我可以列出大量事件-但是当我过滤所需的事件时;例如6005,它们没有出现。我已筛选出可见的内容,并且可以找到它们。
在以下代码(Python 3.7和win32 v222)上,如果取出6005的IF语句,则会得到一系列Event。将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返回结果,手动检查将在Windows Event Viewer中找到6005。
Get-EventLog -LogName system | where-object {$_.eventid -eq 6005}
在我撰写此问题时进行了一些研究-我发现Event API对于某些事件具有不同的方法,因为它们包括限定符:
<EventID Qualifiers="32768">6005</EventID>
所以看来我需要找到一种方法来转换合格事件(有时称为InstanceID),方法与此代码相似
Scalyr [375行以上]
在我仍在学习的同时,我无法解密代码atm-但我明白了。
答案 0 :(得分:0)
最终,我基本上需要在结果中加1位以得到正确的答案。
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 & 0x1fff == 6005:
print('Event ID:', event.EventID & 0x1fff)
print('Time Generated:', event.TimeGenerated)
然后研究其他东西-来自这里其他人的这个问题的答案Unusual event.EventID numbers like -2147481364 in Python using win32evtlog from Pywin32 由于某种原因,这在现在的搜索结果中从未出现过……但是,链接到这里是因为它看起来类似。