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

📄 xfile.cpp

📁 这是一本学习 window编程的很好的参考教材
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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 + -