我使用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 \ 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“
在这里可以做什么?条目中也没有任何内容。数据可能会帮助我获得这两个值。
答案 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。