如何使用不存在的源写入 Windows 事件日志记录
Posted
技术标签:
【中文标题】如何使用不存在的源写入 Windows 事件日志记录【英文标题】:How to write Windows Event log records with non-existing source 【发布时间】:2013-05-02 13:59:55 【问题描述】:有人给了我一个测试程序来将记录写入 Windows 事件日志(但我没有源代码)。我了解编写和查看事件日志的一般方式,但该程序的行为非常特殊,我可以编写记录,其来源不存在。 .../eventlog/application 中甚至没有注册表项,因此没有格式化库。
如果我从自己的代码中尝试,我可以编写这样的记录,但 Windows 事件查看器总是告诉我“找不到描述”(这是正确的,我理解为什么会发生这种情况)。
现在的问题是:既然国外的测试程序可以做到,那么它一定是有可能的——但是怎么做呢?
非常感谢! :-)
【问题讨论】:
【参考方案1】:好的,最后我找到了它(也得到了源代码)- prog 创建了注册表项(可能在调用 CreateEventSource() 时发生),它在刷新 regedit 之前是不可见的:-|
而且,它确实注册了一个格式化库,只是我不能依赖它:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\EventLogMessages.dll
或者,我可以吗?
啊,我们来解释一下: Difference between EventLog.WriteEntry and EventLog.WriteEvent methods 所以,我不能,因为我没有使用 .Net ... :-|
现在,如果我现在从 MY prog 发送另一个事件(使用与外部 prog 相同的新创建源),我通常会在事件查看器中看到它。 这意味着,WriteEntry() 实际上并没有直接写入包含文本的不同/特殊类型的 evt 日志记录(与仅写入 msg 目录 ID + 参数的标准方法相反),而是在格式化库中必须有一些技巧使 EventViewer 应用某种“默认”格式。
有什么想法可以做到这一点吗?除了只是复制上面的 EventLogMessages.dll 吗? :-)
好的,终于在http://msdn.microsoft.com/en-us/magazine/cc163446.aspx找到了关于这个的答案 "这个文件叫做 EventLogMessages.dll,它包含 65,536 个事件描述,每一个都由字符串 "%1" 组成,它是你想写的任何字符串的占位符"
我希望有类似“messageid=*”的东西,但这似乎太简单了:-|
但也许其他人对这里发生的事情感兴趣......
【讨论】:
以上是关于如何使用不存在的源写入 Windows 事件日志记录的主要内容,如果未能解决你的问题,请参考以下文章
配置在 Windows 10 上运行的 Oracle XE 日志记录,防止写入 Windows 事件日志