⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 view_svrlog.cpp

📁 根据系统设定的日志类型,来判断用户操作的日志是否违规,形成报警
💻 CPP
字号:
// View_SvrLog.cpp : 实现文件
//

#include "stdafx.h"
#include "LogAlert.h"
#include "View_SvrLog.h"


// CView_SvrLog
CView_SvrLog* CView_SvrLog::m_pCurrent=NULL;
BOOL CView_SvrLog::m_bInited=FALSE;
DWORD CView_SvrLog::m_dwLogLimit=100;

CMap<DWORD,DWORD&,DATACLTLT,DATACLTLT&> CView_SvrLog::m_mapClt;
CMap<DWORD,DWORD&,DATAKEYLT,DATAKEYLT&> CView_SvrLog::m_mapKey;
CMap<DWORD,DWORD&,DATADEVLT,DATADEVLT&> CView_SvrLog::m_mapDev;

IMPLEMENT_DYNCREATE(CView_SvrLog, CListView)

CView_SvrLog::CView_SvrLog()
{
	m_pCurrent=this;
}

CView_SvrLog::~CView_SvrLog()
{
}

BEGIN_MESSAGE_MAP(CView_SvrLog, CListView)
	ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
END_MESSAGE_MAP()


// CView_SvrLog 诊断

#ifdef _DEBUG
void CView_SvrLog::AssertValid() const
{
	CListView::AssertValid();
}

void CView_SvrLog::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}
#endif //_DEBUG


BOOL CView_SvrLog::Log_Add_Real(DWORD logType,DWORD dwTime,DWORD dwIp,DWORD wPort,CString strUser,CString strComp,DWORD dwAction,DWORD dwResult,DWORD dwErrorType,CString strDesc)
{
	if (NULL==m_pCurrent) return FALSE;
	if (!m_bInited)
	{
		m_bInited=TRUE;
		DWORD dwTemp=m_pCurrent->GetListCtrl().GetExtendedStyle();
		dwTemp|=LVS_EX_FULLROWSELECT;
		m_pCurrent->GetListCtrl().SetExtendedStyle(dwTemp);
		dwTemp=GetWindowLong(m_pCurrent->GetListCtrl().GetSafeHwnd(),GWL_STYLE);
		dwTemp|=LVS_REPORT;
		SetWindowLong(m_pCurrent->GetListCtrl().GetSafeHwnd(),GWL_STYLE,dwTemp);
		m_pCurrent->GetListCtrl().InsertColumn(0,"RecTime",LVCFMT_LEFT,150);
		m_pCurrent->GetListCtrl().InsertColumn(1,"IP",LVCFMT_LEFT,100);
		m_pCurrent->GetListCtrl().InsertColumn(2,"User(Target)",LVCFMT_LEFT,100);
		m_pCurrent->GetListCtrl().InsertColumn(3,"Computer",LVCFMT_LEFT,100);
		m_pCurrent->GetListCtrl().InsertColumn(4,"Action",LVCFMT_LEFT,300);
		m_pCurrent->GetListCtrl().InsertColumn(5,"Result",LVCFMT_LEFT,100);
		m_pCurrent->GetListCtrl().InsertColumn(6,"Desc",LVCFMT_LEFT,800);
	}
	time_t AddTime=dwTime;
	struct tm *newtime=localtime(&AddTime);
	char NodeId[1000];
	//第一个因素,记录时间
	if (NULL!=newtime)
	{
		sprintf(NodeId,"%04d-%02d-%02d %02d:%02d:%02d",
			newtime->tm_year+1900,newtime->tm_mon+1,newtime->tm_mday,
			newtime->tm_hour,newtime->tm_min,newtime->tm_sec);
	}
	else
	{
		strcpy(NodeId,g_key.Key_GetCString("STR_TREE_KEYGRP_RULAPP_INFO_TIME_UNKNOWN"));
	}
	m_pCurrent->GetListCtrl().InsertItem(0,NodeId);
	//根据日志等级,进行颜色反应
	m_pCurrent->GetListCtrl().SetItemData(0,dwErrorType);
	//第二个因素,操作地址
	sprintf(NodeId,"%03d.%03d.%03d.%03d",
		(dwIp&0xFF000000)>>24,
		(dwIp&0xFF0000)>>16,
		(dwIp&0xFF00)>>8,
		(dwIp&0xFF)
		);
	m_pCurrent->GetListCtrl().SetItemText(0,1,NodeId);
	//第三个因素,用户(操作对象)
	m_pCurrent->GetListCtrl().SetItemText(0,2,strUser);
	//第四个因素,计算机(-)
	m_pCurrent->GetListCtrl().SetItemText(0,3,strComp);
	//第五个因素,操作内容
	if (2==logType)
	{
		g_key.Key_Cmd_Desc(dwAction,NodeId);
	}
	else
	{
		if (TIS_PORT_CLT_SELF!=wPort)
		{
			g_key.Key_Cmd_Desc(dwAction,NodeId);
		}
		else
		{
			g_key.Key_Log_Desc(dwAction,NodeId);
		}
	}
	m_pCurrent->GetListCtrl().SetItemText(0,4,NodeId);
	//第六个因素,操作结果
	if ((dwResult!=0)||(TIS_PORT_CLT_SELF!=wPort))
	{
		g_key.Key_Error_Desc(dwResult,NodeId);
	}
	else
	{
		strcpy(NodeId,"");
	}
	m_pCurrent->GetListCtrl().SetItemText(0,5,NodeId);
	//第七个因素,其他信息
	m_pCurrent->GetListCtrl().SetItemText(0,6,strDesc);

	m_pCurrent->GetListCtrl().DeleteItem(m_dwLogLimit);
	return TRUE;
}

