## 头文件
```cpp
#include "CSafeAntivirusEngine/CSafeAntivirusEngine.h"
```

## 实现原理
其实现原理为检测新启动的进程，然后对其进行多维度的行为判定，每种行为有不同的危险等级，将最终的等级叠加，即为最终的危险等级，您可以根据危险等级对进程进行指定的操作

## 基本数据结构、函数体
### 数据类型
* `CSafeRiskLevel`类型
    * 即为short短整形，用于表示进程危险等级

### 结构体
* `CSafeProcess`结构体

    * 用于表示一个进程的基础数据和风险数据
    
    * 子函数：

        * 子函数`RiskLevel()`：
        无参数，返回一个`CSafeRiskLevel`短整形，表示该进程的风险等级，返回值大于等于0时，代表有新的进程启动(即该变量不为空)

        * 子函数`Path()`：
        无参数，返回一个`std::string`字符串，表示该进程的全路径

        * 子函数`PID()`：
        无参数，返回一个`DWORD`整形，表示该进程的PID码

### 函数
* `CSafeAntivirusEngine()`函数:
    * 主要查杀函数，调用的时候会检测该次调用和上次调用该函数之间的一段时间是否有新的进程启动，如果有，则会对进程进行查杀并返回目标进程的`CSafeProcess`类型的进程信息，如果是第一次调用则会初始化进程列表，返回与无进程启动时相同的值(请注意，该函数为非闭锁函数，如果没有进程启动，函数会返回一个无进程启动的无效值)
    * 参数：无参数
    * 返回值：返回一个`CSafeProcess`结构体，表示进程信息
    * 用法：
        ```cpp
        CSafeProcess pi = CSafeAntivirusEngine();//pi中将会存储新启动的进程的信息，如果没有进程启动会返回无进程启动的无效值
        ```
    * 示例：
        ```cpp
        #include <iostream>//std::cout
        #include "CSafeAntivirusEngine/CSafeAntivirusEngine.h"//头文件定义

        int main() {
            while(1) {
                CSafeProcess ProcessInformation = CSafeAntivirusEngine();
                if(ProcessInformation.RiskLevel() >= 0) {//风险等级大于等于0说明有新的进程启动，风险等级为-1时代表无进程启动，为-2代表还未经过赋值或检测失败，因此只在有进程启动并且检测到的时候输出进程信息(未经过赋值时输出信息不会导致崩溃，您可以放心调用)
                    std::cout << ProcessInformation.Path() << " " << ProcessInformation.PID() << " " << ProcessInformation.RiskLevel() << std::endl;//当有新的进程启动时，输出该进程的信息
                }
            }
        }
        ```

* `CSafeAntivirusEngine_Choke()`函数:
    * 主要查杀函数，调用的时候会检测该次调用和上次调用该函数之间的一段时间是否有新的进程启动，如果有，则会对进程进行查杀并返回目标进程的`CSafeProcess`类型的进程信息，如果是第一次调用则会初始化进程列表，返回与无进程启动时相同的值(请注意，该进程为闭锁函数，将该函数安插在UI界面的线程中可能因为无进程启动引起的线程阻塞导致未响应)，其与CSafeAntivirusEngine函数的主要区别就是它是闭锁函数
    * 参数：无参数
    * 返回值：返回一个`CSafeProcess`结构体，表示进程信息
    * 用法：
        ```cpp
        CSafeProcess pi = CSafeAntivirusEngine_Choke();//等待一个新的进程启动，然后返回进程信息
        ```
    * 示例：
        ```cpp
        #include <iostream>//std::cout
        #include "CSafeAntivirusEngine/CSafeAntivirusEngine.h"//头文件定义

        int main() {
            CSafeProcess ProcessInformation = CSafeAntivirusEngine_Choke();//等待新的进程启动
            std::cout << ProcessInformation.Path() << " " << ProcessInformation.PID() << " " << ProcessInformation.RiskLevel() << std::endl;//当有新的进程启动时，输出该进程的信息
        }
        ```

* `SetCSafeVirusLibraryPath(std::string)`函数：
    * 用于设置病毒库路径，在进行文件的静态查杀的时候起作用
    * 参数：一个`std::string`类型的字符串，代表病毒库路径(支持相对路径)
    * 返回值：`bool`类型，指定的文件存在则会返回`true`并设置文件路径，反之将会返回`false`并设置文件路径(注意：当指定的文件不存在的时候，该函数仍然会设置路径)
    * 用法：
    ```cpp
    SetCSafeVirusLibraryPath("A_VirusLibraryFile.data");
    ```

* `CSafeProcessDelection(PROCESSENTRY32)`函数：
    * 用于检查一个进程的危险等级
    * 参数：一个`PROCESSENTRY32`结构体类型，代表目标进程的句柄
    * 返回值：一个`CSafeRiskLevel`短整形，代表进程的危险等级
    * 用法：
    ```cpp
    PROCESSENTRY32 pe32 = A_Random_Process();
    CSafeRiskLevel rl = CSafeProcessDelection(pe32);
    ```

* `CSafeFileDelection(std::string)`函数：
    * 根据病毒库记录的数据检测一个指定文件是否是病毒
    * 参数：一个`std::string`字符串，代表指定文件路径
    * 返回值：一个`bool`类型，代表其是否是病毒，是则返回`true`，反之则返回`false`
    * 用法：
    ```cpp
    std::string file = "/path/to/path/demo.file";//定义文件路径
    if(CSafeFileDelection(file))//如果检测到该文件是病毒
        std::cout << "Virus!" << std::endl;//输出信息
    ```

### 进程风险等级
* 由于CSafe杀毒引擎采用的是多维度行为检测杀毒引擎，因此进程的风险等级都是由各项风险行为的危险等级叠加而来，故可能进程的危险等级之间会相差甚远，甚至相差数十级，不同的杀毒引擎版本对于同一个程序给出的风险等级也不同，因此请一定要严格确认文档对应的杀毒引擎版本！

* 风险等级与风险程度对照表：
    * 0级：无风险
    * 1-3级：低风险
    * 4-6级：高风险
    * 7-8级：危险
    * 9级及以上：病毒

* 以下是不同风险程序建议给予的处理：
    * 无风险：不予处理
    * 低风险：给予报告记录
    * 高风险：挂起程序并记录
    * 危险：结束进程
    * 病毒：结束进程并隔离

* 注意：除无风险以外，其他风险情况均应该告知用户，并且应该让用户决定后续的处理方式(如删除文件、隔离文件、不予处理并添加白名单等处理方式)！

* 由于测试能力不足，请在应用这些风险程度之前检查该定义版本是否会出现越级现象！


### CSafe独有术语释义

* "越级"现象：是指由于风险程度的定义不够完善、或者风险行为的危险等级、判别条件有误导致的输出风险等级与实际应有风险等级不符的情况。

* "定义版本"：是指一个指定的杀毒引擎版本对应的风险等级与风险程度对照表的版本，例如"当前定义版本"指的就是当前发布的杀毒引擎对应的风险等级与风险程度对照表的版本

* "风险等级"/"危险等级"：是指杀毒引擎对一个进程作出的风险等级的判断。例如1级、2级、5级、9级等，理论上讲可以无限叠加

* "风险程度"/"危险程度"：是指一个进程的风险的程度大小，不由杀毒软件直接判别。例如"低风险"、"高风险"、"危险"、"病毒"。