用托管C++监视Windows事件日志

随着病毒、流氓软件、广告软件等的日益增多,许多人都开始使用注册表监视程序,这些监视程序通常会在安装软件试图修改注册表时,弹出一个警告窗口提示用户。然而,在安全问题上,经常被忽略的地方则是Windows事件日志--尤其是安全日志,安全日志通常记录了Windows操作系统及关键系统应用程序的操作,如试图非法登录、端口扫描、及其他安全相关的事件。

文中将演示如何在应用程序中监视Windows事件日志,当然了,还可以对程序进行扩充,如在事件日志记录到特定的事件类型时,发电子邮件通知用户。

用 .NET EventLog进行监视

文中的代码使用了 .NET 1.0/1.1托管C++语法,如果你在使用一个更高版本的 .NET,需要在工程属性对话框中设置/clr:oldSyntax编译选项,或调整以下代码使之符合新的托管语法。

用于Windows事件日志的关键 .NET类型是Diagnostics::EventLog类。

1、 定义一个托管类并实现事件日志通知处理程序

处理程序(OnNewLogEntry)会在"新事件日志项"事件引发时调用,同时,请注意此处的EntryWrittenEventHandler,以下是示例代码:

//用于监视新事件日志项的示例代码
__gc class NewLogEntryEventHandler
{
 public:
  NewLogEntryEventHandler() {}
 public:
  void OnNewLogEntry(Object* sender, EntryWrittenEventArgs* e)
  {
   //获取并处理最近创建的项
   EventLogEntry* entry = e->Entry;
  }
};


2、实例化一个EventLog对象,并把它的EnableRaisingEvents属性设为true

属性EventLog::EnableRaisingEvents是一个布尔类型,其控制了在项目添加到EventLog对象指定的日志时,是否引发事件:

EventLog* log = new EventLog("Application");
log->EnableRaisingEvents = true;


3、把事件处理程序连接到"新事件日志项"事件

首先,实例化定义了事件处理程序的对象(在此例中为NewLogEntryEventHandler),接着,把事件方法(OnNewLogEntry)添加到EventLog::EntryWritten的事件处理程序列表中:

NewLogEntryEventHandler* handler = new NewLogEntryEventHandler();
log->EntryWritten +=
new EntryWrittenEventHandler( handler,&NewLogEntryEventHandler::OnNewLogEntry);


4、为特定事件的处理编写代码

回过头来看一个OnNewLogEntry方法,可以看到传递给事件处理程序的EntryWrittenEventArgs对象有一个名为EventLogEntry的成员,其包含了有关记录项目的详细情况,具体为以下属性:

·MachineName--创建事件日志的电脑系统名。

·Source--创建此事件的事件源或程序源。

·Message--用户可在事件查看器中读取这条文本值,其描述了记录的事件。

·Event Type--此值(代表了EventLogEntryType)为一个枚举值,其代表记录的事件类型:信息(默认)、警告、错误、审核成功、审核失败。

·Event ID--为有关事件程序特定的号码。

·Data--此值通常用于存储二进制信息--如内存转储--也是与事件有关的。

不足之处

从以上可以看出,.NET使得访问事件日志非常简单,然而,以下也有一些有关处理事件日志时的限制条件:

·只能在本地系统上监视事件。

·.NET文档未说明,如果在短时间内记录了大量的事件,是否可保证每个事件都可被引发。

·如果监视了更新特别频繁的事件日志,事件有可能不会立即引发,在事件项之间很可能会有一个滞后,接着突然会有大量的事件通知进入消息队列。

时间: 2024-08-20 06:20:40

用托管C++监视Windows事件日志的相关文章

C#3.0杂谈之使用EventLog类写Windows事件日志

操作系统:Windows XP SP3 开发工具:Visual Studio 2008 语言:C# 3.0 .net Framework:3.5 在程序中经常需要将指定的信息(包括异常信息和正常处理信息)写到日志中.在C#3.0中可以使用EventLog类将各种信息直接写入Windows日志.EventLog类在System.Diagnostics命名空间中.我们可以在"管理工具" > "事件查看器"中可以查看我们写入的Windows日志,如下图所示: 下面是

Powershell使用WINDOWS事件日志记录程序日志_PowerShell

通常,人们使用基于文件的日志.这样做没有什么问题,但是使用WINDOWS提供系统内部日志会更加简单. 如果你有管理权限,你可以随时创建一个新的日志: 复制代码 代码如下: New-EventLog -LogName myLog -Source JobDue, JobDone, Remark 该命令创造了一个名为Mylog的日志,这个事件源自"JobDUE","JobDone"和"Remark".管理员权限只是为了创造日志,剩下的操作其它用户都可以

