@@ -88,6 +88,21 @@ def __iter__(self):
8888 return self
8989
9090 def seek (self , position , seek_flags = None ):
91+ """Seek to ``position``.
92+ ``seek_flags`` can be one of:
93+
94+ * ``None``
95+ * ``EvtSeekRelativeToFirst``
96+ * ``EvtSeekRelativeToLast``
97+ * ``EvtSeekRelativeToBookmark``
98+
99+ If ``seek_flags`` is None:
100+
101+ * ``position >= 0`` will use ``EvtSeekRelativeToFirst``
102+ * ``position < 0`` will use ``EvtSeekRelativeToLast`` and with ``position+1``
103+ * This allow retrieve the ``position`` lasts events
104+ """
105+
91106 if seek_flags is None :
92107 if position >= 0 :
93108 seek_flags = gdef .EvtSeekRelativeToFirst
@@ -176,6 +191,7 @@ def system_values(self): # POC: use this for all @property based on system data
176191 return [r .value for r in result ]
177192
178193 def event_values (self ):
194+ """The values of the event in a list"""
179195 ctx = windows .winproxy .EvtCreateRenderContext (0 , None , gdef .EvtRenderContextUser )
180196 result = self .render (ctx , gdef .EvtRenderEventValues )
181197 return [r .value for r in result ]
@@ -195,6 +211,7 @@ def get_raw_values(self, values, flags=gdef.EvtRenderContextValues):
195211 # Properties arround common Event/System values
196212 @property
197213 def provider (self ):
214+ """The provider of the event"""
198215 return self .system_values ()[gdef .EvtSystemProviderName ]
199216
200217 @property
@@ -246,9 +263,6 @@ def metadata(self):
246263 # id not found: try via the Provider in the event (classic channel)
247264 return self .channel .get_classic_event_metadata (self .id , self .provider )
248265
249-
250-
251-
252266 # Test
253267 @property
254268 def data (self ): # user/event specifique data
@@ -264,7 +278,7 @@ def data(self): # user/event specifique data
264278
265279 @property
266280 def date (self ):
267- """Event.time_created as a datetime"""
281+ """`` Event.time_created`` as a :class:`` datetime`` """
268282 return windows .utils .datetime_from_filetime (self .time_created )
269283
270284 def __repr__ (self ):
@@ -355,26 +369,6 @@ def __repr__(self):
355369
356370
357371
358-
359-
360-
361- # x = windows.winproxy.EvtQuery(None,
362- # "Microsoft-Windows-Windows Firewall With Advanced Security/Firewall",
363- # "Event/System[EventID=2004 or EventID=2006]",
364- # gdef.EvtQueryChannelPath + gdef.EvtQueryForwardDirection)
365- # print(x)
366- # eq = EvtQuery(x)
367- # event = next(eq)
368-
369- # xx = gdef.LPWSTR("ModifyingApplication")
370- # xx = gdef.LPWSTR("Event/System/Channel")
371- # xx = gdef.LPWSTR('Event/EventData/Data[@Name="ModifyingApplication"]')
372- # xx = gdef.LPWSTR('Event/System/EventID')
373-
374- # event = next(eq)
375-
376- # list(channels())
377-
378372class EvtChannel (object ):
379373 """An Event Log channel"""
380374 DEFAULT_QUERY_FLAGS = gdef .EvtQueryChannelPath + gdef .EvtQueryForwardDirection
@@ -505,7 +499,9 @@ def classic(self):
505499 def __repr__ (self ):
506500 return '<{0} "{1}">' .format (type (self ).__name__ , self .name )
507501
502+
508503class PublisherMetadataChannel (object ):
504+ """Represent a PublisherMetadataChannel (see https://docs.microsoft.com/en-us/windows/win32/api/winevt/ne-winevt-evt_publisher_metadata_property_id)"""
509505
510506 def __init__ (self , pub_metadata , channel_id ):
511507 super (PublisherMetadataChannel , self ).__init__ ()
@@ -517,27 +513,32 @@ def _query_channel_metadata_property(self, propertyid):
517513
518514 @property
519515 def flags (self ):
516+ """The flags of the ``PublisherMetadataChannel``"""
520517 return int (self ._query_channel_metadata_property (gdef .EvtPublisherMetadataChannelReferenceFlags ))
521518
522519 @property
523520 def name (self ):
521+ """The name of the ``PublisherMetadataChannel``"""
524522 return str (self ._query_channel_metadata_property (gdef .EvtPublisherMetadataChannelReferencePath ))
525523
526524 @property
527525 def id (self ):
526+ """The reference id of the ``PublisherMetadataChannel``"""
528527 return int (self ._query_channel_metadata_property (gdef .EvtPublisherMetadataChannelReferenceID ))
529528
530529 @property
531530 def index (self ):
531+ """The reference index of the ``PublisherMetadataChannel``"""
532532 return int (self ._query_channel_metadata_property (gdef .EvtPublisherMetadataChannelReferenceIndex ))
533533
534534 @property
535535 def message_id (self ):
536+ """The message id of the ``PublisherMetadataChannel``"""
536537 return int (self ._query_channel_metadata_property (gdef .EvtPublisherMetadataChannelReferenceMessageID ))
537538
538539
539540class PublisherMetadataLevel (object ):
540-
541+ """Represent a PublisherMetadataLevel (see https://docs.microsoft.com/en-us/windows/win32/api/winevt/ne-winevt-evt_publisher_metadata_property_id)"""
541542 def __init__ (self , pub_metadata , channel_id ):
542543 super (PublisherMetadataLevel , self ).__init__ ()
543544 self .pub_metadata = pub_metadata
@@ -560,7 +561,7 @@ def message_id(self):
560561
561562
562563class PublisherMetadataOpcode (object ):
563-
564+ """Represent a PublisherMetadataOpcode (see https://docs.microsoft.com/en-us/windows/win32/api/winevt/ne-winevt-evt_publisher_metadata_property_id)"""
564565 def __init__ (self , pub_metadata , channel_id ):
565566 super (PublisherMetadataOpcode , self ).__init__ ()
566567 self .pub_metadata = pub_metadata
@@ -571,18 +572,22 @@ def _query_opcode_metadata_property(self, propertyid):
571572
572573 @property
573574 def name (self ):
575+ """The name of the ``PublisherMetadataOpcode``"""
574576 return str (self ._query_opcode_metadata_property (gdef .EvtPublisherMetadataOpcodeName ))
575577
576578 @property
577579 def value (self ):
580+ """The opcode value of the ``PublisherMetadataOpcode``"""
578581 return int (self ._query_opcode_metadata_property (gdef .EvtPublisherMetadataOpcodeValue ))
579582
580583 @property
581584 def message_id (self ):
585+ """The message id of the ``PublisherMetadataOpcode``"""
582586 return int (self ._query_opcode_metadata_property (gdef .EvtPublisherMetadataOpcodeMessageID ))
583587
584588
585589class PublisherMetadataKeyword (object ):
590+ """Represent a PublisherMetadataKeyword (see https://docs.microsoft.com/en-us/windows/win32/api/winevt/ne-winevt-evt_publisher_metadata_property_id)"""
586591
587592 def __init__ (self , pub_metadata , channel_id ):
588593 super (PublisherMetadataKeyword , self ).__init__ ()
@@ -594,18 +599,21 @@ def _query_keyword_metadata_property(self, propertyid):
594599
595600 @property
596601 def name (self ):
602+ """The name of the ``PublisherMetadataKeyword``"""
597603 return str (self ._query_keyword_metadata_property (gdef .EvtPublisherMetadataKeywordName ))
598604
599605 @property
600606 def value (self ):
607+ """The value of the ``PublisherMetadataKeyword``"""
601608 return int (self ._query_keyword_metadata_property (gdef .EvtPublisherMetadataKeywordValue ))
602609
603610 @property
604611 def message_id (self ):
612+ """The message id of the ``PublisherMetadataKeyword``"""
605613 return int (self ._query_keyword_metadata_property (gdef .EvtPublisherMetadataKeywordMessageID ))
606614
607615class PublisherMetadataTask (object ):
608-
616+ """Represent a PublisherMetadataTask (see https://docs.microsoft.com/en-us/windows/win32/api/winevt/ne-winevt-evt_publisher_metadata_property_id)"""
609617 def __init__ (self , pub_metadata , channel_id ):
610618 super (PublisherMetadataTask , self ).__init__ ()
611619 self .pub_metadata = pub_metadata
@@ -616,18 +624,22 @@ def _query_keyword_metadata_property(self, propertyid):
616624
617625 @property
618626 def name (self ):
627+ """The name of the ``PublisherMetadataTask``"""
619628 return str (self ._query_keyword_metadata_property (gdef .EvtPublisherMetadataTaskName ))
620629
621630 @property
622631 def value (self ):
632+ """The value of the ``PublisherMetadataTask``"""
623633 return int (self ._query_keyword_metadata_property (gdef .EvtPublisherMetadataTaskValue ))
624634
625635 @property
626636 def event_guid (self ):
637+ """The event GUId of the ``PublisherMetadataTask``"""
627638 return self ._query_keyword_metadata_property (gdef .EvtPublisherMetadataTaskEventGuid )
628639
629640 @property
630641 def message_id (self ):
642+ """The message ID GUId of the ``PublisherMetadataTask``"""
631643 return int (self ._query_keyword_metadata_property (gdef .EvtPublisherMetadataTaskMessageID ))
632644
633645class EvtPublisher (object ):
@@ -1046,37 +1058,3 @@ def __getitem__(self, name):
10461058 # Raise FILE_NOT_FOUND if not found (last chance)
10471059 return self .open_evtx_file (name )
10481060
1049-
1050-
1051-
1052- # CHANNAME = "Microsoft-Windows-Windows Firewall With Advanced Security/Firewall"
1053- # CHANNAME = r"Microsoft-Windows-Windows Defender/Operational"
1054-
1055- # print("Working of channel: <{0}>".format(CHANNAME))
1056-
1057- # channel = EvtChannel(CHANNAME)
1058- # chanconf = channel.config
1059- # publisher = chanconf.publisher
1060-
1061- # open publisher metadata
1062-
1063- # print("Provider is <{0}>".format(publisher.name))
1064-
1065- # pmd = publisher.metadata
1066- # chansref = pmd.chanrefs
1067-
1068- # channame_by_value_id = pmd.channel_name_by_id()
1069-
1070- # for event_metadata in pmd.events_metadata:
1071- # id = event_metadata.id
1072- # if id == 2004:
1073- # print("LOL")
1074- # chan = event_metadata.channel_id
1075- # channame = channame_by_value_id[chan]
1076- # print(" * {0}) {1}".format(id, channame))
1077- # if "unexpected" in pmd.message(event_metadata.message_id).lower():
1078- # print("UNEXPECTED in message :D")
1079-
1080-
1081- # query = channel.query(ids=5008)
1082- # evts = list(query)
0 commit comments