c# - OnEntryWritten 读取的消息带有未设置的参数
问题描述
我正在使用 OnEntryWritten 事件,以便在事件被触发时从事件日志中获取事件。
我今天开始看到的问题是某些消息带有未设置的参数。
例如:
Windows 筛选平台已允许绑定到本地端口。应用程序信息:进程 ID:9852 应用程序名称:\device\harddiskvolume7\program files (x86)\google\chrome\application\chrome.exe 网络信息:源地址:::源端口:51714 协议:17 过滤器信息:过滤器运行-时间 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\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\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[]
您可以转换为字符串的。这是条目将具有的所有属性的链接。
推荐阅读
- android - 工具栏未在创建时或在 XML 中设置高度
- python - Python GUI 显示带有选项的 PDF 文件
- java - Spring Boot:如何初始化一类常量值
- javascript - VueJS 使用 $set 或 Vue.set 更新 {} 不起作用
- sql - 在没有持久数据库连接的情况下填充 RowSource 和 RecordSource
- r - R data.frame 因子而不是级别
- laravel - 一个redis实例可以订阅其他redis实例吗?
- java - 使用 Jboss 阅读 PropertyPlaceholderConfigurer 类路径 Spring
- javascript - 谷歌图表列名覆盖
- swift - 自定义沙盒 NSSavePanel 警报