我正在使用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));
我需要一些帮助,说实话,我不知道还有什么可以尝试的。
更新我在这里添加一些图像,这样每个人都可以更好地了解情况。说实话,看起来没有解决办法,只能实现字典并手动替换所需的值,这些值似乎总是常量。
您可以清楚地看到以下值:
将在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中也没有任何内容可以帮助我获取这两个值。
不,我相信你错了,抱歉这个答案为时已晚。我发现了一个由chrome引发的类似事件,并评估了事件处理程序是否遗漏了任何内容。没有错过任何东西。我在控制台输出中得到的消息与我在事件查看器中看到的完全匹配。
一个更好的解决方案是
使用entry.Data来获取完整数据而不是entry.Message
entry.Data将返回一个byte[]
,您可以将其转换为字符串。这是条目所有属性的link。