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

2024-01-29

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

键,根据中列出的内容加载适当的 DLLEventMessageFile最后使用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,有时称为基于清单的提供程序)。这个新系统的工件之一是使用这些日志的新 API,另一个是使用这个新框架生成事件的某些 EventSource 的 ProviderGuid 键。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有 EventMessageFile 的情况下读取 Windows 事件日志? 的相关文章

  • 事件日志监听器 - 应用程序和服务

    有没有办法在生成 应用程序和服务 事件时监视它们 在 C 中 我发现我不能使用 WMI 还有其他想法吗 您可以订阅EventLog EntryWritten 事件 当条目写入本地计算机上的事件日志时发生 来自 MSDN EventLog m
  • 从路径读取事件日志文件

    我的问题与这个非常相似如何以编程方式打开事件日志 除了我正在记录任何东西 我需要从多台未连接的机器创建日志条目数据库 我收到 evtx 文件 然后尝试处理它们 现在我正在从导出的 xml 文件中执行此操作 但我想跳过到 xml 转换部分 我
  • WIX:使用 .NET 消息文件创建 EventSource

    我正在使用 WIX 为我的应用程序创建一个安装程序 到目前为止一切正常 但是 我试图在安装过程中创建一个新的事件源 但它没有按预期工作 我已阅读并理解这个问题这里是这样 但我有一个有点不同的情况 其中给定的解决方案似乎无法正常工作 以下是不
  • 我应该如何在 C++ 中正确使用 FormatMessage()?

    Without MFC ATL 我该如何使用FormatMessage 获取错误文本HRESULT HRESULT hresult application CreateInstance Excel Application if FAILED
  • 如何以编程方式或定期清除操作 PrintService 事件日志?

    我们正在尝试对在 Windows Server 2008 R2 上运行的打印机进行一些内部打印审核 通过事件查看器启用日志后 应用程序和服务日志 gt Microsoft gt Windows gt PrintService gt 操作 我
  • 如何使用 WiX 创建事件日志源

    我正在为使用自定义事件日志源的网站创建安装程序 我希望基于 WiX 的安装程序在安装过程中创建该事件日志源 有谁知道使用 WiX 框架执行此操作的最佳方法 Wix 对创建事件日志源提供开箱即用的支持 假设您使用 Wix 3 您首先需要将对
  • 通过 ETW(Windows 事件跟踪)在实时消费者中使用“Microsoft Windows 安全审核”提供程序

    我的任务是使用 Microsoft Windows 安全审核 提供的事件创建 ETW 实时消费者 我基于这个例子制作了一个简单的控制器和消费者应用程序http msdn microsoft com en us library windows
  • 如何读取 Windows 7 上的启动时间事件?

    我尝试使用 ETW 函数读取文件但没有成功 C Windows System32 winevt Logs Microsoft Windows Diagnostics Performance 4Operational evtx 为了捕获启动时
  • C# EventLog 无法访问日志

    下面是我在运行下面的代码时遇到的异常 未找到源 但无法搜索部分或全部事件日志 无法访问的日志 安全性 代码是 if EventLog SourceExists this EventLogSource 异常的内容对我来说有意义 这就是为什么它
  • 将异常写入 Windows 日志文件

    我想捕获异常并将其记录在 Windows 日志文件中 如何打开并写入 Windows 日志 您可以使用系统 诊断 EventLog WriteEntry http msdn microsoft com en us library syste
  • Get-EventLog - 某些事件日志源缺少有效消息

    我正在使用 get eventlog 提取和过滤系统事件日志数据 我发现 get event log 无法正确返回与某些条目关联的消息 这些条目通常显示在事件日志查看器中 例如 get eventlog logname system sou
  • 如何在 Windows 事件系统中创建日志名层次结构?

    我正在使用企业库记录消息 我希望将其中一些 通常是错误和警告 传递到 Windows 事件系统 我今天通过 entlib config 路由这些 这个解决方案有效 到目前为止 效果很好 但是 我的需求超出了该解决方案所能提供的范围 我有多个
  • 我可以指望这个 ASP.NET 事件日志源始终被注册吗?

    未处理的异常导致基于 ASP NET 的应用程序在 NET Framework 2 0 中意外退出 http support microsoft com id 911816让我认为使用以下约定命名的事件日志源将始终在安装了 NET Fram
  • 如何确定 EventLog 是否已存在

    我正在使用以下行创建新的事件日志 new eventlog LogName Visual Studio Builds Source Visual Studio 我想每次都运行它 因为如果我从新计算机运行构建 我仍然希望查看事件日志 问题是
  • 获取Windows事件提供者信息

    我想使用 Windows PowerShell 检索有关事件提供程序的信息 我正在运行带有 PowerShell 版本 4 0 的 Windows 8 1 并且我注意到有一些 NET 类System Diagnostics Eventing
  • 事件查看器 — 记录到子文件夹?

    我找啊找啊 找不到答案 我们有一个运行并登录到事件查看器的自定义服务 在 Windows 7 中 有一个名为 应用程序和服务日志 的文件夹 我如何在那里记录事件 有可能吗 当您使用以下内容创建新的事件日志时 它会自动发生 EventLog
  • 未处理的 IIS 异常 - 如何追踪它

    我在事件日志中看到以下错误 它来自我们的 ASP Net 应用程序 我无法追踪导致错误的原因 任何建议表示赞赏 OS Windows Server 2000 网络服务器 IIS 6 应用 ASP Net v3 5 错误日志 MachineN
  • 如何确定c#中的dns变化?

    我想监控dns地址的变化 所以我需要跟踪 dns 更改 我现在正在用线程来做 我获取 dns 并将其保存为文件 然后每 10 秒比较一次它们 但我需要更具体的解决方案 例如 有相关活动吗 这是代码 GetDns public List
  • PHP gzuncompress 出现文件读写错误

    我有一个函数可以跟踪脚本中发生的事件 为了有效地利用我的资源 我决定压缩它生成的数据 但是 我不断收到此错误 Unknown error type 2 gzuncompress function gzuncompress data erro
  • NT 事件日志单条消息大小

    谁能告诉我 Windows NT 日志消息的最大大小是多少 我知道可以将事件日志的最大日志大小从 32 MB 重置 我对 NT 事件日志中单个消息可以保存的内存感兴趣 提前致谢 在 Windows Server 2008 中 单个事件日志条

随机推荐