windows事务日志的安全性异常

问题描述 安全性异常说明:应用程序试图执行安全策略不允许的操作.要授予此应用程序所需的权限,请与系统管理员联系,或在配置文件中更改该应用程序的信任级别.异常详细信息:System.Security.SecurityException:未找到源,但未能搜索某些或全部事件日志.不可访问的日志:Security.源错误:行324://EventLog提供与Windows事件日志的交互行325://如果事件源btlts没有在计算机中注册,则创建事件源行326:if(!EventLog.SourceExi

日常事件日志监控工具推荐

Windows事件日志文件可以说是一个信息宝库,包含了服务器性能和操作等重要信息.但是定期梳理是一件非常乏味的工作,尤其是当你的数据中心里有不少服务器需要维护的时候. Windows Server将事件日志进行了分类,包括应用程序.安全和系统类,默认情况下,每台服务器的事件日志文件保存在本地. 市场上有大量的事件日志监控工具,包括免费的和付费的.你要根据自己的需求进行选择.不管选择哪种工具,肯定是希望能够尽可能多地清理和纠正日志文件中的错误.一款合适的,用来进行Windows服务器故障排除和维护

使用批处理for命令清除事件查看器所有Windows EventLog日志_DOS/BAT

以前装完系统后要做个Ghost,为了达到完美,每次做Ghost前都会手动清除 事件查看器所有Windows EventLog日志. 后来使用了Windows 2008 r2/Win7后,这事变的复杂多了,所以也就没管了. 再后来有同事问到如何把他们全部清除,因为一个一个清,在Microsoft一级有很多目录,要想完全清除得半小时,并且清除后又有了,不实用. 再到今天,我在玩Hyper-V时,总看到一堆Error,鉴于之前给公司做的持续交付里,批处理大显身手,所以想应该可以使用批处理来实现, Go

Windows Server 2008实现服务器事件日志的转发和订阅

事件日志管理是服务器维护中的一项非常重要的日常工作,当然也是一项耗费精力.体力的工作,特别是当局域网中有非常多的http://www.aliyun.com/zixun/aggregation/15818.html">应用服务器时更是如此.一个好的管理方案是,部署一个专门用于事件日志管理的中央服务器,然后将其他服务器上的日志转发到该中央服务器上实施集中管理.不过,这需要利用第三方软件来实现.在Windows Server 2008中提供了一项新功能,通过它我们可以实现服务器事件日志的转发和订

在VC++程序中自定义Vista事件日志

就Windows开发者及系统管理员来说,Windows Vista日志相比以前,无疑有了一个很大的提高.对开发者来说,Vista的日志记录对多种事件与日志选项,都表现出统一一致性:而对网络管理员及IT专家,它提供了丰富的人机界面用于管理事件.新的日志记录方式,也只能通过Windows SDK中新的本机函数来实现,下面就来看看怎样在程序中实现新的记录方式. 创建并编译清单文件 如果程序中使用了新的API,且要把事件记录到日志中,就需要创建一个清单文件(这里补充一点,如果未使用新的API,或仅是使用

Windows 事件查看器(收集)

原文:Windows 事件查看器(收集) 事件查看器相当于一本厚厚的系统日志,可以查看关于硬件.软件和系统问题的信息,也可以监视 Windows 的安全事件 提示:除了可以在"控制面板→管理工具"中找到"事件查看器"的踪影外,也可以在"运行"对话框中 手工键入"%SystemRoot%\system32\eventvwr.msc /s"打开事件查看器窗口. 1. 应用程序日志 包含由应用程序或系统程序记录的事件,主要记录程序运

云服务器 ECS 安全:ECS Windows的日志使用与简要分析说明

ECS Windows的日志使用与简要分析说明 简介 日志是记录系统中硬件.软件和系统问题的信息,同时还可以监视系统中发生的事件,当服务器被入侵或者系统(应用)出现问题时,管理员可以根据日志来迅速定位到问题的关键,然后对问题在进行快速的处理,这样才可以极大的提高我们的工作效率和服务器的安全性.Windows系统日志主要分为三种,分别是系统日志.应用程序日志和安全日志,还有应用程序和服务日志.接下来以Windows server 2008 R2为例来简单的介绍下四种日志的使用和简要分析. Wind