BOOL CView_SvrLog::Info_Add(DATACLTLT& dcl)
{
	m_mapClt.SetAt(dcl.dwNodeId,dcl);
	return TRUE;
}

BOOL CView_SvrLog::Info_Add(DATADEVLT& ddl)
{
	m_mapDev.SetAt(ddl.dwNodeId,ddl);
	return TRUE;
}

BOOL CView_SvrLog::Info_Add(DATAKEYLT& dkl)
{
	m_mapKey.SetAt(dkl.dwNodeId,dkl);
	return TRUE;
}

BOOL CView_SvrLog::Log_Add(CLTLOGINFO& cli)
{
	char cTempString[1000];
	char NodeId[1000];
	strcpy(NodeId,"");

	if (strlen(cli.cString)>0)
	{
		strcpy(NodeId,g_key.Key_GetCString(cli.cString));
	}
	if (strcmp(NodeId,"?")==0) strcpy(NodeId,cli.cString);
	cli.GetDetail(NodeId,cTempString);
	if (cli.dwStatusKeyWord>0)
	{//有状态
		g_key.Key_Log_Desc(cli.dwStatusKeyWord,NodeId);
		strcat(NodeId,"\r\n");
		strcat(NodeId,cTempString);
	}
	else
	{
		strcpy(NodeId,cTempString);
	}
	Log_Add_Real(1,cli.dwTimeCLT,cli.dwIp,TIS_PORT_CLT_SELF,KEY_GetDesc(cli.cSID),CLT_GetDesc(cli.cCLT_GUID),cli.dwTypeID1,cli.dwTypeID2,cli.dwErrorType,NodeId);
	return TRUE;
}

BOOL CView_SvrLog::Log_Add(DEVLOGINFO& dli)
{
	char cTempString[1000];
	char NodeId[1000];
	strcpy(NodeId,"");
    strcpy(NodeId,dli.cString);

	dli.GetDetail(NodeId,cTempString);
	if (dli.dwStatusKeyWord>0)
	{//有状态
		g_key.Key_Log_Desc(dli.dwStatusKeyWord,NodeId);
		strcat(NodeId,"\r\n");
		strcat(NodeId,cTempString);
	}
	else
	{
		strcpy(NodeId,cTempString);
	}
	Log_Add_Real(2,dli.dwTimeCLT,dli.dwIp,TIS_PORT_CLT_SELF,DEV_GetDesc(dli.cSID),CLT_GetDesc(dli.cCLT_GUID),dli.dwTypeID1,dli.dwTypeID2,dli.dwErrorType,NodeId);
	return TRUE;
}

