gpt4 book ai didi

event-log - 如何在没有 EventMessageFile 的情况下读取 Windows 事件日志?

转载 作者:行者123 更新时间:2023-12-02 22:55:13 28 4
gpt4 key购买 nike

我有读取 Windows 事件日志的代码。它使用 OpenEventLog、ReadEventLog 并获取事件源和事件 ID。然后它在

下查找源
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

键,根据EventMessageFile中列出的内容加载适当的DLL。最后使用 FormatMessage将事件字符串与消息 DLL 内容合并以获得最终的事件消息文本。这是推荐的方式,虽然有点痛苦,但效果很好。

直到...我去查找源代码,发现它没有 EventMessageFile ,而是 ProvideGuid入口。这似乎是新方式(它们出现在 Vista 和 Windows 2008 上)。呃——没有什么可以传递给 FormatMessage 来查找消息文本并合并到数据字符串中

:(

在注册表中搜索 guid 确实会导致对其他文件的引用(在 HTTP 源的情况下为 http.sys),但我永远无法获得完整的消息文本。我必须使用那些EvtOpenSession蜜蜂?我希望不会,因为我已经有了 EVENTLOGRECORD*调用ReadEventLog ,并且该软件需要在 Windows 2003 上运行,其中 EvtOpenSession不受支持(仅适用于 Vista 和 Windows 2008)。注意:Vista 上的某些源具有 ProviderGUID,其他源具有 EventMessageFile,因此旧方法仍然可行。

所以我想要的是一种查看 ProviderGuid 并获取需要传递给 FormatMessage 的 DLL 的方法,以显示完整的事件日志消息文本。

感谢您的任何意见

最佳答案

Richard 链接到的 API 适用于 Vista/Server 2K8 中引入的新型事件系统(代号为 Crimson,有时称为基于 list 的提供程序)。这个新系统的工件之一是使用这些日志的新 API,另一个是使用这个新框架生成事件的某些 EventSource 的 ProviderGuid 键。

我认为您应该稍后使用 Windows Vista 上的功能来使用这些日志,它应该会为您处理这些工作。您可以使用 EvtFormatMessage 方法来格式化字符串。我相信这些 API 也会读取“经典”提供商生成的事件。

如果您从 .NET 应用程序使用这些消息,则可以使用 .NET 3.5 中引入的 System.Diagnostics.Eventing.Reader 命名空间中的类型。

关于event-log - 如何在没有 EventMessageFile 的情况下读取 Windows 事件日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/607345/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com