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

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

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

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

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

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

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

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

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

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

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

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

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

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

* `FileDelection(std::string)`函数：
    * 根据病毒库记录的数据检测一个指定文件是否是病毒
    * 参数：一个`std::string`字符串，代表指定文件路径
    * 返回值：一个`bool`类型，代表其是否是病毒，是则返回`true`，反之则返回`false`