BOOL CView_SvrLog::Log_Add(LOGINFO& li)
{//得到命令
	char NodeId[1000];
	if (0==li.wPort)
	{
		strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_SVR"));
	}
	else if (TIS_PORT_SVR_F_MMC==li.wPort)
	{
		strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_MMC"));
	}
	else if (TIS_PORT_HOTBACKUP==li.wPort)
	{
		strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_HB"));
	}
	else if (TIS_PORT_SVR_F_MMC2==li.wPort)
	{
		strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_MMC2"));
	}
	else if (TIS_PORT_CLT_SELF==li.wPort)
	{
		strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_CLT_SELF"));
	}
	else
	{
		strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_CLT"));
	}
	Log_Add_Real(0,li.dwTime,li.dwIp,li.wPort,NodeId,"",li.wCmd,li.dwRet,(li.dwRet==E_KEYOPT_SUCCESS)?TIS_CLT_LOG_ERROR_TYPE_NORMAL:TIS_CLT_LOG_ERROR_TYPE_ERROR,li.cInfo);
	return TRUE;
}

CString CView_SvrLog::CLT_GetDesc(char* cGUID)
{
	CString Re=cGUID;
	DWORD dwID;
	DATACLTLT dcl;
	BOOL bFound=FALSE;
	POSITION pos=m_mapClt.GetStartPosition();
	while (pos != NULL)
	{
		m_mapClt.GetNextAssoc(pos,dwID,dcl);
		if (strcmp(dcl.cGUID,cGUID)==0)
		{
			bFound=TRUE;
			Re.Format("%s (%08X)",dcl.cName,dcl.dwNodeId);
			break;
		}
	}
	return Re;
}

CString CView_SvrLog::KEY_GetDesc(char* cSID)
{
	CString Re=cSID;
	DWORD dwID;
	DATAKEYLT dkl;
	BOOL bFound=FALSE;
	POSITION pos=m_mapKey.GetStartPosition();
	while (pos != NULL)
	{
		m_mapKey.GetNextAssoc(pos,dwID,dkl);
		if (strcmp(dkl.SID,cSID)==0)
		{
			bFound=TRUE;
			Re.Format("%s (%08X)",dkl.Name,dkl.dwNodeId);
			break;
		}
	}
	return Re;
}

CString CView_SvrLog::DEV_GetDesc(char* cSID)
{
	CString Re=cSID;
	DWORD dwID;
	DATADEVLT ddl;
	BOOL bFound=FALSE;
	POSITION pos=m_mapDev.GetStartPosition();
	while (pos != NULL)
	{
		m_mapDev.GetNextAssoc(pos,dwID,ddl);
		if (strcmp(ddl.Org.devinfo.cHID,cSID)==0)
		{
			bFound=TRUE;
			Re.Format("DEV: %s (%08X)",ddl.Org.cName,ddl.dwNodeId);
			break;
		}
	}
	return Re;
}

// CView_RunLog 消息处理程序
void  CView_SvrLog::OnCustomDraw(NMHDR*  pNMHDR,  LRESULT*  pResult)    
{  
	NMLVCUSTOMDRAW*  pLVCD  =  reinterpret_cast<NMLVCUSTOMDRAW*>(  pNMHDR  );  
	*pResult  =  0;  

	if  (  CDDS_PREPAINT  ==  pLVCD->nmcd.dwDrawStage  )  
	{  
		*pResult  =  CDRF_NOTIFYITEMDRAW;  
	}  
	else  if  (  CDDS_ITEMPREPAINT  ==  pLVCD->nmcd.dwDrawStage  )  
	{  
		*pResult  =  CDRF_NOTIFYSUBITEMDRAW;  
	}  
	else  if  (  (CDDS_ITEMPREPAINT    |  CDDS_SUBITEM)  ==  pLVCD->nmcd.dwDrawStage  )  
	{  
		int  nItem  =  static_cast<int>  (pLVCD->nmcd.dwItemSpec);  
		int  nSubItem  =  pLVCD->iSubItem;  

		//CListCtrl*  pList=(CListCtrl*)CWnd::FromHandle(m_hWnd);  
		CString  strText=GetListCtrl().GetItemText(nItem,1);//注意此句是修改的,上面封住的是在CMyListCtrl中的,仅此而已!!!!!!!!!!!!!!  
		DWORD dwTemp=GetListCtrl().GetItemData(nItem);
		if (0==dwTemp)
		{//普通日志
		}
		else if(1==dwTemp)
		{
			pLVCD->clrText=RGB(0,0,255);
		}
		else
		{
			pLVCD->clrText=RGB(255,0,0);
		}

		*pResult  =  CDRF_DODEFAULT;  
	}  
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -