📄 xfile.cpp
字号:
);
mAclHeader.ulCustomIPCount += AddCount;
}
LeaveCriticalSection(&gCriticalSectionFile);
ODS2(_T("XFILE: Success Add CustomIP, "),
DIPToSIP(&mpAclCustomIP[mAclHeader.ulCustomIPCount - 1].ulStartIP));
return XERR_SUCCESS;
}
int CAclFile::DelAclIP(XACL_IP *pAclIP, DWORD* pCount, DWORD iIndex)
{
if(pAclIP == NULL || iIndex >= *pCount)
return XERR_INVALID_PARAMETER;
EnterCriticalSection(&gCriticalSectionFile);
{
memcpy(pAclIP + iIndex, pAclIP + iIndex + 1, (*pCount - iIndex) * ACL_IP_LENTH);
*pCount = *pCount - 1 ;
}
LeaveCriticalSection(&gCriticalSectionFile);
ODS(_T("XFILE: Success Del IP aria. "));
return XERR_SUCCESS;
}
int CAclFile::DelAcl(XACL *pAcl, DWORD* pCount, DWORD iIndex)
{
if(pAcl == NULL || iIndex >= *pCount)
return XERR_INVALID_PARAMETER;
EnterCriticalSection(&gCriticalSectionFile);
{
memcpy(pAcl + iIndex, pAcl + iIndex + 1, (*pCount - iIndex) * ACL_ACL_LENTH);
*pCount = *pCount - 1 ;
}
LeaveCriticalSection(&gCriticalSectionFile);
ODS(_T("XFILE: Success Del ACL. "));
return XERR_SUCCESS;
}
//============================================================================================
//Export function
int CAclFile::ReadAcl(BOOL IsDLL, HINSTANCE instance) //main function
{
int iRet = XERR_SUCCESS;
if(IsDLL)
mAppPath = CAclFile::GetAppPath(IsDLL, instance);
else
mAppPath = CAclFile::GetAppPath();
if(mAclFile.m_hFile == NULL && (iRet = OpenAcl()) != XERR_SUCCESS)
return iRet;
TRY
{
FreeMemory();
mAclFile.SeekToBegin();
mAclFile.Read(&mAclHeader,ACL_HEADER_LENTH); //read the header
if(_tcscmp(mAclHeader.sSignature , ACL_HEADER_SIGNATURE) != 0)
{
ODS(_T("XFILE: Invalid signatrue, It's not the XFILTER ACL file."));
CloseAcl();
return XERR_FILE_INVALID_SIGNATURE;
}
mAclFile.Read(&mAclTime,ACL_TIME_TOTAL_LENTH); //read the time aria
mAclFile.Read(&mAclIntranetIP,ACL_IP_LENTH); //read the intranet ip aria
if(mAclHeader.ulDistrustIPCount > 0) //read the distrust ip aria
{
mpAclDistrustIP = new XACL_IP[mAclHeader.ulDistrustIPCount];
mAclFile.ReadHuge(mpAclDistrustIP,ACL_IP_LENTH * mAclHeader.ulDistrustIPCount);
}
if(mAclHeader.ulTrustIPCount > 0) //read the trust ip aria
{
mpAclTrustIP = new XACL_IP[mAclHeader.ulTrustIPCount];
mAclFile.ReadHuge(mpAclTrustIP,ACL_IP_LENTH * mAclHeader.ulTrustIPCount);
}
if(mAclHeader.ulCustomIPCount > 0) //read the custom ip aria
{
mpAclCustomIP = new XACL_IP[mAclHeader.ulCustomIPCount];
mAclFile.ReadHuge(mpAclCustomIP,ACL_IP_LENTH * mAclHeader.ulCustomIPCount);
}
if(mAclHeader.ulAclCount > 0) //read the ACL
{
mpAcl = new XACL[mAclHeader.ulAclCount];
mAclFile.ReadHuge(mpAcl,ACL_ACL_LENTH * mAclHeader.ulAclCount);
}
CloseAcl();
ODS(_T("XFILE: Read xacl.cfg success."));
}
CATCH( CFileException, e )
{
CloseAcl();
ODS(_T("XFILE: Read xacl.cfg error."));
return XERR_FILE_READ_ERROR;
}
END_CATCH
return iRet;
}
int CAclFile::SaveAcl()
{
int iRet;
if((iRet = WriteAcl(mAppPath + ACL_TEMP_FILE_NAME)) != XERR_SUCCESS)
return iRet;
TRY
{
CFile::Remove(mAppPath + ACL_FILE_NAME);
CFile::Rename(mAppPath + ACL_TEMP_FILE_NAME,mAppPath + ACL_FILE_NAME);
ODS(_T("XFILE: Success remove xacl.cfg and rename xacl.tmp to xacl.cfg"));
}
CATCH( CFileException, e )
{
ODS(_T("XFILE: Save error."));
return XERR_FILE_SAVE_ERROR;
}
END_CATCH
return XERR_SUCCESS;
}
void CAclFile::CloseAcl()
{
if(mAclFile.m_hFile != NULL)
{
mAclFile.Close();
mAclFile.m_hFile = NULL;
}
ODS(_T("XFILE: Success close the acl file."));
}
int CAclFile::AddAcl(void *pAddAcl, int AddAclCount, int AclType)
{
switch(AclType)
{
case ACL_TYPE_ACL:
return AddAclAcl((XACL*)pAddAcl,AddAclCount);
case ACL_TYPE_DISTRUST_IP:
return AddDistrustIP((XACL_IP*)pAddAcl,AddAclCount);
case ACL_TYPE_TRUST_IP:
return AddTrustIP((XACL_IP*)pAddAcl,AddAclCount);
case ACL_TYPE_CUSTOM_IP:
return AddCustomIP((XACL_IP*)pAddAcl,AddAclCount);
default:
return XERR_INVALID_PARAMETER;
}
return XERR_SUCCESS;
}
int CAclFile::DelAcl(int iIndex, int AclType)
{
switch(AclType)
{
case ACL_TYPE_ACL:
return DelAcl(mpAcl, &mAclHeader.ulAclCount, iIndex);
case ACL_TYPE_DISTRUST_IP:
return DelAclIP(mpAclDistrustIP, &mAclHeader.ulDistrustIPCount, iIndex);
case ACL_TYPE_TRUST_IP:
return DelAclIP(mpAclTrustIP, &mAclHeader.ulTrustIPCount, iIndex);
case ACL_TYPE_CUSTOM_IP:
return DelAclIP(mpAclCustomIP, &mAclHeader.ulCustomIPCount, iIndex);
default:
return XERR_INVALID_PARAMETER;
}
return XERR_SUCCESS;
}
int CAclFile::FreeMemory()
{
if(mpAcl)
{
delete[](mpAcl);
mpAcl = NULL;
}
if(mpAclDistrustIP)
{
delete[](mpAclDistrustIP);
mpAclDistrustIP = NULL;
}
if(mpAclTrustIP)
{
delete[](mpAclTrustIP);
mpAclTrustIP = NULL;
}
if(mpAclCustomIP)
{
delete[](mpAclCustomIP);
mpAclCustomIP = NULL;
}
ODS(_T("XFILE: Success delete[] the ACL and IP aria memory."));
return XERR_SUCCESS;
}
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -