永发信息网

如何使用ReadEventLog获取完整日志描述

答案:2  悬赏:0  手机版
解决时间 2021-02-08 22:18
如何使用ReadEventLog获取完整日志描述
最佳答案
//************************************************************************************
// * 函数名称: StartEventLog
// *  功  能: 启动读取事件日志
// *  入口参数: eventLogSourceName 事件名
// *  返 回 值: 无
// *  备 注: 
//************************************************************************************
BOOL CSys_ReadInfo::StartEventLog()
{
// 打开事件日志
m_hSysInfo = OpenEventLog(NULL,m_eventLogSourceName);
if (NULL == m_hSysInfo)
{
return FALSE;
}

// 读取系统事件日志信息
if(!ReadSystemEventInfo()){return FALSE;}

// 关于事件日志句柄
CloseEventLog(m_hSysInfo);

return TRUE;
}

//************************************************************************************
// * 函数名称: ReadSystemEventInfo
// *  功  能: 读取系统事件查看器信息
// *  入口参数: HWND hwnd
// *  返 回 值: 无
// *  备 注: 
//************************************************************************************
BOOL CSys_ReadInfo::ReadSystemEventInfo()
{
setlocale(LC_ALL,"Chinese-simplified"); // 设置当前的场景为简体中文
ASSERT(m_hSysInfo != NULL);
::SendMessage(m_Mainhwnd,WM_DELETELIST,0,0);// 清空列表
g_SysEventInfo.clear(); // 清空链表所有元素
DWORD read_len; // 读取信息条数
DWORD next_len; // 下一条信息
char Data[BUFFER_SIZE]; // 事件查看器信息
CTime time; // 系统日期时间
int iNum = 0;
tagSystemEventLogInfo tagSysEventLogInfo; // 系统事件日志测点

try
{
while(ReadEventLog(m_hSysInfo,
EVENTLOG_FORWARDS_READ | // 向前读
EVENTLOG_SEQUENTIAL_READ, // 循序读
0,Data,sizeof(Data),&read_len,&next_len))
{
for (unsigned int i = 0; i < read_len;)
{
EVENTLOGRECORD *ptr = (EVENTLOGRECORD *)(Data + i);

// 类型状态
int iEventType = GetCateGory(ptr->EventType);

UINT uOffset = 0; // 偏移量
uOffset = sizeof(EVENTLOGRECORD);

// 类型
tagSysEventLogInfo.Sys_EventType = iEventType;
tagSysEventLogInfo.Sys_EventCategory = m_strEventCategory;

// 日期
time_t tm(ptr->TimeWritten);
time = (CTime)tm;
tagSysEventLogInfo.Sys_EventDate.Format("%.4d-%.2d-%.2d",time.GetYear(),time.GetMonth(),time.GetDay());

// 时间
tagSysEventLogInfo.Sys_EventTime.Format("%.2d:%.2d:%.2d",time.GetHour(),time.GetMinute(),time.GetSecond());

// 事件ID
tagSysEventLogInfo.Sys_EventID.Format("%u",(short)ptr->EventID);

// 事件来源
tagSysEventLogInfo.Sys_EventSource.Format("%s",(LPTSTR)(LPBYTE)ptr + uOffset);
uOffset += strlen(tagSysEventLogInfo.Sys_EventSource) + sizeof(TCHAR);

// 计算机
tagSysEventLogInfo.Sys_ComputerName.Format("%s",(LPTSTR)(LPBYTE)ptr + uOffset);
uOffset += strlen(tagSysEventLogInfo.Sys_ComputerName) + sizeof(TCHAR);

// 用户
if (ptr->UserSidLength > 0)
{
TCHAR lpszRefDomainName[MAX_PATH + 1];
TCHAR lpszUserName[MAX_PATH + 1];
SID_NAME_USE _SidNameUse = (SID_NAME_USE)(SidTypeUser - 1);
PSID pUserSID = 0;
DWORD cbName;
DWORD cbRefDomainName;
BOOL bRetVal = FALSE;
pUserSID = (SID *)GlobalAlloc(GPTR,ptr->UserSidLength);
memcpy(pUserSID,(PSID)((LPBYTE)ptr + ptr->UserSidOffset),ptr->UserSidLength);

cbName = cbRefDomainName = MAX_PATH + 1;
*lpszRefDomainName = *lpszUserName = '\0';

bRetVal = LookupAccountSid(0,pUserSID,lpszUserName,&cbName,lpszRefDomainName,
&cbRefDomainName,&_SidNameUse);
if (bRetVal)
{
tagSysEventLogInfo.Sys_ComputerUser.Format("%s",lpszUserName);
}
else
{
tagSysEventLogInfo.Sys_ComputerUser = "N/A";
}
SafeDeletePointer(pUserSID,ptr->UserSidLength);
}
else
{
tagSysEventLogInfo.Sys_ComputerUser = "N/A";
}

// 描述
UINT uSize = 0; // 文本大小
UINT uStringOffset; // 描述偏移量
uStringOffset = ptr->StringOffset;
uSize = ptr->DataOffset - ptr->StringOffset;
if (uSize > 0)
{
LPBYTE pStrings = 0; // 记录事件
TCHAR *szExpandedString = 0; // 描述文本
UINT uStepOfString = 0; // 偏移量

pStrings = (LPBYTE)GlobalAlloc(GPTR,uSize * sizeof(BYTE) + 1);
memcpy(pStrings,(TCHAR *)ptr + uStringOffset,uSize);
pStrings[uSize] = '\0';

uStepOfString = 0;
szExpandedString = (TCHAR *)GlobalAlloc(GPTR,(uSize + MAX_MSG_LENGTH) * sizeof(TCHAR) + 1);
for (int i = 0; i < ptr->NumStrings; i++)
{
if (i == 0)
{
strcpy(szExpandedString,(TCHAR *)pStrings + uStepOfString);
if (i < (UINT)ptr->NumStrings - 1)
{
strcat(szExpandedString,",");
}
}
else
{
strcat(szExpandedString,(TCHAR *)pStrings + uStepOfString);
}
uStepOfString = strlen((TCHAR *)pStrings + uStepOfString) + 1;
}
tagSysEventLogInfo.Sys_EventDesc.Format("%s",szExpandedString);

SafeDeletePointer(szExpandedString,uSize * sizeof(BYTE) + 1);
SafeDeletePointer(pStrings,(uSize + MAX_MSG_LENGTH) * sizeof(TCHAR) + 1);
}

// 数据
tagSysEventLogInfo.Sys_EventData.Format("%s",(LPBYTE)((LPBYTE)ptr + ptr->DataOffset),ptr->DataLength);
//---
// 组织结构
// 类型+日期+时间+事件ID+事件来源+计算机名+用户+描述+数据
//---
char Buffer[BUFFER_SIZE]; // 数据存储缓存
sprintf(Buffer,"%d|%s|%s|%s|%s|%s|%s|%s|%s",
tagSysEventLogInfo.Sys_EventType,
tagSysEventLogInfo.Sys_EventDate,
tagSysEventLogInfo.Sys_EventTime,
tagSysEventLogInfo.Sys_EventID,
tagSysEventLogInfo.Sys_EventSource,
tagSysEventLogInfo.Sys_ComputerName,
tagSysEventLogInfo.Sys_ComputerUser,
tagSysEventLogInfo.Sys_EventDesc,
tagSysEventLogInfo.Sys_EventData);
::SendMessage(m_Mainhwnd,WM_SYSTEMINFO,0,(LPARAM)(LPCTSTR)Buffer);
i += ptr->Length;
g_SysEventInfo.push_back(tagSysEventLogInfo);
}
}
return TRUE;
}
catch(...)
{
throw 1001;
return FALSE;
}
}
全部回答
这个请你放心,event log只是系统日志,包括你系统启动以来所发生的任何重要事件的一个log记录 禁用没有关系,但是不太建议你禁用,毕竟这个服务并不占资源,而你电脑出问题的话可以从中查找原因
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大学城健身俱乐部怎么去啊,我要去那办事
郑州爱农饲料有限公司地址在哪,我要去那里办
东港区全民健身中心地址在哪,我要去那里办事
支付宝可以赠送收款码,微信怎么不能送?
清风晓筑在哪里啊,我有事要去这个地方
我初中毕业可以读福州职业技术学院么
银行信用卡积分怎么兑换
小松450-7放旋转齿轮油位置在哪里图片
辞职后约定保密,用人单位要给补偿吗
乌托邦健身俱乐部地址在什么地方,我要处理点
宋代田况引尹洙说过:“状元及第,虽将兵数十
肚胀呕吐是怎么回事
快玩里下载的口袋妖怪怎么通信交换
乳脂粉饼,亮研粉饼,丝漾粉饼哪个可以打高光
八五九农场第二管理区工会委员会地址在哪,我
推荐资讯
地下城与勇士-点券怎么买游戏币
wrv国产是东风本田还是广汽本田
枔洛轩茶庄地址好找么,我有些事要过去
味事达味极鲜酱油味道好吗?和东古一品鲜比哪
汇源水果地址在哪,我要去那里办事
中国移动(横埠营业厅)地址在什么地方,我要处
卸妆膏和洗面奶哪个先用 先用卸妆膏还是先用
一个封闭瓶子中有600ml空气和400ml二氧化碳,
别克英朗gt摘挡后,车速突然加快
青岛大专毕业有护士证的工资大概多少每月?
郑州市南阳路239号院在哪儿,附近有什么标志?
工资卡丢了 补办了新卡没跟财务说 发工资了怎
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?