如何从EventMessageFile(.dll)中读取事件消息详细信息?

时间:2019-04-20 07:41:12

标签: winapi event-log

您好,我想编写一个程序,该程序的一部分将读取事件日志,并在发生重要事件时通知用户。

据我了解,由于记录了这么多日志,因此Windows使用EventMessageFiles(可能还有CategoryMessageFile和ParameterMessageFile)来减小日志的大小。可能的事件ID,与它们相关的描述,所需的参数以及如何在描述中使用它们,以及可能在这些文件中指定了其他内容。我想阅读这些文件以进行准备,以了解哪些eventIds很重要以及如何将它们通知用户。

例如,假设我要阅读google chromes事件消息文件。我认为最接近的是尝试此操作的时间:

    import win32api,win32con

    eventmessagefile_addr = "C:\\Program 
    Files\\Google\\Chrome\\Application\\73.0.3683.103\\eventlog_provider.dll"

    eventmessagefile_handle = win32api.LoadLibraryEx(eventmessagefile_addr,None,win32con.LOAD_LIBRARY_AS_DATAFILE)

    resource_types = win32api.EnumResourceTypes(eventmessagefile_handle)  # 
    resource_types = [11,16]

    resorce11 = win32api.EnumResourceNames(lbl,"#11") # I don't know what this means but resource11 = [1]

    data= win32api.LoadResource(lbl,"#11",1) # now this gives me some bytes that I have no idea what they are and data.decode('utf-8') fails.

所以我应该如何读取这些dll文件。

PS:首选python,但也可以使用c ++和c#。

1 个答案:

答案 0 :(得分:0)

资源type 11是消息表。

  

MESSAGE_RESOURCE_DATA结构可以包含一个或多个MESSAGE_RESOURCE_BLOCK结构,每个结构都可以包含一个或多个MESSAGE_RESOURCE_ENTRY结构。