<b>用托管C++监督Windows事件日记</b>[VC/C++编程]
本文“<b>用托管C++监督Windows事件日记</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
随着病毒、地痞软件、广告软件等的日益增添,很多人都开始利用注册表监督程序,这些监督程序普通会在安装软件试图改正注册表时,弹出一个告诫窗口提醒用户.但是,在安全问题上,常常被忽视的地方则是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文档未阐明,假如在短时间内记录了大量的事件,能否可保证每个事件都可被引发.
·假如监督了更新分外频繁的事件日记,事件有大概不会当即引发,在事件项之间极大概会有一个滞后,接着忽然会有大量的事件告诉进入消息行列.
以上是“<b>用托管C++监督Windows事件日记</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |