跳至主要內容

接口说明


头文件说明

  • iMonitor.h 驱动、应用层共用的定义
  • iMonitorSDK.h SDK接口定义
  • iMonitorProtocol.h idl自动生成的协议辅助类
  • iMonitorSDKExtesnion.h 基于SDK在应用层实现的扩展功能

注意:如果接口变化,以最新版本的SDK头文件为准

接口说明

IMonitorManager

SDK的使用接口

interface IMonitorManager : public IUnknown
{
    virtual HRESULT            Start                (IMonitorCallbackInternal* Callback) = 0;
    virtual HRESULT            Start                (IMonitorCallback* Callback) = 0;
    virtual HRESULT            Control              (PVOID Data, ULONG Length, PVOID OutData, ULONG OutLength, PULONG ReturnLength) = 0;
    virtual HRESULT            Stop                 (void) = 0;
    virtual HRESULT            UnloadDriver         (void) = 0
    
    virtual HRESULT            CreateRuleEngine     (LPCWSTR Path, IMonitorRuleEngine** Engine) = 0;
    virtual HRESULT            CreateAgentEngine    (ULONG MaxThread, IMonitorAgentEngine** Engine) = 0;
};
函数说明
Start设置驱动回调、安装并启动驱动
Control跟驱动通讯的入口,详细参考cxMSGUserXxxx结构体
CreateRuleEngine应用层扩展功能: 加载规则引擎,详细参考规则引擎部分
CreateAgentEngine应用层扩展功能:创建网络中间人服务器,详细参考网络代理部分
UnloadDriver停止并卸载驱动

支持的Control参数类型

类型说明
cxMSGUserSetGlobalConfig设置全局配置
cxMSGUserGetGlobalConfig获取全局配置
cxMSGUserSetSessionConfig设置当前会话配置
cxMSGUserGetSessionConfig获取当前配置会话
cxMSGUserSetMSGConfig设置监控消息配置,开启监控都通过这个命令字设置
cxMSGUserGetMSGConfig获取监控消息配置
cxMSGUserEnableProtect开启自保护
cxMSGUserDisableProtect关闭自保护
cxMSGUserAddProtectRule添加保护规则
cxMSGUserRemoveProtectRule删除保护规则
cxMSGUserRemoveAllProtectRule清空保护规则

IMonitorCallback

事件回调接口,监控到的事件都通过OnCallback通知到应用层,在回调里面可以通过IMonitorMessage获取事件的详细信息,也可以设置需要响应的结果。

interface IMonitorCallback
{
    virtual void            OnCallback            (IMonitorMessage* Message) = 0;
};

IMonitorCallbackInternal

内部使用的接口,参数是为解析前的原始参数,只供内部使用,没特殊原因,不需要设置这类型的回调

interface IMonitorCallbackInternal
{
    virtual void            OnCallback            (cxMSGHeader* Header, cxMSGAction* Action) = 0;
};

IMonitorMessage

驱动事件消息,包括公共字段(当前进程信息等)、私有字段(具体参考附录的协议字段)

interface IMonitorMessage
{
    struct Binary {
        PVOID Data;
        ULONG Length;
    };

    virtual cxMSGHeader*    GetHeader           (void) = 0;
    inline  ULONG           GetType             (void) { return GetHeader()->Type; }
    inline  ULONG           GetStatus           (void) { return GetHeader()->Status; }
    inline  ULONG           GetCurrentProcessId (void) { return GetHeader()->CurrentProcessId; }
    inline  ULONG           GetCurrentThreadId  (void) { return GetHeader()->CurrentThreadId; }

    virtual LPCWSTR         GetTypeName         (void) = 0;
    virtual ULONG           GetFieldCount       (void) = 0;
    virtual emMSGDataType   GetFieldType        (ULONG Index) = 0;
    virtual LPCWSTR         GetFieldName        (ULONG Index) = 0;
    virtual ULONG           GetFieldIndex       (LPCWSTR Name) = 0;

    virtual ULONG           GetULONG            (ULONG Index) = 0;
    virtual ULONGLONG       GetULONGLONG        (ULONG Index) = 0;
    virtual LPCWSTR         GetString           (ULONG Index) = 0;
    virtual LPCWSTR         GetFormatedString   (ULONG Index) = 0;
    virtual Binary          GetBinary           (ULONG Index) = 0;

    virtual bool            IsMatch             (ULONG Index, LPCWSTR Pattern, bool IgnoreCase = true) = 0;

    virtual bool            IsWaiting           (void) = 0;
    virtual bool            SetAction           (const cxMSGAction& Action) = 0;
    virtual bool            SetBlock            (void) = 0;
    virtual bool            SetGrantedAccess    (ULONG Access) = 0;
    virtual bool            SetIPRedirect       (ULONG IP, USHORT Port, ULONG ProcessId = ::GetCurrentProcessId()) = 0;
    virtual bool            SetTerminateProcess (void) = 0;
    virtual bool            SetTerminateThread  (void) = 0;
    virtual bool            SetInjectDll        (LPCWSTR Path) = 0;
    virtual bool            SetFileRedirect     (LPCWSTR Path) = 0;
};
函数说明
GetType消息类型,比如 emMSGProcessCreate
GetTypeName消息类型的字符串,比如 ProcessCreate
GetFieldCount当前消息字段的格式,每个字段可以通过GetFieldXxx、GetXxx获取属性和值
GetStatusPost请求有效:当前操作的执行结果
GetString要求字段必须是字符串,如果对应的字段不是字符串,则返回空字符串
GetFormatedString同GetString,区别在于:不是字符串的内容会强制转换成字符串
IsWaiting驱动是否阻塞事件执行,如果是可以通过SetXxx来响应事件(阻止、重定向等)
SetBlock阻止当前的操作
SetGrantedAccess对于打开进程、打开线程操作,可以设置允许的打开权限
SetTerminateProcess结束当前进程
SetTerminateThread结束当前线程
SetInjectDll对当前进程注入动态库(自己判断是32位的还是64位进程)
SetIPRedirect对于Tcp连接,可以设置IP、Port重定向到新的地址
IsMatch内置通配符字符串匹配,支持 * ? > (> 表示目录,dir> 等同于 dir + dir\\*) IgnoreCase表示是否忽略大小写,默认忽略

iMonitorSDKExtesnion

在应用层实现的能力扩展,详细参考规则引擎网络代理