资源描述
接口设计方案
一、设计方案
由甲方调用监控模块,控制监控模块启停、设置策略等,经过甲方调用监控模块DLL接口将监控策略通知监控模块,由监控模块监控相关操作行为,并依据策略配置调用甲方提供文件内容检验模块,对相关文件进行文件内容筛查,来确定文件是否是涉密文件。同时经过甲方程序调用乙方监控模块DLL接口获取监控结果。
甲方文件内容检验模块
甲方
程序
监控
监控模块DLL
一、接口部分(监控模块DLL,乙方提供)
************************************
Function:Init
Description:初始化操作
Input:无
Output:无
Return:true:成功,false:失败
Other:
***********************************
1、bool Init();
************************************
Function:SetRule
Description:设置监控规则
Input:char* pRule:监控规则,XML格式,见附1
Output:无
Return:true:成功,false:失败
Other:
***********************************
2、bool SetRule(char* pRule);
************************************
Function:Start
Description:设置完规则,开启监控规则生效
Input:无
Output:无
Return:true:成功,false:失败
Other:
***********************************
3、bool Start();
************************************
Function:WaitData
Description:实时等候获取监控数据能够是一条能够是多条。返回监控结果见附2
Input:无
Output: int &nCount返回总条数,char**&pData返回数据。
Return:-1.异常0.成功获取数据1.结束 / 停止(其它地方调用Stop接口停止)
Other:提议乙方内部实现用信号、内核事件等处理方法。
***********************************
4、int WaitData(int &nCount, char**& pData);
甲方调用伪代码:
ThreadFunc() //实时线程
{
While(TRUE)
{
char** pData = NULL;
int nCount = 0;
int nRet = WaitData(nCount,pData); //等候一条或多条数据时返回,没有数据就等候。
switch(nRet)
{
-1.异常continue;
0.成功获取数据 pData[0]、pData[1]、……
1.结束 / 停止(其它地方调用Stop停止) Return;
}
FreeData(pData);
}
}
************************************
Function:FreeData
Description:释放数据内存接口,对应WaitData函数
Input:int nCount 要释放元素数量,char**要释放数据
Output:无
Return:无
Other:
***********************************
5、FreeData (int nCount ,char** pData);
************************************
Function:Stop
Description:停止监控,监控规则失效
Input:无
Output:无
Return:true:成功,false:失败
Other:
***********************************
6、bool Stop();
************************************
Function:UnInit
Description:程序退出
Input:无
Output:无
Return:true:成功,false:失败
Other:
***********************************
7、UnInit();
二、文件检验模块
/*********************接口说明***************************
//创建文件检验实例
void (*PCreateFileCheckerObject)(IFileChecker **pObject);
//释放文件检验实例
void (*PReleaseFileCheckerObject)(IFileChecker **pObject);
多规则多个关键字组合,则创建多个实例
----------------------- IFileChecker--------------------------
//初始化
void Init(const char *pName, const char *pKeyWords);
pName:实例名称随意。但多个实例并行时不能反复;
pKeyWords: 关键词组。格式:"机密;秘密;绝密;"
//结束调用
void UnInit();
//获取文件信息
bool GetFileInfo(const char *pFilePath, TipsFileBlock *pTFB);
pFilePath:文件路径
pTFB:返回数据结构
//释放文件信息
void FreeFileInfo(TipsFileBlock * pTFB);
pTFB:需要释放数据结构
//停止目前文件检验
void StopCheck();
*************************************************************/
//------------------------------(.h)头文件以下-----------------------------
#pragmaonce
structTipsFileBlock
{
char *pKeyWords;//关键字
char *pSecretLevel; //密级:秘密、机密、绝密中一个
char*pFileBlock; //片段
};
classIFileChecker
{
public:
virtualvoidInit(constchar *pKeyWords) = 0;
virtualboolGetFileInfo(constchar *pFilePath, TipsFileBlock *pTFB) = 0;
virtualvoidFreeFileInfo(TipsFileBlock * pTFB) = 0;
virtualvoidUnInit() = 0;
virtualvoidStopCheck() = 0;
};
typedefvoid (*PCreateFileCheckerObject)(IFileChecker **pObject);
typedefvoid (*PReleaseFileCheckerObject)(IFileChecker **pObject);
//------------------------------头文件 end-----------------------------
//示例
//--------------获取接口类-----------------
HMODULE hDll = LoadLibrary(_T("TipsFileChecker.dll"));
if (NULL ==hDll) return;
PCreateFileCheckerObjectpCreateFileChecker = (PCreateFileCheckerObject)GetProcAddress(hDll,"CreateFileCheckerObject");
PReleaseFileCheckerObjectpReleaseFileChecker = (PReleaseFileCheckerObject)GetProcAddress(hDll,"ReleaseFileCheckerObject");
if (NULL == pCreateFileChecker || NULL == pReleaseFileChecker) return;
IFileChecker* pFileChecker = NULL;
pCreateFileChecker(&pFileChecker);
//---------------初始化提供关键字------------
CStringAstrName = "FeiMi1"; //多个实例名称任意,但不一样。比如:FeiMi2、FeiMi3、…
CStringAstrKeyWords = "秘密;机密;绝密; ";
pFileChecker->Init(strName,strKeyWords);
//----------------文件命中片段提取---------
CStringAstrFilePath = "C:\\123.docx";
TipsFileBlockfb;
pFileChecker->GetFileInfo(strFilePath,&fb);
//....
pFileChecker->FreeFileInfo(&fb);
//----------------------结束释放----------------
pFileChecker->StopCheck();
pFileChecker->UnInit();
pReleaseFileChecker(&pFileChecker);
FreeLibrary(hDll);
三、附
附1:
规则XML:
<TipsTCM>
<TipsTypeType = "Rule">
<Rule>
<NetOperIsMon = "1" Type = "上传;下载;" MonFileType = "txt;doc;"MonProcess ="qq.exe;explorer.exe;"WhiteProcess = "explorer.exe;wps.exe;"IsBan ="0">
<NetContent IsMon = "1" Type = "上传;下载;" FileNameWords = "秘密;绝密;"ContentWords = "秘密;绝密;"MonFileType = "txt;doc;"MonProcess ="qq.exe;explorer.exe;"WhiteProcess = "word.exe;wps.exe;"IsBan ="0">
</Rule>
</TipsType>
</TipsTCM>
解释:
TipsType Type = "Rule"为规则xml
IsMon:是否监控 1监控 0不监控
MonPath:监控文件夹,采取分号拼接,假如为空表示全盘监控
MonFileType:监控文件类型,采取分号拼接,假如为空表示不限类型
IsBan:是否拦截 1拦截 0不拦截
FileNameWords:文件名检验关键字,假如为空表示不检验
ContentWords:文件内容检验关键字,假如为空表示不检验
WhiteProcess:进程白名单
WhitePath:监控路径白名单
MonProcess:监控进程,假如为空表示全部监控
附2:
结果XML:
NET操作行为监控举例:
<TipsTCM>
<TipsTypeType = "Result">
<TipsResultType="NetOper">
<Result FilePath = "c:\1.txt" Process = "explorer.exe" OperType ="上传"FileType = "txt "IsBan ="0"/>
</TipsResult>
</TipsType>
</TipsTCM>
<TipsTCM>
<TipsTypeType = "Result">
<TipsResultType="NetOper">
<Result FilePath = "c:\1.txt" Process = "explorer.exe" OperType ="下载"FileType = "txt "IsBan ="0"/>
</TipsResult>
</TipsType>
</TipsTCM>
Net内容监控举例:
<TipsTCM>
<TipsTypeType = "Result">
<TipsResultType ="NetContent ">
<Result FilePath = "c:\1.txt" Process = "explorer.exe" OperType ="下载"FileType = "txt "Keyword = "秘密" Content = "这是一个秘密文档"IsBan ="0"/>
</TipsResult>
</TipsType>
</TipsTCM>
展开阅读全文