EventLog支持异常/报错/安全事件信息记录

功能描述:当风扇,键盘不在位/ 内存,硬盘有变化时,Setup界面记录事件信息,并根据 日期 时间 事件显示出来,也可以清除所有记录。

在这里插入图片描述

一、创建EventLog的Dxe Driver

事件日志的驱动包括四个部分:追加一条记录,删除记录,覆盖记录,得到下一条记录。
四个部分都涉及到链表的操作
定义一个链表的全局变量,该变量的数据代表当前记录,forwardLink表示指针指向前一个链表,backLink表示指针指向后一个链表。

LIST_ENTRY                            mEventLogList;
struct _LIST_ENTRY {
  LIST_ENTRY  *ForwardLink;
  LIST_ENTRY  *BackLink;
};

每一条记录的结构体包括,链表指针和内容(事件,日期,事件)

EFI_EVENT_LOG_DATA                    *EventLog;
typedef struct {
  UINT32                    Signature;
  LIST_ENTRY                Link;
  EVENT_LOG_ORGANIZATION    *Buffer;
} EFI_EVENT_LOG_DATA;
typedef struct {

  //
  //Log Header is optional, default is no header
  //
  UINT8   Type;
  UINT8   Length;

  UINT8   Year;
  UINT8   Month;
  UINT8   Day;
  UINT8   Hour;
  UINT8   Minute;
  UINT8   Second;
  UINT8   DataFormatType;
  UINT8   Data[8];
  //
  //Log Variable Data is optional
  //
} EVENT_LOG_ORGANIZATION;
1,追加一条记录

在这里插入图片描述
追加记录使用插入头链表的方法,由图可以看出,追加记录的初始地址 = 当前记录初始地址+一条记录的大小

 CopyMem ((UINT8*) ((UINTN) EventLog->Buffer + NumBytes - OptionDataSize), OptionLogData, OptionDataSize);
 InsertTailList (&mEventLogList, &EventLog->Link);
2、删除全部记录

初始化链表就可以删除链表里的记录

InitializeListHead (&mEventLogList);
3、覆盖记录

先初始化再追加记录

InitializeListHead (&mEventLogList);
 CopyMem ((UINT8*) ((UINTN) EventLog->Buffer + NumBytes - OptionDataSize), OptionLogData, OptionDataSize);
 InsertTailList (&mEventLogList, &EventLog->Link);
4、读取下一条记录

1)得到第一条记录
2)一直查询直到匹配输入的一条记录,匹配成功返回下一条记录地址

 Link = mEventLogList.ForwardLink;
  while (Link != &mEventLogList) {
    EventLog = DATA_FROM_EFI_EVENT_LOG_THIS(Link);
    if (EventLog->Buffer == *EventListAddress) {
      Link = Link->ForwardLink;
      if (Link == &mEventLogList) {
        return EFI_NOT_FOUND;
      }
      
      EventLog = DATA_FROM_EFI_EVENT_LOG_THIS(Link);
      *EventListAddress = (VOID *) EventLog->Buffer;
      return EFI_SUCCESS; 
    }
    
    Link = Link->ForwardLink;
  }
5、安装DXE Driver的protocol,提供日志读写、删除、追加功能方法
ELPrivate->Signature                      = EVENT_LOG_SIGNATURE;
  ELPrivate->DevicePtr                      = NULL;
  ELPrivate->GPNVBase                       = (UINTN)mGPNVBase;
  ELPrivate->GPNVLength                     = GetGPNVSize ();
  ELPrivate->EventLogService.LogAddress     = (UINTN)mGPNVBase;
  ELPrivate->EventLogService.Write          = EfiWriteEventLog;
  ELPrivate->EventLogService.Clear          = EfiClearEventLog;
  ELPrivate->EventLogService.ReadNext       = EfiReadNextEventLog;
//  ELPrivate->EventLogService.DetectDevice   = FlashFdDetectDevice;
  ELPrivate->EventLogService.OverWrite      = EfiOverWriteEventLog;

  ELPrivate->Handle = NULL;
  Status = gBS->InstallProtocolInterface (
                  &ELPrivate->Handle,
                  &gEfiEventLogProtocolGuid,
                  EFI_NATIVE_INTERFACE,
                  &(ELPrivate->EventLogService)
                  );

二、调用Event log Dxe Drivers

1)通过locateprotocol 得到驱动接口
2)调用 读取下一条记录的 遍历事件链表
3)事件链表值进行组合拼装成需要的格式,更新到Setup表格中

Time.Year   = BcdToDecimal8(EventLog->Year) + 2000;
        Time.Month  = BcdToDecimal8(EventLog->Month);
        Time.Day    = BcdToDecimal8(EventLog->Day);
        Time.Hour   = BcdToDecimal8(EventLog->Hour);
        Time.Minute = BcdToDecimal8(EventLog->Minute);
        Time.Second = BcdToDecimal8(EventLog->Second);

        ZeroMem(String, sizeof(String));
        UnicodeSPrint(String, sizeof (String), L"%04d/%02d/%02d           %02d:%02d:%02d",
                    Time.Year,Time.Month,Time.Day,Time.Hour,Time.Minute,Time.Second);
        StrRef = HiiSetString (mHiiHandle, 0, String, NULL);

        ZeroMem(String, sizeof(String));
        QueryTable (SELTypesTable, sizeof(SELTypesTable)/sizeof(TABLE_ITEM), EventLog->Type, String);
        Info = HiiSetString (mHiiHandle, 0, String, NULL);

        HiiCreateTextOpCode (StartOpCodeHandle, StrRef, STRING_TOKEN (STR_EMPTY), Info);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Eventlog Analyzer日志管理系统、日志分析工具、日志服务器的功能及作用     Eventlog Analyzer是用来分析和审计系统及事件日志的管理软件,能够对全网范围内的主机、服务器、网络设备、数据库以及各种应用服务系统等产生的日志,进行全面收集和细致分析,通过统一的控制台进行实时可视化的呈现。     通过定义日志筛选规则和策略,帮助IT管理员从海量日志数据中精确查找关键有用的事件数据,准确定位网络故障并提前识别安全威胁,从而降低系统宕机时间、提升网络性能、保障企业网络安全。 一、日志管理 保障网络安全 Windows系统日志分析 Syslog日志分析 应用程序日志分析 Windows终端服务器日志监控 Syslog服务器 通用日志解析 & 索引(ULPI)技术 事件日志监控 云设施日志监控 数据库审计 应用程序日志分析 监控和分析应用日志 IIS Web服务器日志分析 IIS FTP服务器日志分析 DHCP Windows应用日志分析 DHCP Linux应用日志分析 MS SQL数据库日志分析 Oracle数据库日志分析 Apache Web服务器日志分析 打印机服务器日志分析 IT合规性审计报表 满足合规性审计需要 合规性审计 PCI合规性报表 ISO 27001合规性报表 FISMA合规性报表 HIPAA合规性报表 SOX合规性报表 GLBA合规性报表 新法规合规性报表 自定义合规性报表 系统与用户监控日志报表 及时了解事件活动 内建报表 自定义报表 微软IIS服务器日志报表 IBM AS/400日志报表 VMware服务器日志报表 活动目录日志报表 特权用户监控报表 用户会话监控 事件日志监控 - 问答报表 历史事件趋势 搜索结果报表 安全信息管理 管理网络安全信息 无代理的采集日志方式 基于代理的采集日志方式 日志搜索 日志分析 日志归档 日志取证 日志导入 用户认证 安全管理服务提供商(MSSP) 适用于MSSP的日志管理方案 操控板与用户视图 个性化界面 安全信息和事件管理(SIEM) 全面保证网络及IT安全 实时事件关联 安全日志管理 服务器日志管理 日志管理 文件完整性监控 安全信息和事件管理(SIEM) 告警与通知 及时发现网络故障问题 实时告警 邮件、短信通知或运行程序 集成第三方工具 扩展管理 EventLog Analyzer API

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值