OnEntryWritten读取的消息带有未设置的参数

时间:2018-12-21 13:11:36

标签: c# windows event-log

我使用OnEntryWritten事件是为了在触发事件时从事件日志中获取事件。

我今天开始看到的问题是某些消息未设置参数。

例如:

Windows筛选平台已允许绑定到本地端口。应用程序信息:进程ID:9852应用程序名称:\ device \ harddiskvolume7 \ program files(x86)\ google \ chrome \ application \ chrome.exe网络信息:源地址:::源端口:51714协议:17过滤器信息:过滤器运行-Time ID:0层名称:%% 14608层运行时ID:38

您可以看到%% 14608参数。如果在事件查看器中看到相同的日志,则会附带一个值。

我正在将Windows服务作为LocalSystem运行,所以我不知道这是权限问题还是该技术根本没有用。 我已经尝试了C#上提供的其余功能,但它们也不符合我的要求。

更新:这是我用来读取事件的代码。

1)首先,我订阅相应的事件日志:

private void Subscribe()
        {
            _eventLog.EnableRaisingEvents = true;
            var callbackFunction = new EntryWrittenEventHandler(OnEntryWritten);
            _eventLog.EntryWritten += callbackFunction;

            // Save a reference for callbackFunction
            _eventHandler = callbackFunction;
        }

2)然后在回调方法上,我从消息中读取数据:

public void OnEntryWritten(Object source, EntryWrittenEventArgs entryArgs)
        {
            // When overwrite policy is enabled, this will trigger for all elements when it starts writing new ones
            try
            {
                var entry = entryArgs.Entry;
                var timeWritten = entry.TimeWritten;

                // This comes with %% values depending on the log
                string message = entry.Message;

            }
            catch(Exception ex)
            {
                ...
            }
        }

3)事件日志变量被简单地初始化为:

var eventLog = EventLog.GetEventLogs().FirstOrDefault(el => el.Log.Equals(logName, StringComparison.OrdinalIgnoreCase));

我需要一些帮助,说实话,我不知道还能尝试什么。

更新 我在这里添加一些图像,以便每个人都能更好地了解情况。坦白地说,似乎没有其他解决方案,只能实现一个字典并手动替换所需的值,这些值似乎总是常量。

这是我在事件查看器上看到的给定事件ID的内容: Data from Event Viewer

这是我在阅读该条目时在程序上看到的内容: Entry being read from program 1

Entry being read from program 2

您可以清楚地看到以下值:

  • “机器密钥”。 (密钥类型)
  • “从文件读取持久密钥。” (操作)

在ReplacementStrings和Message属性中未映射为:%% 2499和%% 2458

这是我在程序中得到的消息值:
“密钥文件操作。\ r \ n \ r \ n主题:\ r \ n \ t安全ID:\ t \ tS-1-5-18 \ r \ n \ t帐户名称:\ t \ tMyAccount $ \ r \ n \ tAccount域:\ t \ tWORKGROUP \ r \ n \ t登录ID:\ t \ t0x3e7 \ r \ n \ r \ n进程信息:\ r \ n \ t进程ID:\ t \ t6644 \ r \ n \ t进程创建时间: \ t2019-04-03T12:17:24.587994400Z \ r \ n \ r \ n加密参数:\ r \ n \ t提供商名称:\ tMicrosoft软件密钥存储提供商\ r \ n \ t算法名称:\ tUNKNOWN \ r \ n \密钥名称:\ t816339d2-c476-4f1e-bc40-954f0aa0f851 \ r \ n \ t密钥类型:\ t %% 2499 \ r \ n \ r \ n密钥文件操作信息:\ r \ n \ t文件路径:\ tC:\ ProgramData \ Microsoft \ Crypto \ Keys \ 6d55a45fd69327293e9ed3e7930f4565_5663a8bb-2d1d-4c0d-90c1-624beddabe9c \ r \ n \ t操作:\ t %% 2458 \ r \ n \ t返回码:\ t0x0“

在这里可以做什么?条目中也没有任何内容。数据可能会帮助我获得这两个值。

1 个答案:

答案 0 :(得分:0)

不,我相信您错了,很抱歉此答案为时已晚。我发现了由chrome引发的类似事件,并评估了事件处理程序是否遗漏了任何内容。没有任何遗漏。我在控制台输出中收到的消息与在事件查看器中看到的完全匹配。

一个更好的解决方案是

  

使用 entry.Data 而不是 entry.Message

来获取完整的数据

entry.Data 将返回一个class ReportEntry(models.Model): process = models.CharField(max_length=30) received = models.DateTimeField(auto_now_add=True) status = models.SmallIntegerField(default=1) def refresh(self): self.refresh_from_db() self.save() ,您可以将其转换为字符串。这是条目将具有的所有属性的link