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

问题描述 投票:1回答:1

我正在使用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 \ t \ tTyAccount $ \ r \ n \ n \ n t帐户域:\ t \ tWORKGROUP \ r \ n \ t登录ID:\ t \ t0x3e7 \ r \ n \ r \ n过程信息:\ r \ n \ t过程ID:\ t \ t \ t \ t6644 \ r \ n \ t \程序创建时间: \ t2019-04-03T12:17:24.587994400Z \ r \ n \ r \ n Cryptographic参数:\ r \ n \ t提供者名称:\ tMicrosoft软件密钥存储提供程序\ r \ n \ t算法名称:\ tUNKNOWN \ r \ n \ n \ n t键名:\ 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“

这可以做什么? entry.Data中也没有任何内容可以帮助我获取这两个值。

c# windows event-log
1个回答
0
投票

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

一个更好的解决方案是

使用entry.Data来获取完整数据而不是entry.Message

entry.Data将返回一个byte[],您可以将其转换为字符串。这是条目所有属性的link

© www.soinside.com 2019 - 2024. All rights reserved.