📄 xfile.cpp
字号:
switch(AclType)
{
case ACL_TYPE_ACL:
return DelRecord((PXACL_RECORD*)&m_pAclHeader->pAcl, dwId, &m_pAclHeader->ulAclCount);
case ACL_TYPE_DISTRUST_IP:
return DelRecord((PXACL_RECORD*)&m_pAclHeader->pDistrustIp, dwId, &m_pAclHeader->ulDistrustIPCount);
case ACL_TYPE_TRUST_IP:
return DelRecord((PXACL_RECORD*)&m_pAclHeader->pTrustIp, dwId, &m_pAclHeader->ulTrustIPCount);
case ACL_TYPE_CUSTOM_IP:
return DelRecord((PXACL_RECORD*)&m_pAclHeader->pCustomIp, dwId, &m_pAclHeader->ulCustomIPCount);
case ACL_TYPE_INTRANET_IP:
return DelRecord((PXACL_RECORD*)&m_pAclHeader->pIntranetIp, dwId, &m_pAclHeader->ulIntranetIPCount);
case ACL_TYPE_WEB:
return DelRecord((PXACL_RECORD*)&m_pAclHeader->pWeb, dwId, &m_pAclHeader->dwWebCount);
case ACL_TYPE_NNB:
return DelRecord((PXACL_RECORD*)&m_pAclHeader->pNnb, dwId, &m_pAclHeader->dwNnbCount);
case ACL_TYPE_ICMP:
return DelRecord((PXACL_RECORD*)&m_pAclHeader->pIcmp, dwId, &m_pAclHeader->dwIcmpCount);
case ACL_TYPE_TIME:
return DelRecord((PXACL_RECORD*)&m_pAclHeader->pTime, dwId, &m_pAclHeader->ulTimeCount);
default:
return XERR_FILE_INVALID_PARAMETER;
}
return XERR_SUCCESS;
}
//
// 查找控管规则
//
PVOID CAclFile::FindAcl(DWORD dwId, int AclType)
{
switch(AclType)
{
case ACL_TYPE_ACL:
return FindRecord((PXACL_RECORD)m_pAclHeader->pAcl, dwId);
case ACL_TYPE_DISTRUST_IP:
return FindRecord((PXACL_RECORD)m_pAclHeader->pDistrustIp, dwId);
case ACL_TYPE_TRUST_IP:
return FindRecord((PXACL_RECORD)m_pAclHeader->pTrustIp, dwId);
case ACL_TYPE_CUSTOM_IP:
return FindRecord((PXACL_RECORD)m_pAclHeader->pCustomIp, dwId);
case ACL_TYPE_INTRANET_IP:
return FindRecord((PXACL_RECORD)m_pAclHeader->pIntranetIp, dwId);
case ACL_TYPE_WEB:
return FindRecord((PXACL_RECORD)m_pAclHeader->pWeb, dwId);
case ACL_TYPE_NNB:
return FindRecord((PXACL_RECORD)m_pAclHeader->pNnb, dwId);
case ACL_TYPE_ICMP:
return FindRecord((PXACL_RECORD)m_pAclHeader->pIcmp, dwId);
case ACL_TYPE_TIME:
return FindRecord((PXACL_RECORD)m_pAclHeader->pTime, dwId);
case ACL_TYPE_ALL_IP:
return (PVOID)m_pAclHeader->pAllIp;
default:
return NULL;
}
}
//
// 得到错误字符串
//
CString CAclFile::GetErrorString(int iErrorCode)
{
switch(iErrorCode)
{
case XERR_SUCCESS:
return ERROR_STRING_SUCCESS;
case XERR_FILE_NOT_FOUND:
return ERROR_STRING_FILE_NOT_FOUND;
case XERR_FILE_ALREDAY_EXISTS:
return ERROR_STRING_FILE_ALREDAY_EXISTS;
case XERR_FILE_LOCKED:
return ERROR_STRING_FILE_LOCKED;
case XERR_FILE_CREATE_FAILURE:
return ERROR_STRING_FILE_CREATE_FAILURE;
case XERR_FILE_CAN_NOT_OPEN:
return ERROR_STRING_FILE_CAN_NOT_OPEN;
case XERR_FILE_INVALID_SIGNATURE:
return ERROR_STRING_FILE_INVALID_SIGNATURE;
case XERR_FILE_READ_ERROR:
return ERROR_STRING_FILE_READ_ERROR;
case XERR_FILE_SAVE_ERROR:
return ERROR_STRING_FILE_SAVE_ERROR;
case XERR_FILE_ADD_ERROR:
return ERROR_STRING_FILE_ADD_ERROR;
case XERR_FILE_GET_STATUS_ERROR:
return ERROR_STRING_FILE_GET_STATUS_ERROR;
case XERR_FILE_READ_ONLY:
return ERROR_STRING_FILE_READ_ONLY;
case XERR_FILE_WRITER_HEADER_ERROR:
return ERROR_STRING_FILE_WRITER_HEADER_ERROR;
case XERR_FILE_RECORD_CAN_NOT_FIND:
return ERROR_STRING_FILE_RECORD_CAN_NOT_FIND;
case XERR_FILE_INVALID_PARAMETER:
return ERROR_STRING_FILE_INVALID_PARAMETER;
case XERR_FILE_INVALID_VERSION:
return ERROR_STRING_FILE_INVALID_VERSION;
default:
return ERROR_STRING_NOCODE;
}
}
//
// 将数值IP转化为字符串IP
//
CString CAclFile::DIPToSIP(DWORD* pIP)
{
if(pIP == NULL)
return _T("");
CString s;
BYTE *b = (BYTE*)pIP;
s.Format(_T("%d.%d.%d.%d"),b[3],b[2],b[1],b[0]);
return s;
}
/*---------------------------------------------------------------------------------------------
index from 0 start, for example:
index: 0 1 2 3 4 5 6 7
Binary value: 0 0 0 0 0 0 0 0
*/
int CAclFile::GetBit(BYTE bit, int index, int count)
{
bit <<= index;
bit >>= (8 - count);
return bit;
}
//
// 设置字节中的一位
//
int CAclFile::SetBit(BYTE* bit, int index, BOOL isTrue)
{
BYTE bOr = 0xFF,bAnd = 0x00;
bOr <<= index;
bOr >>= 7;
bOr <<= (7 - index);
bAnd = ~bOr;
if(isTrue)
*bit = *bit | bOr;
else
*bit = *bit & bAnd;
return 0;
}
//============================================================================================
//static function
//
// 得到应用程序路径
//
CString CAclFile::GetAppPath(BOOL IsDLL, HINSTANCE instance, BOOL IsFullPathName)
{
TCHAR sFilename[_MAX_PATH];
TCHAR sDrive[_MAX_DRIVE];
TCHAR sDir[_MAX_DIR];
TCHAR sFname[_MAX_FNAME];
TCHAR sExt[_MAX_EXT];
if(IsDLL)
GetModuleFileName(instance, sFilename, _MAX_PATH);
else
GetModuleFileName(AfxGetInstanceHandle(), sFilename, _MAX_PATH);
if(IsFullPathName)
return sFilename;
_tsplitpath(sFilename, sDrive, sDir, sFname, sExt);
CString rVal(CString(sDrive) + CString(sDir));
int nLen = rVal.GetLength();
if (rVal.GetAt(nLen-1) != _T('\\'))
rVal += _T("\\");
return rVal;
}
//
// 从完整路径中分离出路径
//
CString CAclFile::GetPath(TCHAR *sFilename)
{
TCHAR sDrive[_MAX_DRIVE];
TCHAR sDir[_MAX_DIR];
TCHAR sFname[_MAX_FNAME];
TCHAR sExt[_MAX_EXT];
_tsplitpath(sFilename, sDrive, sDir, sFname, sExt);
CString rVal(CString(sDrive) + CString(sDir));
int nLen = rVal.GetLength();
if (rVal.GetAt(nLen-1) != _T('\\'))
rVal += _T("\\");
return rVal;
}
//
// 从完整路径中分离出文件名
//
CString CAclFile::GetName(TCHAR *sFilename)
{
TCHAR sDrive[_MAX_DRIVE];
TCHAR sDir[_MAX_DIR];
TCHAR sFname[_MAX_FNAME];
TCHAR sExt[_MAX_EXT];
_tsplitpath(sFilename, sDrive, sDir, sFname, sExt);
CString rVal;
rVal.Format(_T("%s%s"), sFname, sExt);
return rVal;
}
//==================================================================================
// 控管规则操作的历史记录类,保存在界面上对控管规则所做的添加、修改、删除动作,
// 当使用应用按钮时,再真正更新内存并保存到文件。
//
CAclHistory::CAclHistory(int nAclType, CAclFile *pAclFile)
{
m_nAclType = nAclType;
m_pAclFile = pAclFile;
m_nAclLenth = GetAclLenth(nAclType);
}
CAclHistory::~CAclHistory()
{
RemoveArray();
}
void CAclHistory::RemoveArray()
{
m_arHistory.RemoveAll();
m_arForward.RemoveAll();
}
char* CAclHistory::FindAcl(DWORD dwId)
{
int nCount = GetHistoryCount();
int nPoint = sizeof(PVOID);
for(int i = nCount - 1; i >= 0; i--)
{
if((m_arHistory[i].bOptType == OPT_TYPE_ADD || m_arHistory[i].bOptType == OPT_TYPE_EDIT)
&& *(DWORD*)(m_arHistory[i].pRecord + nPoint) == dwId)
return (char*)m_arHistory[i].pRecord;
}
return NULL;
}
int CAclHistory::AddHistory(
BYTE bOptType,
BYTE bButtonStatus,
char *pRecord,
char *pRecordOld,
BYTE bSet,
BYTE bQueryEx
)
{
if((bButtonStatus & ACL_BUTTON_APPLY_MASK) != ACL_BUTTON_APPLY_MASK)
{
RemoveArray();
return XERR_SUCCESS;
}
if(m_nAclLenth > MAX_RECORD_LENTH_BUFFER) return ERROR_NO_ENOUGH_BUFFER;
m_AclHistory.bOptType = bOptType;
m_AclHistory.bButtonStatus = bButtonStatus;
if(bOptType == OPT_TYPE_EDIT && pRecordOld != NULL)
{
memcpy(m_AclHistory.pRecordOld, pRecordOld, m_nAclLenth);
}
switch(bOptType)
{
case OPT_TYPE_ADD:
case OPT_TYPE_EDIT:
case OPT_TYPE_DELETE:
if(pRecord == NULL) return ERROR_INVALID_RECORD;
memcpy(m_AclHistory.pRecord, pRecord, m_nAclLenth);
break;
case OPT_TYPE_SET:
m_AclHistory.bSet = bSet;
break;
case OPT_TYPE_QUERY_EX:
m_AclHistory.bQueryEx = bQueryEx;
break;
default:
return ERROR_INVALID_OPTION;
}
m_arHistory.Add(m_AclHistory);
m_arForward.RemoveAll();
return XERR_SUCCESS;
}
int CAclHistory::Apply()
{
if(m_pAclFile == NULL) return ERROR_NO_ACL_FILE;
int nCount = GetHistoryCount();
for(int i = 0; i < nCount; i++)
{
switch(m_arHistory[i].bOptType)
{
case OPT_TYPE_ADD:
m_pAclFile->AddAcl((PVOID)m_arHistory[i].pRecord, m_nAclType);
break;
case OPT_TYPE_EDIT:
m_pAclFile->UpdateAcl((PVOID)m_arHistory[i].pRecord, m_nAclType);
break;
case OPT_TYPE_DELETE:
m_pAclFile->DelAcl(*((DWORD*)m_arHistory[i].pRecord + 1), m_nAclType);
break;
case OPT_TYPE_SET:
SetSet(m_nAclType, m_arHistory[i].bOptType, m_arHistory[i].bSet);
break;
case OPT_TYPE_QUERY_EX:
SetSet(m_nAclType, m_arHistory[i].bOptType, m_arHistory[i].bQueryEx);
break;
default:
return ERROR_INVALID_OPTION;
}
}
RemoveArray();
return m_pAclFile->SaveAcl();
}
int CAclHistory::Cancel()
{
RemoveArray();
return XERR_SUCCESS;
}
int CAclHistory::Back()
{
return XERR_SUCCESS;
}
int CAclHistory::Forward()
{
return XERR_SUCCESS;
}
void CAclHistory::SetSet(int nAclType, BYTE bOptType, BYTE bSet)
{
switch(nAclType)
{
case ACL_TYPE_TIME:
case ACL_TYPE_ALL_IP:
case ACL_TYPE_INTRANET_IP:
case ACL_TYPE_DISTRUST_IP:
case ACL_TYPE_TRUST_IP:
case ACL_TYPE_CUSTOM_IP:
return;
case ACL_TYPE_ACL:
if(OPT_TYPE_SET == bOptType)
m_pAclFile->GetHeader()->bAppSet = bSet;
else if(OPT_TYPE_QUERY_EX == bOptType)
m_pAclFile->GetHeader()->bAppQueryEx = bSet;
else
return;
return;
case ACL_TYPE_WEB:
if(OPT_TYPE_SET == bOptType)
m_pAclFile->GetHeader()->bWebSet = bSet;
else if(OPT_TYPE_QUERY_EX == bOptType)
m_pAclFile->GetHeader()->bWebQueryEx = bSet;
else
return;
return;
case ACL_TYPE_NNB:
if(OPT_TYPE_SET == bOptType)
m_pAclFile->GetHeader()->bNnbSet = bSet;
else if(OPT_TYPE_QUERY_EX == bOptType)
m_pAclFile->GetHeader()->bNnbQueryEx = bSet;
else
return;
return;
case ACL_TYPE_ICMP:
if(OPT_TYPE_SET == bOptType)
m_pAclFile->GetHeader()->bIcmpSet = bSet;
else if(OPT_TYPE_QUERY_EX == bOptType)
m_pAclFile->GetHeader()->bIcmpQueryEx = bSet;
else
return;
return;
default:
return;
}
}
int CAclHistory::GetAclLenth(int nAclType)
{
switch(nAclType)
{
case ACL_TYPE_TIME:
return ACL_TIME_LENTH;
case ACL_TYPE_ALL_IP:
case ACL_TYPE_INTRANET_IP:
case ACL_TYPE_DISTRUST_IP:
case ACL_TYPE_TRUST_IP:
case ACL_TYPE_CUSTOM_IP:
return ACL_IP_LENTH;
case ACL_TYPE_ACL:
return ACL_ACL_LENTH;
case ACL_TYPE_WEB:
return ACL_WEB_LENTH;
case ACL_TYPE_NNB:
return ACL_NNB_LENTH;
case ACL_TYPE_ICMP:
return ACL_ICMP_LENTH;
default:
return 0;
}
}
#pragma comment( exestr, "IEAssistant")
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -